]> git.cworth.org Git - apitrace/blobdiff - common/pickle.hpp
specs: Mark CheckMultisampleQualityLevels as no side effects / verbose.
[apitrace] / common / pickle.hpp
index f333960a7adefb31a57d48165c2da5ac753bdb6e..41667e653783be3bf934ceba9a11afaaba373615 100644 (file)
@@ -106,13 +106,15 @@ private:
 
 public:
     PickleWriter(std::ostream &_os) :
-        os(_os)
-    {
+        os(_os) {
+    }
+
+    inline void begin() {
         os.put(PROTO);
         os.put(2);
     }
 
-    ~PickleWriter() {
+    inline void end() {
         os.put(STOP);
     }
 
@@ -266,6 +268,16 @@ public:
         os.put(u.c[0]);
     }
 
+    inline void writeByteArray(const void *buf, size_t length) {
+        os.put(GLOBAL);
+        os << "__builtin__\nbytearray\n";
+        os.put(BINPUT);
+        os.put(1);
+        writeString(static_cast<const char *>(buf), length);
+        os.put(TUPLE1);
+        os.put(REDUCE);
+    }
+
 protected:
     inline void putInt16(uint16_t i) {
         os.put( i        & 0xff);
@@ -288,12 +300,15 @@ protected:
             return;
         }
 
-        unsigned c = 1;
         // Same as l >> (8 * sizeof l), but without the warnings
         T sign = l < 0 ? ~0 : 0;
-        while ((l >> (8 * c)) != sign) {
+
+        T sl = l;
+        unsigned c = 0;
+        do {
             ++c;
-        }
+        } while (sl >>= 8 != sign);
+
         // Add an extra byte if sign bit doesn't match
         if (((l >> (8 * c - 1)) & 1) != ((l >> (8 * sizeof l - 1)) & 1)) {
             ++c;