BitMiracle.LibTiff.Classic.Tiff.fetchAnyArray C# (CSharp) Method

fetchAnyArray() private method

Fetches an array of ANY values.
The actual values are returned as doubles which should be able hold all the types. Note in particular that we assume that the double return value vector is large enough to read in any fundamental type. We use that vector as a buffer to read in the base type vector and then convert it in place to double (from end to front of course).
private fetchAnyArray ( TiffDirEntry dir, double v ) : bool
dir TiffDirEntry
v double
return bool
        private bool fetchAnyArray(TiffDirEntry dir, double[] v)
        {
            int i = 0;
            bool res = false;
            switch (dir.tdir_type)
            {
                case TiffType.BYTE:
                case TiffType.SBYTE:
                    byte[] b = new byte[dir.tdir_count];
                    res = fetchByteArray(dir, b);
                    if (res)
                    {
                        for (i = dir.tdir_count - 1; i >= 0; i--)
                            v[i] = b[i];
                    }

                    if (!res)
                        return false;

                    break;
                case TiffType.SHORT:
                case TiffType.SSHORT:
                    short[] u = new short[dir.tdir_count];
                    res = fetchShortArray(dir, u);
                    if (res)
                    {
                        for (i = dir.tdir_count - 1; i >= 0; i--)
                            v[i] = u[i];
                    }

                    if (!res)
                        return false;

                    break;
                case TiffType.LONG:
                case TiffType.SLONG:
                    int[] l = new int[dir.tdir_count];
                    res = fetchLongArray(dir, l);
                    if (res)
                    {
                        for (i = dir.tdir_count - 1; i >= 0; i--)
                            v[i] = l[i];
                    }

                    if (!res)
                        return false;

                    break;
                case TiffType.RATIONAL:
                case TiffType.SRATIONAL:
                    float[] r = new float[dir.tdir_count];
                    res = fetchRationalArray(dir, r);
                    if (res)
                    {
                        for (i = dir.tdir_count - 1; i >= 0; i--)
                            v[i] = r[i];
                    }

                    if (!res)
                        return false;

                    break;
                case TiffType.FLOAT:
                    float[] f = new float[dir.tdir_count];
                    res = fetchFloatArray(dir, f);
                    if (res)
                    {
                        for (i = dir.tdir_count - 1; i >= 0; i--)
                            v[i] = f[i];
                    }

                    if (!res)
                        return false;

                    break;
                case TiffType.DOUBLE:
                    return fetchDoubleArray(dir, v);
                default:
                    // NOTYPE
                    // ASCII
                    // UNDEFINED
                    ErrorExt(this, m_clientdata, m_name,
                        "cannot read TIFF_ANY type {0} for field \"{1}\"",
                        dir.tdir_type, FieldWithTag(dir.tdir_tag).Name);
                    return false;
            }

            return true;
        }
Tiff