Esempio n. 1
0
        public int ReadTile(IStreamReader inputStream, byte[] inputBuffer, int index)
        {
            if (PointCount == 0)
            {
                return(0);
            }

            if (index + StorageSize > inputBuffer.Length)
            {
                throw new ArgumentException("Tile data is larger than available buffer", "inputBuffer");
            }

            // seek if necessary (hopefully this is minimized)
            var position = TileSet.TileSource.PointDataOffset + (PointOffset * TileSet.TileSource.PointSizeBytes);

            if (inputStream.Position != position)
            {
                inputStream.Seek(position);
            }

            // read available points from main tile area and get low-res points from source
            var localStorageSize = (PointCount - LowResCount) * TileSet.TileSource.PointSizeBytes;
            var bytesRead        = inputStream.Read(inputBuffer, index, localStorageSize);

            //bytesRead += TileSet.TileSource.ReadLowResTile(this, inputBuffer, index + bytesRead);
            var lowResPosition = TileSet.TileSource.PointDataOffset + ((TileSet.PointCount - TileSet.LowResCount + LowResOffset) * TileSet.TileSource.PointSizeBytes);

            inputStream.Seek(lowResPosition);
            var lowResStorageSize = LowResCount * TileSet.TileSource.PointSizeBytes;

            bytesRead += inputStream.Read(inputBuffer, index + bytesRead, lowResStorageSize);

            return(bytesRead);
        }
Esempio n. 2
0
                public T Read(int stride = 1)
                {
                    var value = FDataReader.Length > 0 ? FDataReader.Read(stride) : default(T);

                    FPosition += stride;
                    return(value);
                }
Esempio n. 3
0
        public static int Read <T>(IStreamReader <T> reader, T[] buffer, int index, int length, int stride = 1)
        {
            int slicesToRead = GetNumSlicesAhead(reader, index, length, stride);

            switch (stride)
            {
            case 0:
                if (index == 0 && slicesToRead == buffer.Length)
                {
                    buffer.Init(reader.Read(stride));     // Slightly faster
                }
                else
                {
                    buffer.Fill(index, slicesToRead, reader.Read(stride));
                }
                break;

            default:
                for (int i = index; i < index + slicesToRead; i++)
                {
                    buffer[i] = reader.Read(stride);
                }
                break;
            }

            return(slicesToRead);
        }
Esempio n. 4
0
 public T Read(int stride = 1)
 {
     if (Eos)
     {
         throw new InvalidOperationException();
     }
     FPosition += stride;
     return(FSourceReader.Read(stride));
 }
Esempio n. 5
0
        public T Read(int stride = 1)
        {
            var result = FReader.Read(stride);

            if (FReader.Eos)
            {
                FReader.Position %= FReader.Length;
            }
            return(result);
        }
Esempio n. 6
0
            public T Read(int stride = 1)
            {
                if (Eos)
                {
                    throw new InvalidOperationException();
                }
                Position += stride;
                var result = FSourceReader.Read(stride);

                Position += stride;
                return(result);
            }
        public bool MoveNext()
        {
            // check for cancel
            if (m_current != null && m_process != null && !m_process.Update(m_current))
            {
                return(false);
            }

            if (m_stream.Position < m_endPosition)
            {
                int bytesRead = m_stream.Read(m_buffer.Data, 0, m_usableBytesPerBuffer);

                if (bytesRead == 0)
                {
                    throw new Exception("I did something wrong");
                }

                if (m_stream.Position > m_endPosition)
                {
                    bytesRead -= (int)(m_stream.Position - m_endPosition);
                }

                int index = (m_current != null) ? m_current.Index + 1 : 0;
                m_current = new PointCloudBinarySourceEnumeratorChunk(index, m_buffer, bytesRead, m_source.PointSizeBytes, (float)(m_stream.Position - m_source.PointDataOffset) / (m_endPosition - m_source.PointDataOffset));

                return(true);
            }

            return(false);
        }
Esempio n. 8
0
        protected override void Sync(int i, int offsetIntoDataStream, int binSize, IStreamReader <T> dataReader)
        {
            var spread  = this[i];
            var builder = spread.ToBuilder();

            builder.Count = binSize;
            var slicesToRead = binSize;

            using (var buffer = MemoryPool <T> .GetBuffer())
            {
                var j = 0;
                dataReader.Position = offsetIntoDataStream;
                while (slicesToRead > 0)
                {
                    var slicesRead = dataReader.Read(buffer, 0, Math.Min(slicesToRead, buffer.Length));
                    if (slicesRead > 0)
                    {
                        for (int k = 0; k < slicesRead; k++)
                        {
                            builder[j++] = buffer[k];
                        }
                        slicesToRead -= slicesRead;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            this[i] = builder.ToSpread();
        }
Esempio n. 9
0
            public int Read(T[] buffer, int offset, int count)
            {
                var totalCopiedItems = 0;

                while (count > 0 && reader != null)
                {
                    var itemsCopied = reader.Read(buffer, offset, count);
                    if (itemsCopied > 0)
                    {
                        count            -= itemsCopied;
                        offset           += itemsCopied;
                        totalCopiedItems += itemsCopied;
                    }
                    else
                    {
                        try{
                            reader.Dispose();
                        }finally{
                            reader = null;
                        }
                        reader = GetNextReader();
                    }
                }
                return(totalCopiedItems);
            }
Esempio n. 10
0
        private static byte[] ReadBytes(IStreamReader reader)
        {
            var bLen = reader.ReadInt32(); // Byte length

            if (bLen < 0)
            {
                return(null);
            }

            if (bLen == NullLengthFlag)
            {
                return(null);
            }

            if (bLen == 0)
            {
                return(new byte[0]);
            }

            var result = new byte[bLen];

            var readLen = reader.Read(result, 0, bLen);

            if (readLen != bLen)
            {
                throw new ArgumentOutOfRangeException(nameof(readLen));
            }

            return(result);
        }
Esempio n. 11
0
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            /// Configure the output count
            if (FAnalogIns.IsChanged)
            {
                FAnalogIns.SliceCount = FAnalogInputCount[0];
            }
            if (FDigitalIns.IsChanged)
            {
                FDigitalIns.SliceCount = FDigitalInputCount[0];
            }

            /// If there is nothing new to read, there is nothing to parse
            if (!FirmataIn.IsChanged)
            {
                return;
            }

            /// Read in the stream
            try {
                using (IStreamReader <Stream> InputReader = FirmataIn.GetReader())
                {
                    while (!InputReader.Eos)
                    {
                        HandleStream(InputReader.Read());
                    }
                }
            } catch (Exception e) {
                return;
            }
        }
Esempio n. 12
0
        protected void PrintText(StreamWriter sw, IStreamReader workbookReader)
        {
            BiffHeader bh;

            try
            {
                while (workbookReader.BaseStream.Position < workbookReader.BaseStream.Length)
                {
                    bh.id     = (RecordType)workbookReader.ReadUInt16();
                    bh.length = workbookReader.ReadUInt16();

                    byte[] buffer = new byte[bh.length];
                    if (bh.length != workbookReader.Read(buffer, bh.length))
                    {
                        sw.WriteLine("EOF");
                    }

                    sw.Write("BIFF {0}\t{1}\t", bh.id, bh.length);
                    //Dump(buffer);
                    int count = 0;
                    foreach (byte b in buffer)
                    {
                        sw.Write("{0:X02} ", b);
                        count++;
                        if (count % 16 == 0 && count < buffer.Length)
                        {
                            sw.Write("\n\t\t\t");
                        }
                    }
                    sw.Write("\n");

                    if (_backgroundWorker != null)
                    {
                        int progress = 100;

                        if (sw.BaseStream.Length != 0)
                        {
                            progress = (int)(100 * workbookReader.BaseStream.Position / workbookReader.BaseStream.Length);
                        }
                        _backgroundWorker.ReportProgress(progress);

                        if (_backgroundWorker.CancellationPending)
                        {
                            _isCancelled = true;
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
Esempio n. 13
0
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            /// Configure the output count
            if (FAnalogIns.IsChanged)
            {
                FAnalogIns.SliceCount = FAnalogInputCount[0];
            }
            if (FDigitalIns.IsChanged)
            {
                FDigitalIns.SliceCount = FDigitalInputCount[0];
            }

            StringOut.SliceCount = 0;

            /// If there is nothing new to read, there is nothing to parse
            if (!FirmataIn.IsChanged)
            {
                return;
            }

            /// Read in the stream
            try {
                using (IStreamReader <Stream> InputReader = FirmataIn.GetReader())
                {
                    while (!InputReader.Eos)
                    {
                        Stream InStream = InputReader.Read();
                        if (InStream == null || InStream.Length == 0 || !InStream.CanRead)
                        {
                            continue;
                        }

                        // Read the incoming bytes to the internal stream buffer
                        for (int i = InStream.ReadByte(); i != -1; i = InStream.ReadByte())
                        {
                            Decode((byte)i);
                        }
                    }
                }
            } catch (Exception e) {
                return;
            }
        }
Esempio n. 14
0
        public static WireMessageId Read(IStreamReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            var buffer = new byte[BufferSize];

            if (reader.Read(buffer, 0, BufferSize) != BufferSize)
            {
                throw new ArgumentOutOfRangeException(nameof(buffer));
            }

            return(Convert(buffer.ToInt(BufferOffsets[0]),
                           buffer.ToInt(BufferOffsets[1]),
                           buffer.ToInt(BufferOffsets[2]),
                           buffer.ToInt(BufferOffsets[3]),
                           buffer.ToInt(BufferOffsets[4])));
        }
Esempio n. 15
0
 public void Copy(Stream source, Stream target)
 {
     using (var readQueue = new BoundedBlockingQueue <byte[]>(100))
     {
         scheduler.StartNew(() =>
         {
             reader.Read(source, readQueue);
             readQueue.CompleteAdding();
         });
         using (var processedQueue = new BoundedBlockingQueue <IndexedBuffer>(100))
         {
             scheduler.StartNew(() =>
             {
                 processor.Process(readQueue, processedQueue);
                 processedQueue.CompleteAdding();
             });
             var writeWaitHandle = new ManualResetEvent(false);
             scheduler.StartNew(() => writer.Write(processedQueue, target), writeWaitHandle);
             writeWaitHandle.WaitOne();
         }
     }
 }
Esempio n. 16
0
 /// <summary>
 /// Reads a sequence of items from the current stream and advances the position
 /// within the stream by the number of items read.
 /// Use the stride parameter to control advancing of the position after one item has been read.
 /// </summary>
 /// <param name="reader">The reader to use from reading.</param>
 /// <param name="segment">The array segment to read into.</param>
 /// <param name="stride">The stride by which the position is advanced after reading one item.</param>
 /// <returns>
 /// The total number of items read into the buffer.
 /// This can be less than the number of items requested if that many items are not currently available,
 /// or zero (0) if the end of the stream has been reached.
 /// </returns>
 public static int Read <T>(this IStreamReader <T> reader, ArraySegment <T> segment, int stride = 1)
 {
     return(reader.Read(segment.Array, segment.Offset, segment.Count, stride));
 }
Esempio n. 17
0
        private string ReadString(IStreamReader reader)
        {
            var bLen = reader.ReadInt32(); // Byte array length

            if (bLen < 0)
            {
                return(null);
            }

            if (bLen == 0)
            {
                return(String.Empty);
            }

            if (bLen == 1)
            {
                return(new String((char)reader.ReadByte(), 1));
            }

            var sLen = reader.ReadInt32(); // String length

            if (sLen > bLen || bLen > 4 * sLen)
            {
                throw new Exception(SerializationErrors.StreamNotContainingValidWireMessage);
            }

            if (sLen > MaxAllowedStringLength)
            {
                throw new Exception(SerializationErrors.StringLengthExceededAllowedLimit);
            }

            var sb    = (StringBuilder)null;
            var bytes = StringBytesCache.Acquire();

            try
            {
                var chars = StringCharsCache.Acquire();
                try
                {
                    var readLen     = 0;
                    var bytesOffset = 0;
                    var bytesUsed   = 0;
                    var charsUsed   = 0;
                    var completed   = false;

                    var remaining = bLen;
                    do
                    {
                        readLen = Math.Min(StringBufferSize - bytesOffset, remaining);

                        readLen = reader.Read(bytes, bytesOffset, readLen);
                        if (readLen == bLen)
                        {
                            return(Encoding.UTF8.GetString(bytes, 0, readLen));
                        }

                        if (readLen == 0)
                        {
                            throw new ArgumentOutOfRangeException(nameof(readLen));
                        }

                        bytesOffset += readLen;

                        UTF8Decoder.Convert(bytes, 0, bytesOffset, chars, 0, StringBufferSize,
                                            false, out bytesUsed, out charsUsed, out completed);

                        if (charsUsed > 0)
                        {
                            if (sb == null)
                            {
                                sb = new StringBuilder(sLen);
                            }

                            sb.Append(chars, 0, charsUsed);

                            bytesOffset -= bytesUsed;
                            if (bytesOffset > 0)
                            {
                                Array.Copy(bytes, bytesUsed, bytes, 0, bytesOffset);
                            }
                        }
                    }while ((remaining -= readLen) > 0);
                }
                finally
                {
                    StringCharsCache.Release(chars);
                }
            }
            finally
            {
                StringBytesCache.Release(bytes);
            }

            return(sb?.ToString());
        }
Esempio n. 18
0
        private WireMessage Read(IStreamReader reader)
        {
            var dataTypeCd = reader.ReadByte() - NotNullFlag;

            if (dataTypeCd > 0)
            {
                var message = new WireMessage();

                var buffer = StringBytesCache.Acquire();
                try
                {
                    var sizeOfDataTypeCd = WireMessageFieldSizeOf.DataTypeCd;

                    reader.Read(buffer, 0, WireMessageSizeOf.ConstantFields - sizeOfDataTypeCd);

                    message.MessageType = (MessageType)buffer[WireMessageBufferOffsetOf.MessageType - sizeOfDataTypeCd];
                    message.State       = (WireMessageState)buffer[WireMessageBufferOffsetOf.State - sizeOfDataTypeCd];

                    var timeoutMSec = buffer.ToInt(WireMessageBufferOffsetOf.TimeoutMSec - sizeOfDataTypeCd);
                    message.TimeoutMSec = timeoutMSec != int.MinValue ? timeoutMSec : (int?)null;

                    message.Id = new WireMessageId(
                        buffer.ToInt(WireMessageBufferOffsetOf.IdMajor - sizeOfDataTypeCd),
                        buffer.ToInt(WireMessageBufferOffsetOf.IdMajorRevision - sizeOfDataTypeCd),
                        buffer.ToInt(WireMessageBufferOffsetOf.IdMinor - sizeOfDataTypeCd),
                        buffer.ToInt(WireMessageBufferOffsetOf.IdMinorRevision - sizeOfDataTypeCd),
                        buffer.ToInt(WireMessageBufferOffsetOf.IdProcessId - sizeOfDataTypeCd)
                        );
                }
                finally
                {
                    StringBytesCache.Release(buffer);
                }

                message.From = Aid.Parse(ReadString(reader));
                message.To   = Aid.Parse(ReadString(reader));

                var isNullByte = reader.ReadByte();
                if (isNullByte != NullFlag)
                {
                    var header = new Dictionary <string, string>();
                    message.Header = header;

                    var count = reader.ReadInt32();
                    if (count > 0)
                    {
                        string key;
                        for (var i = 0; i < count; i++)
                        {
                            key = ReadString(reader);
                            if (key != null)
                            {
                                header[key] = ReadString(reader);
                            }
                        }
                    }
                }

                isNullByte = reader.ReadByte();
                if (isNullByte != NullFlag)
                {
                    var len = reader.ReadInt32();
                    if (len > 0)
                    {
                        using (var tempStream = new ChunkedStream())
                        {
                            var chunkSize = tempStream.ChunkSize;
                            while (len > 0)
                            {
                                var bytes = reader.ReadBytes(chunkSize);

                                var readLen = bytes?.Length ?? 0;
                                if (readLen == 0)
                                {
                                    throw new Exception(SerializationErrors.StreamNotContainingValidWireMessage);
                                }

                                len -= readLen;
                                tempStream.Write(bytes, 0, readLen);
                            }

                            tempStream.Position = 0;
                            message.Exception   = GetSerializer().Deserialize <Exception>(tempStream);
                        }
                    }
                }

                ReadData(dataTypeCd, message, reader);

                return(message);
            }
            return(null);
        }
Esempio n. 19
0
		public int ReadTile(IStreamReader inputStream, byte[] inputBuffer, int index)
		{
			if (PointCount == 0)
				return 0;

			if (index + StorageSize > inputBuffer.Length)
				throw new ArgumentException("Tile data is larger than available buffer", "inputBuffer");

			// seek if necessary (hopefully this is minimized)
			var position = TileSet.TileSource.PointDataOffset + (PointOffset * TileSet.TileSource.PointSizeBytes);
			if (inputStream.Position != position)
				inputStream.Seek(position);
			
			// read available points from main tile area and get low-res points from source
			var localStorageSize = (PointCount - LowResCount) * TileSet.TileSource.PointSizeBytes;
			var bytesRead = inputStream.Read(inputBuffer, index, localStorageSize);

			//bytesRead += TileSet.TileSource.ReadLowResTile(this, inputBuffer, index + bytesRead);
			var lowResPosition = TileSet.TileSource.PointDataOffset + ((TileSet.PointCount - TileSet.LowResCount + LowResOffset) * TileSet.TileSource.PointSizeBytes);
			inputStream.Seek(lowResPosition);
			var lowResStorageSize = LowResCount * TileSet.TileSource.PointSizeBytes;
			bytesRead += inputStream.Read(inputBuffer, index + bytesRead, lowResStorageSize);

			return bytesRead;
		}
Esempio n. 20
0
 public static IOutputStream <TDst> Transform <TSrc, TDst>(this IOutputStream <TSrc> stream, ITransformation <TSrc, TDst> transformation, int readBufSize = 1024)
 {
     //Encoding.UTF8.GetBytes(str, strPos, charsToBuffer, intBuf, 0);
     return(CreateOutput <TDst>(() => {
         var inBuf = new TSrc[readBufSize];
         var inBufPos = 0;
         var inBufCnt = 0;
         IStreamReader <TSrc> reader = null;
         if (stream != null)
         {
             reader = stream.CreateReader();
         }
         return new AnonymousStreamReader <TDst>((buf, ofs, cnt) => {
             var totalBytesCopied = 0;
             while (cnt > 0)
             {
                 var bytesCopied = transformation.Copy(buf, ofs, cnt);
                 if (bytesCopied > 0)
                 {
                     ofs += bytesCopied;
                     cnt -= bytesCopied;
                     totalBytesCopied += bytesCopied;
                 }
                 else
                 {
                     Action process = () => {
                         var itemsProcessed = transformation.Process(inBuf, inBufPos, inBufCnt);
                         inBufCnt -= itemsProcessed;
                         inBufPos += itemsProcessed;
                     };
                     if (inBufCnt > 0)
                     {
                         process();
                     }
                     else
                     {
                         if (reader == null)
                         {
                             return totalBytesCopied;
                         }
                         inBufPos = 0;
                         //try {
                         inBufCnt = reader.Read(inBuf, 0, inBuf.Length);
                         //} catch (Exception err) {
                         //inBufCnt = 0;
                         //try {
                         //    reader.Dispose();
                         //} finally {
                         //    reader = null;
                         //}
                         //}
                         if (inBufCnt > 0)
                         {
                             process();
                         }
                         else
                         {
                             try {
                                 reader.Dispose();
                             } finally {
                                 reader = null;
                             }
                             return totalBytesCopied;
                         }
                     }
                 }
             }
             return totalBytesCopied;
         });
     }));
 }