Beispiel #1
0
        public static void buffStreamSimpleTest(System.String filename, int numIts, int[] in_Renamed, int[] in2)
        {
            System.Console.Out.WriteLine("New libraries:  nom.tam.BufferedDataXXputStream");
            System.Console.Out.WriteLine("                Using non-array I/O");
            BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Create), 32768);

            resetTime();
            int dim = in_Renamed.Length;

            for (int j = 0; j < numIts; j += 1)
            {
                for (int i = 0; i < dim; i += 1)
                {
                    f.Write(in_Renamed[i]);
                }
            }
            f.Flush();
            f.Close();
            System.Console.Out.WriteLine("  BDS Int write: " + (4 * dim * numIts) / (1000 * deltaTime()));

            BufferedDataStream is_Renamed = new BufferedDataStream(new BufferedStream(new FileStream(filename, FileMode.Open, FileAccess.Read), 32768));

            resetTime();
            for (int j = 0; j < numIts; j += 1)
            {
                for (int i = 0; i < dim; i += 1)
                {
                    in2[i] = is_Renamed.ReadInt32();
                }
            }

            if (is_Renamed != null)
            {
                is_Renamed.Close();
            }

            System.Console.Out.WriteLine("  BDS Int read:  " + (4 * dim * numIts) / (1000 * deltaTime()));

            // Close the stream.
            //is_Renamed.Flush();
        }
        public static void buffStreamSimpleTest(System.String filename, int numIts, int[] in_Renamed, int[] in2)
        {
            System.Console.Out.WriteLine("New libraries:  nom.tam.BufferedDataXXputStream");
            System.Console.Out.WriteLine("                Using non-array I/O");
            BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Create), 32768);
            resetTime();
            int dim = in_Renamed.Length;
            for (int j = 0; j < numIts; j += 1)
            {
                for (int i = 0; i < dim; i += 1)
                {
                    f.Write(in_Renamed[i]);
                }
            }
            f.Flush();
            f.Close();
            System.Console.Out.WriteLine("  BDS Int write: " + (4 * dim * numIts) / (1000 * deltaTime()));

            BufferedDataStream is_Renamed = new BufferedDataStream(new BufferedStream(new FileStream(filename, FileMode.Open, FileAccess.Read), 32768));
            resetTime();
            for (int j = 0; j < numIts; j += 1)
            {
                for (int i = 0; i < dim; i += 1)
                {
                    in2[i] = is_Renamed.ReadInt32();
                }
            }

            if (is_Renamed != null)
                is_Renamed.Close();

            System.Console.Out.WriteLine("  BDS Int read:  " + (4 * dim * numIts) / (1000 * deltaTime()));

            // Close the stream.
            //is_Renamed.Flush();
        }
        public static void bufferedStreamTest(System.String filename, int numIts, double[] db, double[] db2, float[] fl, float[] fl2, long[] ln, long[] ln2, int[] in_Renamed, int[] in2, short[] sh, short[] sh2, char[] ch, char[] ch2, byte[] by, byte[] by2, bool[] bl, bool[] bl2, int[][][][] multi, int[][][][] multi2)
        {
            int dim = db.Length;

            double ds = SupportClass.Random.NextDouble() - 0.5;
            double ds2;
            float fs = (float)(SupportClass.Random.NextDouble() - 0.5);
            float fs2;
            int is_Renamed = (int)(1000000 * (SupportClass.Random.NextDouble() - 500000));
            int is2;
            long ls = (long)(100000000000L * (SupportClass.Random.NextDouble() - 50000000000L));
            long ls2;
            short ss = (short)(60000 * (SupportClass.Random.NextDouble() - 30000));
            short ss2;
            char cs = (char)(60000 * SupportClass.Random.NextDouble());
            char cs2;
            byte bs = (byte)(256 * SupportClass.Random.NextDouble() - 128);
            byte bs2;
            bool bls = (SupportClass.Random.NextDouble() > 0.5);
            bool bls2;
            System.Console.Out.WriteLine("New libraries: nom.tam.util.BufferedDataXXputStream");
            System.Console.Out.WriteLine("               Using array I/O methods");

            {
                BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Create));

                resetTime();
                for (int i = 0; i < numIts; i += 1)
                    f.WriteArray(db);
                System.Console.Out.WriteLine("  BDS Dbl write: " + (8 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.WriteArray(fl);
                System.Console.Out.WriteLine("  BDS Flt write: " + (4 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.WriteArray(in_Renamed);
                System.Console.Out.WriteLine("  BDS Int write: " + (4 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.WriteArray(ln);
                System.Console.Out.WriteLine("  BDS Lng write: " + (8 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.WriteArray(sh);
                System.Console.Out.WriteLine("  BDS Sht write: " + (2 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.WriteArray(ch);
                System.Console.Out.WriteLine("  BDS Chr write: " + (2 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.WriteArray((byte[])by);
                System.Console.Out.WriteLine("  BDS Byt write: " + (1 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.WriteArray(bl);
                System.Console.Out.WriteLine("  BDS Boo write: " + (1 * dim * numIts) / (1000 * deltaTime()));

                f.Write((byte)bs);
                f.Write((System.Char)cs);
                f.Write((System.Int16)ss);
                f.Write(is_Renamed);
                f.Write(ls);
                f.Write(fs);
                f.Write(ds);
                f.Write(bls);

                f.WriteArray(multi);
                f.Flush();
                f.Close();
            }

            {
                BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Open, FileAccess.Read));

                resetTime();
                for (int i = 0; i < numIts; i += 1)
                    f.ReadArray(db2);
                System.Console.Out.WriteLine("  BDS Dbl read:  " + (8 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.ReadArray(fl2);
                System.Console.Out.WriteLine("  BDS Flt read:  " + (4 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.ReadArray(in2);
                System.Console.Out.WriteLine("  BDS Int read:  " + (4 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.ReadArray(ln2);
                System.Console.Out.WriteLine("  BDS Lng read:  " + (8 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.ReadArray(sh2);
                System.Console.Out.WriteLine("  BDS Sht read:  " + (2 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.ReadArray(ch2);
                System.Console.Out.WriteLine("  BDS Chr read:  " + (2 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.ReadArray((byte[])by2);
                System.Console.Out.WriteLine("  BDS Byt read:  " + (1 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                    f.ReadArray(bl2);
                System.Console.Out.WriteLine("  BDS Boo read:  " + (1 * dim * numIts) / (1000 * deltaTime()));

                bs2 = (byte)f.ReadByte();
                cs2 = f.ReadChar();
                ss2 = f.ReadInt16();
                is2 = f.ReadInt32();
                ls2 = f.ReadInt64();
                fs2 = f.ReadSingle();
                ds2 = f.ReadDouble();
                bls2 = f.ReadBoolean();

                for (int i = 0; i < 10; i += 1)
                {
                    multi2[i][i][i][i] = 0;
                }

                // Now read only pieces of the multidimensional array.
                for (int i = 0; i < 5; i += 1)
                {
                    System.Console.Out.WriteLine("Multiread:" + i);
                    // Skip the odd initial indices and
                    // read the evens.
                    //BinaryReader temp_BinaryReader;
                    System.Int64 temp_Int64;
                    //temp_BinaryReader = f;
                    temp_Int64 = f.Position;  //temp_BinaryReader.BaseStream.Position;
                    temp_Int64 = f.Seek(4000) - temp_Int64;  //temp_BinaryReader.BaseStream.Seek(4000, SeekOrigin.Current) - temp_Int64;
                    int generatedAux28 = (int)temp_Int64;
                    f.ReadArray(multi2[2 * i + 1]);
                }
                //	f.Close();
            }

            System.Console.Out.WriteLine("Stream Verification:");
            System.Console.Out.WriteLine("  An error should be reported for double and float NaN's");
            System.Console.Out.WriteLine("  Arrays:");

            for (int i = 0; i < dim; i += 1)
            {
                if (db[i] != db2[i] && !Double.IsNaN(db[i]) && !Double.IsNaN(db2[i]))
                {
                    System.Console.Out.WriteLine("     Double error at " + i + " " + db[i] + " " + db2[i]);
                }
                if (fl[i] != fl2[i] && !Single.IsNaN(fl[i]) && !Single.IsNaN(fl2[i]))
                {
                    System.Console.Out.WriteLine("     Float error at " + i + " " + fl[i] + " " + fl2[i]);
                }
                if (in_Renamed[i] != in2[i])
                {
                    System.Console.Out.WriteLine("     Int error at " + i + " " + in_Renamed[i] + " " + in2[i]);
                }
                if (ln[i] != ln2[i])
                {
                    System.Console.Out.WriteLine("     Long error at " + i + " " + ln[i] + " " + ln2[i]);
                }
                if (sh[i] != sh2[i])
                {
                    System.Console.Out.WriteLine("     Short error at " + i + " " + sh[i] + " " + sh2[i]);
                }
                if (ch[i] != ch2[i])
                {
                    System.Console.Out.WriteLine("     Char error at " + i + " " + (int)ch[i] + " " + (int)ch2[i]);
                }
                if (by[i] != by2[i])
                {
                    System.Console.Out.WriteLine("     Byte error at " + i + " " + by[i] + " " + by2[i]);
                }
                if (bl[i] != bl2[i])
                {
                    System.Console.Out.WriteLine("     Bool error at " + i + " " + bl[i] + " " + bl2[i]);
                }
            }

            System.Console.Out.WriteLine("  Scalars:");
            // Check the scalars.
            if (bls != bls2)
            {
                System.Console.Out.WriteLine("     Bool Scalar mismatch:" + bls + " " + bls2);
            }
            if (bs != bs2)
            {
                System.Console.Out.WriteLine("     Byte Scalar mismatch:" + bs + " " + bs2);
            }
            if (cs != cs2)
            {
                System.Console.Out.WriteLine("     Char Scalar mismatch:" + (int)cs + " " + (int)cs2);
            }
            if (ss != ss2)
            {
                System.Console.Out.WriteLine("     Short Scalar mismatch:" + ss + " " + ss2);
            }
            if (is_Renamed != is2)
            {
                System.Console.Out.WriteLine("     Int Scalar mismatch:" + is_Renamed + " " + is2);
            }
            if (ls != ls2)
            {
                System.Console.Out.WriteLine("     Long Scalar mismatch:" + ls + " " + ls2);
            }
            if (fs != fs2)
            {
                System.Console.Out.WriteLine("     Float Scalar mismatch:" + fs + " " + fs2);
            }
            if (ds != ds2)
            {
                System.Console.Out.WriteLine("     Double Scalar mismatch:" + ds + " " + ds2);
            }

            System.Console.Out.WriteLine("  Multi: odd rows should match");
            for (int i = 0; i < 10; i += 1)
            {
                System.Console.Out.WriteLine("      " + i + " " + multi[i][i][i][i] + " " + multi2[i][i][i][i]);
            }
            System.Console.Out.WriteLine("Done BufferedStream Tests");
        }
Beispiel #4
0
        /// <summary>Write a Fits Object to an external Stream.  The stream is left open.</summary>
        /// <param name="dos">A DataOutput stream</param>
        public virtual void Write(Stream os)
        {
            ArrayDataIO obs;
            bool newOS = false;

            if(os is ArrayDataIO)
            {
                obs = (ArrayDataIO) os;
            }
            else
            {
                newOS = true;
                obs = new BufferedDataStream(os);
            }

            BasicHDU hh;
            for(int i = 0; i < NumberOfHDUs; i += 1)
            {
                try
                {
                    hh = (BasicHDU)hduList[i];
                    hh.Write(obs);
                }
                catch(IndexOutOfRangeException e)
                {
                    SupportClass.WriteStackTrace(e, Console.Error);
                    throw new FitsException("Internal Error: Vector Inconsistency" + e);
                }
            }

            if(newOS)
            {
                try
                {
                    obs.Flush();
                    obs.Close();
                }
                catch(IOException)
                {
                    Console.Error.WriteLine("Warning: error closing FITS output stream");
                }
            }

            // change suggested in .99 version
            try
            {
                if (obs is BufferedFile)
                {
                    ((BufferedFile)obs).SetLength( ((BufferedFile)obs).FilePointer);
              	        }
            }
            catch (IOException e)
            {
                System.Console.Out.WriteLine("Exception occured while Writing BufferedFile: \n\t" + e.Message);
                // Ignore problems...
            }
        }
Beispiel #5
0
            public void WriteFrameImpl(IntPtr intPtr, int p, RawFrameInfo info)
            {
                object data = MarshalToCLR(intPtr, p);
                Fits fits = new Fits();
                BasicHDU hdu = FitsFactory.HDUFactory(data);
                if ((data is short[][] || data is short[][][]) && _significantBitDepth > 8)
                {
                    hdu.AddValue("BZERO", 32768.0, "");
                }

                AddMetadataToFrame(info, hdu);

                fits.AddHDU(hdu);
                using (FileStream fs = File.Create(Path.GetTempFileName()))
                {
                    using (BufferedDataStream f = new BufferedDataStream(fs))
                    {
                        fits.Write(f);
                    }
                }
            }
Beispiel #6
0
        public static void bufferedStreamTest(System.String filename, int numIts, double[] db, double[] db2, float[] fl, float[] fl2, long[] ln, long[] ln2, int[] in_Renamed, int[] in2, short[] sh, short[] sh2, char[] ch, char[] ch2, byte[] by, byte[] by2, bool[] bl, bool[] bl2, int[][][][] multi, int[][][][] multi2)
        {
            int dim = db.Length;

            double ds = SupportClass.Random.NextDouble() - 0.5;
            double ds2;
            float  fs = (float)(SupportClass.Random.NextDouble() - 0.5);
            float  fs2;
            int    is_Renamed = (int)(1000000 * (SupportClass.Random.NextDouble() - 500000));
            int    is2;
            long   ls = (long)(100000000000L * (SupportClass.Random.NextDouble() - 50000000000L));
            long   ls2;
            short  ss = (short)(60000 * (SupportClass.Random.NextDouble() - 30000));
            short  ss2;
            char   cs = (char)(60000 * SupportClass.Random.NextDouble());
            char   cs2;
            byte   bs = (byte)(256 * SupportClass.Random.NextDouble() - 128);
            byte   bs2;
            bool   bls = (SupportClass.Random.NextDouble() > 0.5);
            bool   bls2;

            System.Console.Out.WriteLine("New libraries: nom.tam.util.BufferedDataXXputStream");
            System.Console.Out.WriteLine("               Using array I/O methods");

            {
                BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Create));

                resetTime();
                for (int i = 0; i < numIts; i += 1)
                {
                    f.WriteArray(db);
                }
                System.Console.Out.WriteLine("  BDS Dbl write: " + (8 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.WriteArray(fl);
                }
                System.Console.Out.WriteLine("  BDS Flt write: " + (4 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.WriteArray(in_Renamed);
                }
                System.Console.Out.WriteLine("  BDS Int write: " + (4 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.WriteArray(ln);
                }
                System.Console.Out.WriteLine("  BDS Lng write: " + (8 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.WriteArray(sh);
                }
                System.Console.Out.WriteLine("  BDS Sht write: " + (2 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.WriteArray(ch);
                }
                System.Console.Out.WriteLine("  BDS Chr write: " + (2 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.WriteArray((byte[])by);
                }
                System.Console.Out.WriteLine("  BDS Byt write: " + (1 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.WriteArray(bl);
                }
                System.Console.Out.WriteLine("  BDS Boo write: " + (1 * dim * numIts) / (1000 * deltaTime()));

                f.Write((byte)bs);
                f.Write((System.Char)cs);
                f.Write((System.Int16)ss);
                f.Write(is_Renamed);
                f.Write(ls);
                f.Write(fs);
                f.Write(ds);
                f.Write(bls);

                f.WriteArray(multi);
                f.Flush();
                f.Close();
            }

            {
                BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Open, FileAccess.Read));

                resetTime();
                for (int i = 0; i < numIts; i += 1)
                {
                    f.ReadArray(db2);
                }
                System.Console.Out.WriteLine("  BDS Dbl read:  " + (8 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.ReadArray(fl2);
                }
                System.Console.Out.WriteLine("  BDS Flt read:  " + (4 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.ReadArray(in2);
                }
                System.Console.Out.WriteLine("  BDS Int read:  " + (4 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.ReadArray(ln2);
                }
                System.Console.Out.WriteLine("  BDS Lng read:  " + (8 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.ReadArray(sh2);
                }
                System.Console.Out.WriteLine("  BDS Sht read:  " + (2 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.ReadArray(ch2);
                }
                System.Console.Out.WriteLine("  BDS Chr read:  " + (2 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.ReadArray((byte[])by2);
                }
                System.Console.Out.WriteLine("  BDS Byt read:  " + (1 * dim * numIts) / (1000 * deltaTime()));
                for (int i = 0; i < numIts; i += 1)
                {
                    f.ReadArray(bl2);
                }
                System.Console.Out.WriteLine("  BDS Boo read:  " + (1 * dim * numIts) / (1000 * deltaTime()));

                bs2  = (byte)f.ReadByte();
                cs2  = f.ReadChar();
                ss2  = f.ReadInt16();
                is2  = f.ReadInt32();
                ls2  = f.ReadInt64();
                fs2  = f.ReadSingle();
                ds2  = f.ReadDouble();
                bls2 = f.ReadBoolean();

                for (int i = 0; i < 10; i += 1)
                {
                    multi2[i][i][i][i] = 0;
                }

                // Now read only pieces of the multidimensional array.
                for (int i = 0; i < 5; i += 1)
                {
                    System.Console.Out.WriteLine("Multiread:" + i);
                    // Skip the odd initial indices and
                    // read the evens.
                    //BinaryReader temp_BinaryReader;
                    System.Int64 temp_Int64;
                    //temp_BinaryReader = f;
                    temp_Int64 = f.Position;                //temp_BinaryReader.BaseStream.Position;
                    temp_Int64 = f.Seek(4000) - temp_Int64; //temp_BinaryReader.BaseStream.Seek(4000, SeekOrigin.Current) - temp_Int64;
                    int generatedAux28 = (int)temp_Int64;
                    f.ReadArray(multi2[2 * i + 1]);
                }
                //	f.Close();
            }

            System.Console.Out.WriteLine("Stream Verification:");
            System.Console.Out.WriteLine("  An error should be reported for double and float NaN's");
            System.Console.Out.WriteLine("  Arrays:");

            for (int i = 0; i < dim; i += 1)
            {
                if (db[i] != db2[i] && !Double.IsNaN(db[i]) && !Double.IsNaN(db2[i]))
                {
                    System.Console.Out.WriteLine("     Double error at " + i + " " + db[i] + " " + db2[i]);
                }
                if (fl[i] != fl2[i] && !Single.IsNaN(fl[i]) && !Single.IsNaN(fl2[i]))
                {
                    System.Console.Out.WriteLine("     Float error at " + i + " " + fl[i] + " " + fl2[i]);
                }
                if (in_Renamed[i] != in2[i])
                {
                    System.Console.Out.WriteLine("     Int error at " + i + " " + in_Renamed[i] + " " + in2[i]);
                }
                if (ln[i] != ln2[i])
                {
                    System.Console.Out.WriteLine("     Long error at " + i + " " + ln[i] + " " + ln2[i]);
                }
                if (sh[i] != sh2[i])
                {
                    System.Console.Out.WriteLine("     Short error at " + i + " " + sh[i] + " " + sh2[i]);
                }
                if (ch[i] != ch2[i])
                {
                    System.Console.Out.WriteLine("     Char error at " + i + " " + (int)ch[i] + " " + (int)ch2[i]);
                }
                if (by[i] != by2[i])
                {
                    System.Console.Out.WriteLine("     Byte error at " + i + " " + by[i] + " " + by2[i]);
                }
                if (bl[i] != bl2[i])
                {
                    System.Console.Out.WriteLine("     Bool error at " + i + " " + bl[i] + " " + bl2[i]);
                }
            }

            System.Console.Out.WriteLine("  Scalars:");
            // Check the scalars.
            if (bls != bls2)
            {
                System.Console.Out.WriteLine("     Bool Scalar mismatch:" + bls + " " + bls2);
            }
            if (bs != bs2)
            {
                System.Console.Out.WriteLine("     Byte Scalar mismatch:" + bs + " " + bs2);
            }
            if (cs != cs2)
            {
                System.Console.Out.WriteLine("     Char Scalar mismatch:" + (int)cs + " " + (int)cs2);
            }
            if (ss != ss2)
            {
                System.Console.Out.WriteLine("     Short Scalar mismatch:" + ss + " " + ss2);
            }
            if (is_Renamed != is2)
            {
                System.Console.Out.WriteLine("     Int Scalar mismatch:" + is_Renamed + " " + is2);
            }
            if (ls != ls2)
            {
                System.Console.Out.WriteLine("     Long Scalar mismatch:" + ls + " " + ls2);
            }
            if (fs != fs2)
            {
                System.Console.Out.WriteLine("     Float Scalar mismatch:" + fs + " " + fs2);
            }
            if (ds != ds2)
            {
                System.Console.Out.WriteLine("     Double Scalar mismatch:" + ds + " " + ds2);
            }

            System.Console.Out.WriteLine("  Multi: odd rows should match");
            for (int i = 0; i < 10; i += 1)
            {
                System.Console.Out.WriteLine("      " + i + " " + multi[i][i][i][i] + " " + multi2[i][i][i][i]);
            }
            System.Console.Out.WriteLine("Done BufferedStream Tests");
        }
Beispiel #7
0
        /// <summary>Add some data to the heap.</summary>
        internal virtual int PutData(Object data)
        {
            int size = ArrayFuncs.ComputeSize(data);
            ExpandHeap(size);
            MemoryStream bo = new MemoryStream(size);

            try
            {
                BufferedDataStream o = new BufferedDataStream(bo);
                o.WriteArray(data);
                o.Flush();
                o.Close();
            }
            catch(IOException)
            {
                throw new FitsException("Unable to write variable column length data");
            }

            Array.Copy(bo.ToArray(), 0, heap, heapSize, size);
            int oldOffset = heapSize;
            heapSize += size;

            // change suggested in .99.1 version:
            heapOffset = heapSize;

            return oldOffset;
        }
Beispiel #8
0
        /// <summary>Check if the Heap can accommodate a given requirement. If not expand the heap.</summary>
        internal virtual void ExpandHeap(int need)
        {
            // change suggested in .99.1 version:
            // Invalidate any existing input stream to the heap.
            bstr = null;

            if (heapSize + need > heap.Length)
            {
                // change suggested in .99.1 version:
                expanded = true;

                int newlen = (heapSize + need) * 2;
                if (newlen < 16384)
                {
                    newlen = 16384;
                }
                byte[] newHeap = new byte[newlen];
                Array.Copy(heap, 0, newHeap, 0, heapSize);
                heap = newHeap;
            }
        }
Beispiel #9
0
        /// <summary>Read the heap</summary>
        public virtual void Read(ArrayDataIO str)
        {
            if (str is RandomAccess)
            {
                fileOffset = FitsUtil.FindOffset(str);
                input = str;
            }

            if (heap != null)
            {
                try
                {
                    str.Read(heap, 0, heapSize);
                }
                catch(IOException e)
                {
                    throw new FitsException("Error reading heap:" + e);
                }
            }

            // change suggested in .99.1 version:
            bstr = null;
        }
Beispiel #10
0
        /// <summary>Get data from the heap.</summary>
        /// <param name="offset">The offset at which the data begins.</param>
        /// <param name="array"> The array to be extracted.</param>
        public virtual void GetData(int offset, Object array)
        {
            // Can we reuse the existing byte stream?
            try
            {
                if (bstr == null || heapOffset > offset)
                {
                    heapOffset = 0;
                    bstr = new BufferedDataStream(new MemoryStream(heap));
                }

                //System.IO.BinaryReader temp_BinaryReader;
                System.Int64 temp_Int64;
                //temp_BinaryReader = bstr;
                temp_Int64 = bstr.Position;  //temp_BinaryReader.BaseStream.Position;
                temp_Int64 = bstr.Seek(offset - heapOffset) - temp_Int64;  //temp_BinaryReader.BaseStream.Seek(offset - heapOffset, System.IO.SeekOrigin.Current) - temp_Int64;
                int generatedAux = (int)temp_Int64;
                heapOffset = offset;
                heapOffset += bstr.ReadArray(array);
            }
            catch(IOException e)
            {
                throw new FitsException("Error decoding heap area at offset=" + offset + ".  Exception: Exception " + e);
            }
        }