From e935ee1015d5162e02d90be7b52267194231e038 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Thu, 17 Nov 2011 14:04:16 -0800 Subject: [PATCH] Parse doubles to a new Double class rather than to the Float class. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- common/trace_model.cpp | 11 +++++++++++ common/trace_model.hpp | 19 ++++++++++++++++++- common/trace_parser.cpp | 2 +- common/trace_writer_model.cpp | 4 ++++ gui/apitracecall.cpp | 5 +++++ gui/apitracecall.h | 1 + gui/saverthread.cpp | 5 +++++ 7 files changed, 45 insertions(+), 2 deletions(-) diff --git a/common/trace_model.cpp b/common/trace_model.cpp index 96cd6de..2a381ed 100644 --- a/common/trace_model.cpp +++ b/common/trace_model.cpp @@ -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(value) >= 0); return static_cast(value); } signed long long Float ::toSInt(void) const { return static_cast(value); } +signed long long Double ::toSInt(void) const { return static_cast(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= 0); return static_cast(value); } unsigned long long UInt ::toUInt(void) const { return value; } unsigned long long Float ::toUInt(void) const { return static_cast(value); } +unsigned long long Double ::toUInt(void) const { return static_cast(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(value); } float SInt ::toFloat(void) const { return static_cast(value); } float UInt ::toFloat(void) const { return static_cast(value); } float Float ::toFloat(void) const { return value; } +float Double ::toFloat(void) const { return value; } float Enum ::toFloat(void) const { return static_cast(sig->value); } @@ -125,6 +129,7 @@ double Bool ::toDouble(void) const { return static_cast(value); } double SInt ::toDouble(void) const { return static_cast(value); } double UInt ::toDouble(void) const { return static_cast(value); } double Float ::toDouble(void) const { return value; } +double Double ::toDouble(void) const { return value; } double Enum ::toDouble(void) const { return static_cast(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(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) { diff --git a/common/trace_model.hpp b/common/trace_model.hpp index cd89bb6..61ff4a6 100644 --- a/common/trace_model.hpp +++ b/common/trace_model.hpp @@ -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 *); diff --git a/common/trace_parser.cpp b/common/trace_parser.cpp index 27a3723..7556b14 100644 --- a/common/trace_parser.cpp +++ b/common/trace_parser.cpp @@ -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); } diff --git a/common/trace_writer_model.cpp b/common/trace_writer_model.cpp index 4aa350d..26ddc64 100644 --- a/common/trace_writer_model.cpp +++ b/common/trace_writer_model.cpp @@ -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); } diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index c8c2245..4752cc0 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -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)); diff --git a/gui/apitracecall.h b/gui/apitracecall.h index fc4e5d0..f017f5d 100644 --- a/gui/apitracecall.h +++ b/gui/apitracecall.h @@ -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); diff --git a/gui/saverthread.cpp b/gui/saverthread.cpp index 1773494..7e7c471 100644 --- a/gui/saverthread.cpp +++ b/gui/saverthread.cpp @@ -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(); -- 2.43.0