public unsafe uint ReadSegments(nsWriteSegmentFun aWriter, IntPtr aClosure, uint aCount) { int count = (int)Math.Min(aCount, Available()); if (count == 0) return 0; if (Buffer == IntPtr.Zero) return 0; int writeCount; aWriter(this, aClosure, new IntPtr(CurrentPointer), (int)Position, count, out writeCount); MovePointer((uint)count); return (uint)writeCount; }
UInt32 nsIInputStream.ReadSegments(nsWriteSegmentFun aWriter, IntPtr aClosure, UInt32 aCount) { if (ReferenceEquals(m_BaseStream, null) || !m_BaseStream.CanRead) { return 0; } // Get maximum buffer size - the segment size. UInt32 segmentSize = GetBufferSize(aCount); var segment = new Byte[segmentSize]; // Read data available for first segment Int32 segmentBytesCount = m_BaseStream.Read(segment, 0, segment.Length); if (segmentBytesCount > 0) { // Allocate memory for first and all subsequent segments IntPtr segmentPtr = Xpcom.NS_Alloc(segmentSize); try { UInt32 totalBytesConsumed = 0; do { // Write available data to current segment Marshal.Copy(segment, 0, segmentPtr, segmentBytesCount); UInt32 segmentBytesConsumed = 0; UInt32 writeCount = 0; // Deliver data from current segment to consumer while ((segmentBytesConsumed < segmentBytesCount) && (aWriter(this, aClosure, segmentPtr, totalBytesConsumed, (UInt32)segmentBytesCount, ref writeCount) == nsResult.NS_OK)) { segmentBytesConsumed += writeCount; totalBytesConsumed += writeCount; writeCount = 0; } // Get data for next segment if (totalBytesConsumed < aCount) { segmentBytesCount = m_BaseStream.Read(segment, 0, segment.Length); } } while ((totalBytesConsumed < aCount) && (segmentBytesCount > 0)); return totalBytesConsumed; } finally { Xpcom.NS_Free(segmentPtr); } } return 0; }
public unsafe uint ReadSegments(nsWriteSegmentFun aWriter, IntPtr aClosure, uint aCount) { int count = (int)Math.Min(aCount, Available()); if (count == 0) { return(0); } if (Buffer == IntPtr.Zero) { return(0); } int writeCount; aWriter(this, aClosure, new IntPtr(CurrentPointer), (int)Position, count, out writeCount); MovePointer((uint)count); return((uint)writeCount); }
public unsafe uint ReadSegments(nsWriteSegmentFun aWriter, IntPtr aClosure, uint aCount) { int length = (int)Math.Min(aCount, Available()); int writeCount = 0; if (length > 0) { nsWriteSegmentFun fun = aWriter; fixed(byte *data = &_data[_position]) { fun(this, aClosure, (IntPtr)data, _position, length, out writeCount); } _position += writeCount; } return((uint)writeCount); }
public unsafe uint ReadSegments( nsWriteSegmentFun aWriter, IntPtr aClosure, uint aCount ) { int length = ( int ) Math.Min( aCount, Available() ); int writeCount = 0; if ( length > 0 ) { nsWriteSegmentFun fun = aWriter; fixed (byte* data = &_data[_position]) { fun(this, aClosure, (IntPtr)data, _position, length, out writeCount); } _position += writeCount; } return ( uint ) writeCount; }
public uint ReadSegments(nsWriteSegmentFun aWriter, IntPtr aClosure, uint aCount) { #warning implement it return(0); }
public uint ReadSegments( nsWriteSegmentFun aWriter, IntPtr aClosure, uint aCount ) { return 0; }
public uint ReadSegments(nsWriteSegmentFun aWriter, IntPtr aClosure, uint aCount) { return(0); }