Пример #1
0
        void HandleCountSpreadChanged(IDiffSpread <int> spread)
        {
            int oldCount = FIOContainers.Count;
            int newCount = Math.Max(spread[0], 0);

            for (int i = oldCount; i < newCount; i++)
            {
                var attribute = new OutputAttribute(string.Format("{0} {1}", FOutputAttribute.Name, i + 1))
                {
                    IsPinGroup = false,
                    Order      = FOutputAttribute.Order + FOffsetCounter * 1000 + i,
                    BinOrder   = FOutputAttribute.Order + FOffsetCounter * 1000 + i
                };
                var io = FFactory.CreateIOContainer(typeof(IOutStream <T>), attribute, false);
                FIOContainers.Add(io);
            }

            for (int i = oldCount - 1; i >= newCount; i--)
            {
                var io = FIOContainers[i];
                FIOContainers.Remove(io);
                io.Dispose();
            }

            FStreams.Length = FIOContainers.Count;
            using (var writer = FStreams.GetWriter())
            {
                foreach (var io in FIOContainers)
                {
                    writer.Write(io.RawIOObject as IOutStream <T>);
                }
            }
        }
Пример #2
0
        public Spread(IList <T> original)
            : this(original.Count)
        {
            var buffer = new T[original.Count];

            original.CopyTo(buffer, 0);
            using (var writer = FStream.GetWriter())
            {
                writer.Write(buffer, 0, buffer.Length);
            }
        }
Пример #3
0
        static void ConvertAllAtOnce(Stream srcStream, BufferedIOStream <double> dstStream, double[] buffer, ValueTypeFormat format, ByteOrder byteOrder)
        {
            var binaryReader    = new BinaryReader(srcStream);
            var sizeOfT         = ValueTypeFormatUtils.SizeOf(format);
            var dstStreamLength = (int)srcStream.Length / sizeOfT;

            dstStream.Length = dstStreamLength;
            using (var dstStreamWriter = dstStream.GetWriter())
            {
                while (!dstStreamWriter.Eos)
                {
                    switch (format)
                    {
                    case ValueTypeFormat.Boolean:
                        var booleanBuffer = binaryReader.ReadBooleans(buffer.Length, byteOrder);
                        for (int i = 0; i < booleanBuffer.Length; i++)
                        {
                            buffer[i] = (double)Convert.ChangeType(booleanBuffer[i], TypeCode.Double);
                        }
                        dstStreamWriter.Write(buffer, 0, booleanBuffer.Length);
                        break;

                    case ValueTypeFormat.SByte:
                        var sbyteBuffer = binaryReader.ReadBytes(buffer.Length);
                        for (int i = 0; i < sbyteBuffer.Length; i++)
                        {
                            buffer[i] = (double)(SByte)sbyteBuffer[i];
                        }
                        dstStreamWriter.Write(buffer, 0, sbyteBuffer.Length);
                        break;

                    case ValueTypeFormat.Byte:
                        var byteBuffer = binaryReader.ReadBytes(buffer.Length);
                        for (int i = 0; i < byteBuffer.Length; i++)
                        {
                            buffer[i] = (double)byteBuffer[i];
                        }
                        dstStreamWriter.Write(buffer, 0, byteBuffer.Length);
                        break;

                    case ValueTypeFormat.Int16:
                        var int16Buffer = binaryReader.ReadInt16s(buffer.Length, byteOrder);
                        for (int i = 0; i < int16Buffer.Length; i++)
                        {
                            buffer[i] = (double)int16Buffer[i];
                        }
                        dstStreamWriter.Write(buffer, 0, int16Buffer.Length);
                        break;

                    case ValueTypeFormat.UInt16:
                        var uint16Buffer = binaryReader.ReadUInt16s(buffer.Length, byteOrder);
                        for (int i = 0; i < uint16Buffer.Length; i++)
                        {
                            buffer[i] = (double)uint16Buffer[i];
                        }
                        dstStreamWriter.Write(buffer, 0, uint16Buffer.Length);
                        break;

                    case ValueTypeFormat.Int32:
                        var int32Buffer = binaryReader.ReadInt32s(buffer.Length, byteOrder);
                        for (int i = 0; i < int32Buffer.Length; i++)
                        {
                            buffer[i] = (double)int32Buffer[i];
                        }
                        dstStreamWriter.Write(buffer, 0, int32Buffer.Length);
                        break;

                    case ValueTypeFormat.UInt32:
                        var uint32Buffer = binaryReader.ReadUInt32s(buffer.Length, byteOrder);
                        for (int i = 0; i < uint32Buffer.Length; i++)
                        {
                            buffer[i] = (double)uint32Buffer[i];
                        }
                        dstStreamWriter.Write(buffer, 0, uint32Buffer.Length);
                        break;

                    case ValueTypeFormat.Int64:
                        var int64Buffer = binaryReader.ReadInt64s(buffer.Length, byteOrder);
                        for (int i = 0; i < int64Buffer.Length; i++)
                        {
                            buffer[i] = (double)int64Buffer[i];
                        }
                        dstStreamWriter.Write(buffer, 0, int64Buffer.Length);
                        break;

                    case ValueTypeFormat.UInt64:
                        var uint64Buffer = binaryReader.ReadUInt64s(buffer.Length, byteOrder);
                        for (int i = 0; i < uint64Buffer.Length; i++)
                        {
                            buffer[i] = (double)uint64Buffer[i];
                        }
                        dstStreamWriter.Write(buffer, 0, uint64Buffer.Length);
                        break;

                    case ValueTypeFormat.Single:
                        var singleBuffer = binaryReader.ReadSingles(buffer.Length, byteOrder);
                        for (int i = 0; i < singleBuffer.Length; i++)
                        {
                            buffer[i] = (double)singleBuffer[i];
                        }
                        dstStreamWriter.Write(buffer, 0, singleBuffer.Length);
                        break;

                    case ValueTypeFormat.Double:
                        var itemRead = binaryReader.Read(buffer, 0, buffer.Length, byteOrder);
                        dstStreamWriter.Write(buffer, 0, itemRead);
                        break;

                    default:
                        throw new NotImplementedException();
                    }
                }
            }
        }
Пример #4
0
        static void ConvertOneByOne(Stream srcStream, BufferedIOStream <double> dstStream, IInStream <ValueTypeFormat> formatStream, ByteOrder byteOrder)
        {
            var binaryReader    = new BinaryReader(srcStream);
            int dstStreamLength = 0;

            using (var writer = dstStream.GetWriter())
                using (var formatStreamReader = formatStream.GetCyclicReader())
                {
                    while (srcStream.Position < srcStream.Length)
                    {
                        var    format = formatStreamReader.Read();
                        double result;
                        switch (format)
                        {
                        case ValueTypeFormat.Boolean:
                            result = (Double)Convert.ChangeType(binaryReader.ReadBoolean(byteOrder), typeof(Double));
                            break;

                        case ValueTypeFormat.SByte:
                            result = (Double)binaryReader.ReadSByte();
                            break;

                        case ValueTypeFormat.Byte:
                            result = (Double)binaryReader.ReadByte();
                            break;

                        case ValueTypeFormat.Int16:
                            result = (Double)binaryReader.ReadInt16(byteOrder);
                            break;

                        case ValueTypeFormat.UInt16:
                            result = (Double)binaryReader.ReadUInt16(byteOrder);
                            break;

                        case ValueTypeFormat.Int32:
                            result = (Double)binaryReader.ReadInt32(byteOrder);
                            break;

                        case ValueTypeFormat.UInt32:
                            result = (Double)binaryReader.ReadUInt32(byteOrder);
                            break;

                        case ValueTypeFormat.Int64:
                            result = (Double)binaryReader.ReadInt64(byteOrder);
                            break;

                        case ValueTypeFormat.UInt64:
                            result = (Double)binaryReader.ReadUInt64(byteOrder);
                            break;

                        case ValueTypeFormat.Single:
                            result = (Double)binaryReader.ReadSingle(byteOrder);
                            break;

                        case ValueTypeFormat.Double:
                            result = binaryReader.ReadDouble(byteOrder);
                            break;

                        default:
                            throw new NotImplementedException();
                        }
                        writer.Write(result);
                        dstStreamLength++;
                    }
                }
            dstStream.Length = dstStreamLength;
        }
Пример #5
0
 public IStreamWriter <T> GetWriter()
 {
     CopyOnWrite();
     return(FIOStream.GetWriter());
 }