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<QString, unsigned long long> pair;
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) {
class Bitmask : public UInt
{
public:
- typedef std::vector<BitmaskVal> 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;
};
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);
typedef std::vector<Enum::Signature *> EnumMap;
EnumMap enums;
- typedef std::vector<Bitmask::Signature *> BitmaskMap;
+ typedef std::vector<BitmaskSig *> BitmaskMap;
BitmaskMap bitmasks;
unsigned next_call_no;