From: José Fonseca Date: Sat, 28 May 2011 11:33:24 +0000 (+0100) Subject: Unify Bitmask::Signature with BitmaskSig. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=e0f0b6f5d9ff4530889a90e41b617ac6c008269c;p=apitrace Unify Bitmask::Signature with BitmaskSig. --- diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index b7694f4..865f9ae 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -164,8 +164,8 @@ void ApiBitmask::init(const Trace::Bitmask *bitmask) return; m_value = bitmask->value; - for (Trace::Bitmask::Signature::const_iterator it = bitmask->sig->begin(); - it != bitmask->sig->end(); ++it) { + for (const Trace::BitmaskVal *it = bitmask->sig->values; + it != bitmask->sig->values + bitmask->sig->count; ++it) { assert(it->value); QPair pair; diff --git a/trace_model.cpp b/trace_model.cpp index 0d2915f..03f633b 100644 --- a/trace_model.cpp +++ b/trace_model.cpp @@ -255,9 +255,9 @@ public: void visit(Bitmask *bitmask) { unsigned long long value = bitmask->value; - const Bitmask::Signature *sig = bitmask->sig; + const BitmaskSig *sig = bitmask->sig; bool first = true; - for (Bitmask::Signature::const_iterator it = sig->begin(); value != 0 && it != sig->end(); ++it) { + for (const BitmaskVal *it = sig->values; value != 0 && it != sig->values + sig->count; ++it) { if ((it->value && (value & it->value) == it->value) || (!it->value && value == 0)) { if (!first) { diff --git a/trace_model.hpp b/trace_model.hpp index a942ac9..6560346 100644 --- a/trace_model.hpp +++ b/trace_model.hpp @@ -192,13 +192,11 @@ public: class Bitmask : public UInt { public: - typedef std::vector Signature; - - Bitmask(const Signature *_sig, unsigned long long _value) : UInt(_value), sig(_sig) {} + Bitmask(const BitmaskSig *_sig, unsigned long long _value) : UInt(_value), sig(_sig) {} void visit(Visitor &visitor); - const Signature *sig; + const BitmaskSig *sig; }; diff --git a/trace_parser.cpp b/trace_parser.cpp index 17682bd..77bdd1f 100644 --- a/trace_parser.cpp +++ b/trace_parser.cpp @@ -323,17 +323,21 @@ Value *Parser::parse_enum() { Value *Parser::parse_bitmask() { size_t id = read_uint(); - Bitmask::Signature *sig = lookup(bitmasks, id); + BitmaskSig *sig = lookup(bitmasks, id); if (!sig) { - size_t size = read_uint(); - sig = new Bitmask::Signature(size); - for (Bitmask::Signature::iterator it = sig->begin(); it != sig->end(); ++it) { + size_t count = read_uint(); + BitmaskVal *values = new BitmaskVal[count]; + for (BitmaskVal *it = values; it != values + count; ++it) { it->name = read_string(); it->value = read_uint(); - if (it->value == 0 && it != sig->begin()) { + if (it->value == 0 && it != values) { std::cerr << "warning: bitmask " << it->name << " is zero but is not first flag\n"; } } + sig = new BitmaskSig; + sig->id = id; + sig->count = count; + sig->values = values; bitmasks[id] = sig; } assert(sig); diff --git a/trace_parser.hpp b/trace_parser.hpp index c9f92fc..634cb59 100644 --- a/trace_parser.hpp +++ b/trace_parser.hpp @@ -54,7 +54,7 @@ protected: typedef std::vector EnumMap; EnumMap enums; - typedef std::vector BitmaskMap; + typedef std::vector BitmaskMap; BitmaskMap bitmasks; unsigned next_call_no;