]> git.cworth.org Git - apitrace/commitdiff
Unify Enum::Signature into EnumSig.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 28 May 2011 11:45:56 +0000 (12:45 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 28 May 2011 11:45:56 +0000 (12:45 +0100)
gui/apitracecall.cpp
trace_model.cpp
trace_model.hpp
trace_parser.cpp
trace_parser.hpp

index 865f9ae5254133f3b42cdd4327c08baa687d980c..6112877bdf53307ff314a250cf97245915ab4c87 100644 (file)
@@ -271,13 +271,10 @@ void VariantVisitor::visit(Trace::String *node)
 
 void VariantVisitor::visit(Trace::Enum *e)
 {
-    VariantVisitor vis;
-    e->sig->second->visit(vis);
-
-    QVariant val = vis.variant();
+    QVariant val = QVariant(e->sig->value);
 
     m_variant = QVariant::fromValue(
-        ApiEnum(QString::fromStdString(e->sig->first), val));
+        ApiEnum(QString::fromStdString(e->sig->name), val));
 }
 
 void VariantVisitor::visit(Trace::Bitmask *bitmask)
index 303e953885e0aa608999a927ee29c7b248a589ad..617abc7a79b778be5e9a475432760b738a246d38 100644 (file)
@@ -69,7 +69,7 @@ bool SInt   ::toBool(void) const { return value != 0; }
 bool UInt   ::toBool(void) const { return value != 0; }
 bool Float  ::toBool(void) const { return value != 0; }
 bool String ::toBool(void) const { return true; }
-bool Enum   ::toBool(void) const { return sig->second->toBool(); }
+bool Enum   ::toBool(void) const { return sig->value != 0; }
 bool Struct ::toBool(void) const { return true; }
 bool Array  ::toBool(void) const { return true; }
 bool Blob   ::toBool(void) const { return true; }
@@ -83,7 +83,7 @@ signed long long Bool   ::toSInt(void) const { return static_cast<signed long lo
 signed long long SInt   ::toSInt(void) const { return value; }
 signed long long UInt   ::toSInt(void) const { assert(static_cast<signed long long>(value) >= 0); return static_cast<signed long long>(value); }
 signed long long Float  ::toSInt(void) const { return static_cast<signed long long>(value); }
-signed long long Enum   ::toSInt(void) const { return sig->second->toSInt(); }
+signed long long Enum   ::toSInt(void) const { return sig->value; }
 
 
 // unsigned integer cast
@@ -93,7 +93,7 @@ unsigned long long Bool   ::toUInt(void) const { return static_cast<unsigned lon
 unsigned long long SInt   ::toUInt(void) const { assert(value >= 0); return static_cast<signed long long>(value); }
 unsigned long long UInt   ::toUInt(void) const { return value; }
 unsigned long long Float  ::toUInt(void) const { return static_cast<unsigned long long>(value); }
-unsigned long long Enum   ::toUInt(void) const { return sig->second->toUInt(); }
+unsigned long long Enum   ::toUInt(void) const { assert(sig->value >= 0); return sig->value; }
 
 
 // floating point cast
@@ -103,7 +103,7 @@ float Bool   ::toFloat(void) const { return static_cast<float>(value); }
 float SInt   ::toFloat(void) const { return static_cast<float>(value); }
 float UInt   ::toFloat(void) const { return static_cast<float>(value); }
 float Float  ::toFloat(void) const { return value; }
-float Enum   ::toFloat(void) const { return sig->second->toFloat(); }
+float Enum   ::toFloat(void) const { return static_cast<float>(sig->value); }
 
 
 // floating point cast
@@ -113,7 +113,7 @@ double Bool   ::toDouble(void) const { return static_cast<double>(value); }
 double SInt   ::toDouble(void) const { return static_cast<double>(value); }
 double UInt   ::toDouble(void) const { return static_cast<double>(value); }
 double Float  ::toDouble(void) const { return value; }
-double Enum   ::toDouble(void) const { return sig->second->toDouble(); }
+double Enum   ::toDouble(void) const { return static_cast<double>(sig->value); }
 
 
 // pointer cast
@@ -156,7 +156,7 @@ void Visitor::visit(SInt *) { assert(0); }
 void Visitor::visit(UInt *) { assert(0); }
 void Visitor::visit(Float *) { assert(0); }
 void Visitor::visit(String *) { assert(0); }
-void Visitor::visit(Enum *node) { _visit(node->sig->second); }
+void Visitor::visit(Enum *node) { assert(0); }
 void Visitor::visit(Bitmask *node) { visit(static_cast<UInt *>(node)); }
 void Visitor::visit(Struct *) { assert(0); }
 void Visitor::visit(Array *) { assert(0); }
@@ -250,7 +250,7 @@ public:
     }
 
     void visit(Enum *node) {
-        os << literal << node->sig->first << normal;
+        os << literal << node->sig->name << normal;
     }
 
     void visit(Bitmask *bitmask) {
index 6560346368f4955fe670cc52f960045ea6553b7a..eb28465625cc18a5d0d1262a202084e2adca6ca4 100644 (file)
@@ -162,21 +162,7 @@ public:
 class Enum : public Value
 {
 public:
-    struct Signature : public std::pair<const char *, Value *>
-    {
-        Signature()
-            : std::pair<const char *, Value *>()
-        {}
-        Signature(const char *n, Trace::Value *val)
-            : std::pair<const char *, Value *>(n, val)
-        {}
-        ~Signature()
-        {
-            delete second;
-        }
-    };
-
-    Enum(const Signature *_sig) : sig(_sig) {}
+    Enum(const EnumSig *_sig) : sig(_sig) {}
 
     bool toBool(void) const;
     signed long long toSInt(void) const;
@@ -185,7 +171,7 @@ public:
     virtual double toDouble(void) const;
     void visit(Visitor &visitor);
 
-    const Signature *sig;
+    const EnumSig *sig;
 };
 
 
index 77bdd1f46f1b870719e3d049887956a12439ff24..1af9ad04f5b74166a505f8b62dec890ba33d2c85 100644 (file)
@@ -309,11 +309,14 @@ Value *Parser::parse_string() {
 
 Value *Parser::parse_enum() {
     size_t id = read_uint();
-    Enum::Signature *sig = lookup(enums, id);
+    EnumSig *sig = lookup(enums, id);
     if (!sig) {
-        const char *name = read_string();
+        sig = new EnumSig;
+        sig->id = id;
+        sig->name = read_string();
         Value *value = parse_value();
-        sig = new Enum::Signature(name, value);
+        sig->value = value->toSInt();
+        delete value;
         enums[id] = sig;
     }
     assert(sig);
index 634cb59bc8a9bfdf921fb74ea4f03b8f330de9e5..fe360230f6f498906f1b90a021446908380ca590 100644 (file)
@@ -51,7 +51,7 @@ protected:
     typedef std::vector<Struct::Signature *> StructMap;
     StructMap structs;
 
-    typedef std::vector<Enum::Signature *> EnumMap;
+    typedef std::vector<EnumSig *> EnumMap;
     EnumMap enums;
 
     typedef std::vector<BitmaskSig *> BitmaskMap;