Added readCompactLength and writeCompactLength


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@12 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/rdr/InStream.h b/rdr/InStream.h
index 2048daa..a3eeaad 100644
--- a/rdr/InStream.h
+++ b/rdr/InStream.h
@@ -71,6 +71,23 @@
     inline S16 readS16() { return (S16)readU16(); }
     inline S32 readS32() { return (S32)readU32(); }
 
+    // readCompactLength() reads 1..3 bytes representing length of the data
+    // following.  This method is used by the Tight decoder.
+
+    inline unsigned int readCompactLength() {
+      U8 b = readU8();
+      int result = (int)b & 0x7F;
+      if (b & 0x80) {
+        b = readU8();
+        result |= ((int)b & 0x7F) << 7;
+        if (b & 0x80) {
+          b = readU8();
+          result |= ((int)b & 0xFF) << 14;
+        }
+      }
+      return result;
+    }
+
     // readString() reads a string - a U32 length followed by the data.
     // Returns a null-terminated string - the caller should delete[] it
     // afterwards.