From 9ff7444f18b0709f38c88f3f956e386e9cab4630 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Sat, 7 May 2011 01:17:49 +0100 Subject: [PATCH] Fully segregate Floats from doubles. --- gui/saverthread.cpp | 2 +- stdapi.py | 2 +- trace_model.cpp | 24 +++++++++++++++++------- trace_model.hpp | 26 ++++++++++++++------------ trace_write.cpp | 2 +- trace_write.hpp | 2 +- 6 files changed, 35 insertions(+), 23 deletions(-) diff --git a/gui/saverthread.cpp b/gui/saverthread.cpp index 14f10b8..b16a770 100644 --- a/gui/saverthread.cpp +++ b/gui/saverthread.cpp @@ -137,7 +137,7 @@ writeValue(const QVariant &var, unsigned &id) } break; case QVariant::Double: - Trace::LiteralFloat(var.toDouble()); + Trace::LiteralDouble(var.toDouble()); break; case QMetaType::Float: Trace::LiteralFloat(var.toFloat()); diff --git a/stdapi.py b/stdapi.py index 38f5db5..1dfe200 100644 --- a/stdapi.py +++ b/stdapi.py @@ -566,7 +566,7 @@ UInt = Literal("unsigned int", "UInt") ULong = Literal("unsigned long", "UInt") ULongLong = Literal("unsigned long long", "UInt") Float = Literal("float", "Float") -Double = Literal("double", "Float") +Double = Literal("double", "Double") SizeT = Literal("size_t", "UInt") WString = Literal("wchar_t *", "WString") diff --git a/trace_model.cpp b/trace_model.cpp index 21b8a14..2821cc5 100644 --- a/trace_model.cpp +++ b/trace_model.cpp @@ -97,13 +97,23 @@ unsigned long long Enum ::toUInt(void) const { return sig->second->toUInt(); } // floating point cast -double Value ::toFloat(void) const { assert(0); return 0; } -double Null ::toFloat(void) const { return 0; } -double Bool ::toFloat(void) const { return static_cast(value); } -double SInt ::toFloat(void) const { return static_cast(value); } -double UInt ::toFloat(void) const { return static_cast(value); } -double Float ::toFloat(void) const { return value; } -double Enum ::toFloat(void) const { return sig->second->toFloat(); } +float Value ::toFloat(void) const { assert(0); return 0; } +float Null ::toFloat(void) const { return 0; } +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 Enum ::toFloat(void) const { return sig->second->toFloat(); } + + +// floating point cast +double Value ::toDouble(void) const { assert(0); return 0; } +double Null ::toDouble(void) const { return 0; } +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 Enum ::toDouble(void) const { return sig->second->toDouble(); } // pointer cast diff --git a/trace_model.hpp b/trace_model.hpp index 324fc2c..5e0a09d 100644 --- a/trace_model.hpp +++ b/trace_model.hpp @@ -57,7 +57,8 @@ public: virtual bool toBool(void) const = 0; virtual signed long long toSInt(void) const; virtual unsigned long long toUInt(void) const; - virtual double toFloat(void) const; + virtual float toFloat(void) const; + virtual double toDouble(void) const; virtual void *toPointer(void) const; virtual unsigned long long toUIntPtr(void) const; @@ -73,7 +74,8 @@ public: bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; - double toFloat(void) const; + virtual float toFloat(void) const; + virtual double toDouble(void) const; void *toPointer(void) const; unsigned long long toUIntPtr(void) const; const char *toString(void) const; @@ -89,7 +91,8 @@ public: bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; - double toFloat(void) const; + virtual float toFloat(void) const; + virtual double toDouble(void) const; void visit(Visitor &visitor); bool value; @@ -104,7 +107,8 @@ public: bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; - double toFloat(void) const; + virtual float toFloat(void) const; + virtual double toDouble(void) const; void visit(Visitor &visitor); signed long long value; @@ -119,7 +123,8 @@ public: bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; - double toFloat(void) const; + virtual float toFloat(void) const; + virtual double toDouble(void) const; void visit(Visitor &visitor); unsigned long long value; @@ -134,7 +139,8 @@ public: bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; - double toFloat(void) const; + virtual float toFloat(void) const; + virtual double toDouble(void) const; void visit(Visitor &visitor); double value; @@ -176,7 +182,8 @@ public: bool toBool(void) const; signed long long toSInt(void) const; unsigned long long toUInt(void) const; - double toFloat(void) const; + virtual float toFloat(void) const; + virtual double toDouble(void) const; void visit(Visitor &visitor); const Signature *sig; @@ -288,11 +295,6 @@ protected: std::ostream & operator <<(std::ostream &os, Value *value); -signed long long asSInt(const Value &node); -unsigned long long asUInt(const Value &node); -double asFloat(const Value &node); - - class Call { public: diff --git a/trace_write.cpp b/trace_write.cpp index 617983a..4dfba8a 100644 --- a/trace_write.cpp +++ b/trace_write.cpp @@ -259,7 +259,7 @@ void LiteralFloat(float value) { WriteFloat(value); } -void LiteralFloat(double value) { +void LiteralDouble(double value) { WriteByte(Trace::TYPE_DOUBLE); WriteDouble(value); } diff --git a/trace_write.hpp b/trace_write.hpp index 7ba1154..8797e56 100644 --- a/trace_write.hpp +++ b/trace_write.hpp @@ -95,7 +95,7 @@ namespace Trace { void LiteralSInt(signed long long value); void LiteralUInt(unsigned long long value); void LiteralFloat(float value); - void LiteralFloat(double value); + void LiteralDouble(double value); void LiteralString(const char *str); void LiteralString(const char *str, size_t size); void LiteralWString(const wchar_t *str); -- 2.45.2