Browse Source

Add stream avail() methods

Makes it more readable to write code that needs to know how much
data/space is available in a stream.
tags/v1.11.90
Pierre Ossman 4 years ago
parent
commit
b35ae29f93

+ 1
- 1
common/rdr/FdInStream.cxx View File

} }


size_t nAvail; size_t nAvail;
nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;



+ 2
- 2
common/rdr/FdOutStream.cxx View File

flush(); flush();


// Still not enough space? // Still not enough space?
if (itemSize > (size_t)(end - ptr)) {
if (itemSize > avail()) {
// Can we shuffle things around? // Can we shuffle things around?
// (don't do this if it gains us less than 25%) // (don't do this if it gains us less than 25%)
if (((size_t)(sentUpTo - start) > bufSize / 4) && if (((size_t)(sentUpTo - start) > bufSize / 4) &&
} }


size_t nAvail; size_t nAvail;
nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;



+ 1
- 1
common/rdr/FileInStream.cxx View File

} }


size_t nAvail; size_t nAvail;
nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;



+ 2
- 2
common/rdr/HexInStream.cxx View File

offset += ptr - start; offset += ptr - start;
ptr = start; ptr = start;


while ((size_t)(end - ptr) < itemSize) {
while (avail() < itemSize) {
size_t n = in_stream.check(2, 1, wait); size_t n = in_stream.check(2, 1, wait);
if (n == 0) return 0; if (n == 0) return 0;
const U8* iptr = in_stream.getptr(); const U8* iptr = in_stream.getptr();
} }


size_t nAvail; size_t nAvail;
nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;



+ 1
- 1
common/rdr/HexOutStream.cxx View File

writeBuffer(); writeBuffer();


size_t nAvail; size_t nAvail;
nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;



+ 10
- 2
common/rdr/InStream.h View File



virtual ~InStream() {} virtual ~InStream() {}


// avail() returns the number of bytes that are currenctly directly
// available from the stream.

inline size_t avail()
{
return end - ptr;
}

// check() ensures there is buffer data for at least one item of size // check() ensures there is buffer data for at least one item of size
// itemSize bytes. Returns the number of items in the buffer (up to a // itemSize bytes. Returns the number of items in the buffer (up to a
// maximum of nItems). If wait is false, then instead of blocking to wait // maximum of nItems). If wait is false, then instead of blocking to wait
{ {
size_t nAvail; size_t nAvail;


if (itemSize > (size_t)(end - ptr))
if (itemSize > avail())
return overrun(itemSize, nItems, wait); return overrun(itemSize, nItems, wait);


nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;



+ 10
- 2
common/rdr/OutStream.h View File



virtual ~OutStream() {} virtual ~OutStream() {}


// avail() returns the number of bytes that currently be written to the
// stream without any risk of blocking.

inline size_t avail()
{
return end - ptr;
}

// check() ensures there is buffer space for at least one item of size // check() ensures there is buffer space for at least one item of size
// itemSize bytes. Returns the number of items which fit (up to a maximum // itemSize bytes. Returns the number of items which fit (up to a maximum
// of nItems). // of nItems).
{ {
size_t nAvail; size_t nAvail;


if (itemSize > (size_t)(end - ptr))
if (itemSize > avail())
return overrun(itemSize, nItems); return overrun(itemSize, nItems);


nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;



+ 1
- 1
common/rdr/RandomStream.cxx View File

} }


size_t nAvail; size_t nAvail;
nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;



+ 1
- 1
common/rdr/TLSInStream.cxx View File

} }


size_t nAvail; size_t nAvail;
nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;



+ 1
- 1
common/rdr/TLSOutStream.cxx View File

flush(); flush();


size_t nAvail; size_t nAvail;
nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;



+ 3
- 3
common/rdr/ZlibInStream.cxx View File

end -= ptr - start; end -= ptr - start;
ptr = start; ptr = start;


while ((size_t)(end - ptr) < itemSize) {
while (avail() < itemSize) {
if (!decompress(wait)) if (!decompress(wait))
return 0; return 0;
} }


size_t nAvail; size_t nAvail;
nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;


size_t n = underlying->check(1, 1, wait); size_t n = underlying->check(1, 1, wait);
if (n == 0) return false; if (n == 0) return false;
zs->next_in = (U8*)underlying->getptr(); zs->next_in = (U8*)underlying->getptr();
zs->avail_in = underlying->getend() - underlying->getptr();
zs->avail_in = underlying->avail();
if (zs->avail_in > bytesIn) if (zs->avail_in > bytesIn)
zs->avail_in = bytesIn; zs->avail_in = bytesIn;



+ 3
- 3
common/rdr/ZlibOutStream.cxx View File



checkCompressionLevel(); checkCompressionLevel();


while ((size_t)(end - ptr) < itemSize) {
while (avail() < itemSize) {
zs->next_in = start; zs->next_in = start;
zs->avail_in = ptr - start; zs->avail_in = ptr - start;


} }


size_t nAvail; size_t nAvail;
nAvail = (end - ptr) / itemSize;
nAvail = avail() / itemSize;
if (nAvail < nItems) if (nAvail < nItems)
return nAvail; return nAvail;


do { do {
underlying->check(1); underlying->check(1);
zs->next_out = underlying->getptr(); zs->next_out = underlying->getptr();
zs->avail_out = underlying->getend() - underlying->getptr();
zs->avail_out = underlying->avail();


#ifdef ZLIBOUT_DEBUG #ifdef ZLIBOUT_DEBUG
vlog.debug("calling deflate, avail_in %d, avail_out %d", vlog.debug("calling deflate, avail_in %d, avail_out %d",

+ 2
- 2
common/rfb/JpegCompressor.cxx View File



jc->clear(); jc->clear();
dest->pub.next_output_byte = jc->getptr(); dest->pub.next_output_byte = jc->getptr();
dest->pub.free_in_buffer = jc->getend() - jc->getptr();
dest->pub.free_in_buffer = jc->avail();
} }


static boolean static boolean
jc->setptr(jc->getend()); jc->setptr(jc->getend());
jc->overrun(jc->getend() - jc->getstart(), 1); jc->overrun(jc->getend() - jc->getstart(), 1);
dest->pub.next_output_byte = jc->getptr(); dest->pub.next_output_byte = jc->getptr();
dest->pub.free_in_buffer = jc->getend() - jc->getptr();
dest->pub.free_in_buffer = jc->avail();


return TRUE; return TRUE;
} }

+ 2
- 2
tests/perf/decperf.cxx View File

size_t DummyOutStream::overrun(size_t itemSize, size_t nItems) size_t DummyOutStream::overrun(size_t itemSize, size_t nItems)
{ {
flush(); flush();
if (itemSize * nItems > (size_t)(end - ptr))
nItems = (end - ptr) / itemSize;
if (itemSize * nItems > avail())
nItems = avail() / itemSize;
return nItems; return nItems;
} }



+ 2
- 2
tests/perf/encperf.cxx View File

size_t DummyOutStream::overrun(size_t itemSize, size_t nItems) size_t DummyOutStream::overrun(size_t itemSize, size_t nItems)
{ {
flush(); flush();
if (itemSize * nItems > (size_t)(end - ptr))
nItems = (end - ptr) / itemSize;
if (itemSize * nItems > avail())
nItems = avail() / itemSize;
return nItems; return nItems;
} }



Loading…
Cancel
Save