27 int64 start, int64 length,
30 startPositionInSourceStream (start),
31 lengthOfSourceStream (length)
42 auto srcLen = source->getTotalLength() - startPositionInSourceStream;
44 return lengthOfSourceStream >= 0 ? jmin (lengthOfSourceStream,
srcLen)
50 return source->getPosition() - startPositionInSourceStream;
55 return source->setPosition (jmax ((int64) 0,
newPosition + startPositionInSourceStream));
62 if (lengthOfSourceStream < 0)
75 if (lengthOfSourceStream >= 0 &&
getPosition() >= lengthOfSourceStream)
78 return source->isExhausted();
89 :
UnitTest (
"SubregionInputStream", UnitTestCategories::streams)
92 void runTest()
override
94 const MemoryBlock
data (
"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", 52);
95 MemoryInputStream
mi (
data,
true);
97 const int offset = getRandom().nextInt ((
int)
data.getSize());
104 expectEquals (stream.getPosition(), (int64) 0);
105 expectEquals (stream.getTotalLength(), (int64)
subregionSize);
106 expectEquals (stream.getNumBytesRemaining(), stream.getTotalLength());
107 expect (! stream.isExhausted());
116 expectEquals (stream.getPosition(), (int64)
numBytesRead);
122 expectEquals (stream.getNumBytesRemaining(), (int64) 0);
123 expect (stream.isExhausted());
130 stream.setPosition (0);
131 expectEquals (stream.getPosition(), (int64) 0);
132 expectEquals (stream.getTotalLength(), (int64)
subregionSize);
133 expectEquals (stream.getNumBytesRemaining(), stream.getTotalLength());
134 expect (! stream.isExhausted());
145 expectEquals (stream.getPosition(), (int64)
numBytesRead);
151 expectEquals (stream.getNumBytesRemaining(), (int64) 0);
152 expect (stream.isExhausted());
156static SubregionInputStreamTests subregionInputStreamTests;
ElementType * data() noexcept
SubregionStream(InputStream *sourceStream, int64 startPositionInSourceStream, int64 lengthOfSourceStream, bool deleteSourceWhenDestroyed)
int64 getPosition() override
bool setPosition(int64 newPosition) override
bool isExhausted() override
int read(void *destBuffer, int maxBytesToRead) override
int64 getTotalLength() override
~SubregionStream() override