]> source.dussan.org Git - tigervnc.git/commitdiff
Add stream avail() methods
authorPierre Ossman <ossman@cendio.se>
Tue, 19 May 2020 18:45:22 +0000 (20:45 +0200)
committerPierre Ossman <ossman@cendio.se>
Thu, 21 May 2020 09:34:22 +0000 (11:34 +0200)
Makes it more readable to write code that needs to know how much
data/space is available in a stream.

15 files changed:
common/rdr/FdInStream.cxx
common/rdr/FdOutStream.cxx
common/rdr/FileInStream.cxx
common/rdr/HexInStream.cxx
common/rdr/HexOutStream.cxx
common/rdr/InStream.h
common/rdr/OutStream.h
common/rdr/RandomStream.cxx
common/rdr/TLSInStream.cxx
common/rdr/TLSOutStream.cxx
common/rdr/ZlibInStream.cxx
common/rdr/ZlibOutStream.cxx
common/rfb/JpegCompressor.cxx
tests/perf/decperf.cxx
tests/perf/encperf.cxx

index ceb95c91b4c9278db65ec27c06ff2544e047b0b5..eb76ec06357e2858b1aefb3e7f1f10bb3938eb87 100644 (file)
@@ -126,7 +126,7 @@ size_t FdInStream::overrun(size_t itemSize, size_t nItems, bool wait)
   }
 
   size_t nAvail;
-  nAvail = (end - ptr) / itemSize;
+  nAvail = avail() / itemSize;
   if (nAvail < nItems)
     return nAvail;
 
index f5d07e4bb6428793bbfac31c051bec83e5bfe497..04c6851a00c892bbe3c236db1c4cdebcfc0ab18f 100644 (file)
@@ -129,7 +129,7 @@ size_t FdOutStream::overrun(size_t itemSize, size_t nItems)
   flush();
 
   // Still not enough space?
-  if (itemSize > (size_t)(end - ptr)) {
+  if (itemSize > avail()) {
     // Can we shuffle things around?
     // (don't do this if it gains us less than 25%)
     if (((size_t)(sentUpTo - start) > bufSize / 4) &&
@@ -150,7 +150,7 @@ size_t FdOutStream::overrun(size_t itemSize, size_t nItems)
   }
 
   size_t nAvail;
-  nAvail = (end - ptr) / itemSize;
+  nAvail = avail() / itemSize;
   if (nAvail < nItems)
     return nAvail;
 
index bdb05a3aae64834f1b9a924f6c359895ec79e99b..8344fcd14356d08c31fe4e52a5516a6dfb0a7b7a 100644 (file)
@@ -81,7 +81,7 @@ size_t FileInStream::overrun(size_t itemSize, size_t nItems, bool wait)
   }
 
   size_t nAvail;
-  nAvail = (end - ptr) / itemSize;
+  nAvail = avail() / itemSize;
   if (nAvail < nItems)
     return nAvail;
 
index a6bc92cd198c2fe822f908a56fa7f3ccf6e681e4..787edc047693c664898ae32c5f6c75168f06d1b0 100644 (file)
@@ -91,7 +91,7 @@ size_t HexInStream::overrun(size_t itemSize, size_t nItems, bool wait) {
   offset += ptr - start;
   ptr = start;
 
-  while ((size_t)(end - ptr) < itemSize) {
+  while (avail() < itemSize) {
     size_t n = in_stream.check(2, 1, wait);
     if (n == 0) return 0;
     const U8* iptr = in_stream.getptr();
@@ -111,7 +111,7 @@ size_t HexInStream::overrun(size_t itemSize, size_t nItems, bool wait) {
   }
 
   size_t nAvail;
-  nAvail = (end - ptr) / itemSize;
+  nAvail = avail() / itemSize;
   if (nAvail < nItems)
     return nAvail;
 
index eac2eff803636eb18126bd5a235eca0700a39c5c..6118c1368f3217eb17861fb26cec82666253dcd3 100644 (file)
@@ -103,7 +103,7 @@ HexOutStream::overrun(size_t itemSize, size_t nItems) {
   writeBuffer();
 
   size_t nAvail;
-  nAvail = (end - ptr) / itemSize;
+  nAvail = avail() / itemSize;
   if (nAvail < nItems)
     return nAvail;
 
index f71a4d9e35a189deafdf849714c653b4586eee00..665084f262c179f4e741b91494e37a1d0bfab27c 100644 (file)
@@ -35,6 +35,14 @@ namespace rdr {
 
     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
     // 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
@@ -45,10 +53,10 @@ namespace rdr {
     {
       size_t nAvail;
 
-      if (itemSize > (size_t)(end - ptr))
+      if (itemSize > avail())
         return overrun(itemSize, nItems, wait);
 
-      nAvail = (end - ptr) / itemSize;
+      nAvail = avail() / itemSize;
       if (nAvail < nItems)
         return nAvail;
 
index 6e9069c670a4115518b37c61bda0686c21f79287..33381d9af750d957cd72aca9a9743081c6f27c2f 100644 (file)
@@ -40,6 +40,14 @@ namespace rdr {
 
     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
     // itemSize bytes.  Returns the number of items which fit (up to a maximum
     // of nItems).
@@ -48,10 +56,10 @@ namespace rdr {
     {
       size_t nAvail;
 
-      if (itemSize > (size_t)(end - ptr))
+      if (itemSize > avail())
         return overrun(itemSize, nItems);
 
-      nAvail = (end - ptr) / itemSize;
+      nAvail = avail() / itemSize;
       if (nAvail < nItems)
         return nAvail;
 
index 1be9b251c395327f9128f8dac7434790e56ffdd6..0290c24d10025936a18d8139e38c141f5d4dc69b 100644 (file)
@@ -127,7 +127,7 @@ size_t RandomStream::overrun(size_t itemSize, size_t nItems, bool wait) {
   }
 
   size_t nAvail;
-  nAvail = (end - ptr) / itemSize;
+  nAvail = avail() / itemSize;
   if (nAvail < nItems)
     return nAvail;
 
index cd81f224db07f14c36aea5c3f2961c15acfb1fd3..15e2a471778d277792f862a726ac39edf624f3ef 100644 (file)
@@ -100,7 +100,7 @@ size_t TLSInStream::overrun(size_t itemSize, size_t nItems, bool wait)
   }
 
   size_t nAvail;
-  nAvail = (end - ptr) / itemSize;
+  nAvail = avail() / itemSize;
   if (nAvail < nItems)
     return nAvail;
 
index 7d7c3b5648b11856eb1bad22376b6c063c2d67d9..089aa66020e0c778c420b3e3d3a24be9c792ee21 100644 (file)
@@ -101,7 +101,7 @@ size_t TLSOutStream::overrun(size_t itemSize, size_t nItems)
   flush();
 
   size_t nAvail;
-  nAvail = (end - ptr) / itemSize;
+  nAvail = avail() / itemSize;
   if (nAvail < nItems)
     return nAvail;
 
index 0fb3ad1e9d610d11a901c83eb6cec43e7a871769..839cf0d09e8818e9d1d3e9a50743bdd3218ad6bb 100644 (file)
@@ -108,13 +108,13 @@ size_t ZlibInStream::overrun(size_t itemSize, size_t nItems, bool wait)
   end -= ptr - start;
   ptr = start;
 
-  while ((size_t)(end - ptr) < itemSize) {
+  while (avail() < itemSize) {
     if (!decompress(wait))
       return 0;
   }
 
   size_t nAvail;
-  nAvail = (end - ptr) / itemSize;
+  nAvail = avail() / itemSize;
   if (nAvail < nItems)
     return nAvail;
 
@@ -136,7 +136,7 @@ bool ZlibInStream::decompress(bool wait)
   size_t n = underlying->check(1, 1, wait);
   if (n == 0) return false;
   zs->next_in = (U8*)underlying->getptr();
-  zs->avail_in = underlying->getend() - underlying->getptr();
+  zs->avail_in = underlying->avail();
   if (zs->avail_in > bytesIn)
     zs->avail_in = bytesIn;
 
index 99d0617a1bb798fd47af477a1da67df6d19d8ac5..f102980ab1e4222d6d2031d4f26a5a8cb8a1895b 100644 (file)
@@ -109,7 +109,7 @@ size_t ZlibOutStream::overrun(size_t itemSize, size_t nItems)
 
   checkCompressionLevel();
 
-  while ((size_t)(end - ptr) < itemSize) {
+  while (avail() < itemSize) {
     zs->next_in = start;
     zs->avail_in = ptr - start;
 
@@ -131,7 +131,7 @@ size_t ZlibOutStream::overrun(size_t itemSize, size_t nItems)
   }
 
   size_t nAvail;
-  nAvail = (end - ptr) / itemSize;
+  nAvail = avail() / itemSize;
   if (nAvail < nItems)
     return nAvail;
 
@@ -151,7 +151,7 @@ void ZlibOutStream::deflate(int flush)
   do {
     underlying->check(1);
     zs->next_out = underlying->getptr();
-    zs->avail_out = underlying->getend() - underlying->getptr();
+    zs->avail_out = underlying->avail();
 
 #ifdef ZLIBOUT_DEBUG
     vlog.debug("calling deflate, avail_in %d, avail_out %d",
index 23b8f8cf14ab2cfcf95820de299f94956d867cf6..a4af92fae062e44d469b55a9321a83ebc602493a 100644 (file)
@@ -85,7 +85,7 @@ JpegInitDestination(j_compress_ptr cinfo)
 
   jc->clear();
   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
@@ -97,7 +97,7 @@ JpegEmptyOutputBuffer(j_compress_ptr cinfo)
   jc->setptr(jc->getend());
   jc->overrun(jc->getend() - jc->getstart(), 1);
   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;
 }
index a6a5089971b9e6b2640095c80159af84a9bacde0..687ac7a94baee7e09cfc6613266c39cf83dd2abd 100644 (file)
@@ -102,8 +102,8 @@ void DummyOutStream::flush()
 size_t DummyOutStream::overrun(size_t itemSize, size_t nItems)
 {
   flush();
-  if (itemSize * nItems > (size_t)(end - ptr))
-    nItems = (end - ptr) / itemSize;
+  if (itemSize * nItems > avail())
+    nItems = avail() / itemSize;
   return nItems;
 }
 
index 1b14151b17966138e8c35588a143433f9c6c4f48..4665346f5e29cac463f52ad1f81bd2ef65d8026e 100644 (file)
@@ -159,8 +159,8 @@ void DummyOutStream::flush()
 size_t DummyOutStream::overrun(size_t itemSize, size_t nItems)
 {
   flush();
-  if (itemSize * nItems > (size_t)(end - ptr))
-    nItems = (end - ptr) / itemSize;
+  if (itemSize * nItems > avail())
+    nItems = avail() / itemSize;
   return nItems;
 }