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/OutStream.h b/rdr/OutStream.h
index a064bcc..aed2eea 100644
--- a/rdr/OutStream.h
+++ b/rdr/OutStream.h
@@ -65,6 +65,25 @@
     inline void writeS16(S16 s) { writeU16((U16)s); }
     inline void writeS32(S32 s) { writeU32((U32)s); }
 
+    // writeCompactLength() writes 1..3 bytes representing length of the data
+    // following.  This method is used by the Tight encoder.
+
+    inline void writeCompactLength(unsigned int len) {
+      U8 b = len & 0x7F;
+      if (len <= 0x7F) {
+        writeU8(b);
+      } else {
+        writeU8(b | 0x80);
+        b = len >> 7 & 0x7F;
+        if (len <= 0x3FFF) {
+          writeU8(b);
+        } else {
+          writeU8(b | 0x80);
+          writeU8(len >> 14 & 0xFF);
+        }
+      }
+    }
+
     // writeString() writes a string - a U32 length followed by the data.  The
     // given string should be null-terminated (but the terminating null is not
     // written to the stream).