]> git.cworth.org Git - apitrace/commitdiff
Parse doubles to a new Double class rather than to the Float class.
authorCarl Worth <cworth@cworth.org>
Thu, 17 Nov 2011 22:04:16 +0000 (14:04 -0800)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Thu, 24 Nov 2011 18:11:33 +0000 (18:11 +0000)
This is simply a case of not discarding information. Without this, it would
not be possible to parse a trace and re-create the identical trace.

Signed-off-by: José Fonseca <jose.r.fonseca@gmail.com>
common/trace_model.cpp
common/trace_model.hpp
common/trace_parser.cpp
common/trace_writer_model.cpp
gui/apitracecall.cpp
gui/apitracecall.h
gui/saverthread.cpp

index 96cd6dee3f61f93e40254f995e143d320c2f7d11..2a381edb64e665256ad6a79d186c6d5415736555 100644 (file)
@@ -80,6 +80,7 @@ bool Bool   ::toBool(void) const { return value; }
 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 Double ::toBool(void) const { return value != 0; }
 bool String ::toBool(void) const { return true; }
 bool Enum   ::toBool(void) const { return sig->value != 0; }
 bool Struct ::toBool(void) const { return true; }
@@ -95,6 +96,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 Double ::toSInt(void) const { return static_cast<signed long long>(value); }
 signed long long Enum   ::toSInt(void) const { return sig->value; }
 
 
@@ -105,6 +107,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 Double ::toUInt(void) const { return static_cast<unsigned long long>(value); }
 unsigned long long Enum   ::toUInt(void) const { assert(sig->value >= 0); return sig->value; }
 
 
@@ -115,6 +118,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 Double ::toFloat(void) const { return value; }
 float Enum   ::toFloat(void) const { return static_cast<float>(sig->value); }
 
 
@@ -125,6 +129,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 Double ::toDouble(void) const { return value; }
 double Enum   ::toDouble(void) const { return static_cast<double>(sig->value); }
 
 
@@ -158,6 +163,7 @@ void Bool   ::visit(Visitor &visitor) { visitor.visit(this); }
 void SInt   ::visit(Visitor &visitor) { visitor.visit(this); }
 void UInt   ::visit(Visitor &visitor) { visitor.visit(this); }
 void Float  ::visit(Visitor &visitor) { visitor.visit(this); }
+void Double ::visit(Visitor &visitor) { visitor.visit(this); }
 void String ::visit(Visitor &visitor) { visitor.visit(this); }
 void Enum   ::visit(Visitor &visitor) { visitor.visit(this); }
 void Bitmask::visit(Visitor &visitor) { visitor.visit(this); }
@@ -172,6 +178,7 @@ void Visitor::visit(Bool *) { assert(0); }
 void Visitor::visit(SInt *) { assert(0); }
 void Visitor::visit(UInt *) { assert(0); }
 void Visitor::visit(Float *) { assert(0); }
+void Visitor::visit(Double *) { assert(0); }
 void Visitor::visit(String *) { assert(0); }
 void Visitor::visit(Enum *node) { assert(0); }
 void Visitor::visit(Bitmask *node) { visit(static_cast<UInt *>(node)); }
@@ -234,6 +241,10 @@ public:
         os << literal << node->value << normal;
     }
 
+    void visit(Double *node) {
+        os << literal << node->value << normal;
+    }
+
     void visit(String *node) {
         os << literal << "\"";
         for (const char *it = node->value; *it; ++it) {
index cd89bb6ceb41d6f38184064d0329cfe685c22461..61ff4a6be49acabf99be57ca0a7550d3dfa5b140 100644 (file)
@@ -173,7 +173,23 @@ public:
 class Float : public Value
 {
 public:
-    Float(double _value) : value(_value) {}
+    Float(float _value) : value(_value) {}
+
+    bool toBool(void) const;
+    signed long long toSInt(void) const;
+    unsigned long long toUInt(void) const;
+    virtual float toFloat(void) const;
+    virtual double toDouble(void) const;
+    void visit(Visitor &visitor);
+
+    float value;
+};
+
+
+class Double : public Value
+{
+public:
+    Double(double _value) : value(_value) {}
 
     bool toBool(void) const;
     signed long long toSInt(void) const;
@@ -297,6 +313,7 @@ public:
     virtual void visit(SInt *);
     virtual void visit(UInt *);
     virtual void visit(Float *);
+    virtual void visit(Double *);
     virtual void visit(String *);
     virtual void visit(Enum *);
     virtual void visit(Bitmask *);
index 27a372332b509a07a59a7438deb98eb75bcd92ce..7556b14a759db76a0e0c26a5ce1260344252008e 100644 (file)
@@ -551,7 +551,7 @@ void Parser::scan_float() {
 Value *Parser::parse_double() {
     double value;
     file->read(&value, sizeof value);
-    return new Float(value);
+    return new Double(value);
 }
 
 
index 4aa350de0034d2d2f432b09fd119300405fe7bf6..26ddc64d82f91d5512c5180a7a72ab47e20a00c3 100644 (file)
@@ -60,6 +60,10 @@ public:
         writer.writeFloat(node->value);
     }
 
+    void visit(Double *node) {
+        writer.writeDouble(node->value);
+    }
+
     void visit(String *node) {
         writer.writeString(node->value);
     }
index c8c2245effe5e1562d40f3ca64b407944cf7a063..4752cc003e6f8aa36b10b2523ad4c9ebff42b55b 100644 (file)
@@ -171,6 +171,11 @@ void VariantVisitor::visit(trace::Float *node)
     m_variant = QVariant(node->value);
 }
 
+void VariantVisitor::visit(trace::Double *node)
+{
+    m_variant = QVariant(node->value);
+}
+
 void VariantVisitor::visit(trace::String *node)
 {
     m_variant = QVariant(QString::fromStdString(node->value));
index fc4e5d0dd4ae51939cc1cc46435774563caec3eb..f017f5dffefa4f303621144980b4295d7902304e 100644 (file)
@@ -25,6 +25,7 @@ public:
     virtual void visit(trace::SInt *node);
     virtual void visit(trace::UInt *node);
     virtual void visit(trace::Float *node);
+    virtual void visit(trace::Double *node);
     virtual void visit(trace::String *node);
     virtual void visit(trace::Enum *e);
     virtual void visit(trace::Bitmask *bitmask);
index 1773494cfd14b6f5a3ad5c9b5546b059783f5502..7e7c471d3067cdb07512af7fb7201ee8386f8d83 100644 (file)
@@ -243,6 +243,11 @@ public:
         m_editedValue = new trace::Float(m_variant.toFloat());
     }
 
+    virtual void visit(trace::Double *node)
+    {
+        m_editedValue = new trace::Double(m_variant.toDouble());
+    }
+
     virtual void visit(trace::String *node)
     {
         QString str = m_variant.toString();