]> git.cworth.org Git - apitrace/blobdiff - trace_write.cpp
More efficient bitmask representation.
[apitrace] / trace_write.cpp
index 054303b597f22dbd1a872de69efccf90cc2c7134..912824e012d936db5ef8bc0b478771c7608788d0 100644 (file)
@@ -303,6 +303,22 @@ void LiteralNamedConstant(const char *name, long long value) {
    LiteralSInt(value);
 }
 
+static std::map<Id, bool> bitmasks;
+
+void LiteralBitmask(const BitmaskSig &bitmask, unsigned long long value) {
+   WriteByte(Trace::TYPE_BITMASK);
+   WriteUInt(bitmask.id);
+   if (!bitmasks[bitmask.id]) {
+      WriteUInt(bitmask.count);
+      for (unsigned i = 0; i < bitmask.count; ++i) {
+         WriteString(bitmask.values[i].name);
+         WriteUInt(bitmask.values[i].value);
+      }
+      bitmasks[bitmask.id] = true;
+   }
+   WriteUInt(value);
+}
+
 void LiteralNull(void) {
    WriteByte(Trace::TYPE_NULL);
 }