class ValueExtractor(stdapi.Visitor):
def visit_literal(self, literal, lvalue, rvalue):
- if literal.format == 'Bool':
- print ' %s = static_cast<bool>(%s);' % (lvalue, rvalue)
- else:
- print ' %s = %s;' % (lvalue, rvalue)
+ #if literal.format in ('Bool', 'UInt'):
+ print ' %s = (%s).to%s();' % (lvalue, rvalue, literal.format)
def visit_const(self, const, lvalue, rvalue):
self.visit(const.type, lvalue, rvalue)
self.visit(alias.type, lvalue, rvalue)
def visit_enum(self, enum, lvalue, rvalue):
- print ' %s = %s;' % (lvalue, rvalue)
+ print ' %s = (%s).toSInt();' % (lvalue, rvalue)
def visit_bitmask(self, bitmask, lvalue, rvalue):
self.visit(bitmask.type, lvalue, rvalue)
// bool cast
-Null ::operator bool(void) const { return false; }
-Bool ::operator bool(void) const { return value; }
-SInt ::operator bool(void) const { return value != 0; }
-UInt ::operator bool(void) const { return value != 0; }
-Float ::operator bool(void) const { return value != 0; }
-String ::operator bool(void) const { return true; }
-Enum ::operator bool(void) const { return static_cast<bool>(*sig->second); }
-Struct ::operator bool(void) const { return true; }
-Array ::operator bool(void) const { return true; }
-Blob ::operator bool(void) const { return true; }
-Pointer::operator bool(void) const { return value != 0; }
+bool Null ::toBool(void) const { return false; }
+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 String ::toBool(void) const { return true; }
+bool Enum ::toBool(void) const { return sig->second->toBool(); }
+bool Struct ::toBool(void) const { return true; }
+bool Array ::toBool(void) const { return true; }
+bool Blob ::toBool(void) const { return true; }
+bool Pointer::toBool(void) const { return value != 0; }
// signed integer cast
-Value ::operator signed long long (void) const { assert(0); return 0; }
-Null ::operator signed long long (void) const { return 0; }
-Bool ::operator signed long long (void) const { return static_cast<signed long long>(value); }
-SInt ::operator signed long long (void) const { return value; }
-UInt ::operator signed long long (void) const { assert(static_cast<signed long long>(value) >= 0); return static_cast<signed long long>(value); }
-Float ::operator signed long long (void) const { return static_cast<signed long long>(value); }
-Enum ::operator signed long long (void) const { return static_cast<signed long long>(*sig->second); }
+signed long long Value ::toSInt(void) const { assert(0); return 0; }
+signed long long Null ::toSInt(void) const { return 0; }
+signed long long Bool ::toSInt(void) const { return static_cast<signed long long>(value); }
+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(); }
// unsigned integer cast
-Value ::operator unsigned long long (void) const { assert(0); return 0; }
-Null ::operator unsigned long long (void) const { return 0; }
-Bool ::operator unsigned long long (void) const { return static_cast<unsigned long long>(value); }
-SInt ::operator unsigned long long (void) const { assert(value >= 0); return static_cast<signed long long>(value); }
-UInt ::operator unsigned long long (void) const { return value; }
-Float ::operator unsigned long long (void) const { return static_cast<unsigned long long>(value); }
-Enum ::operator unsigned long long (void) const { return static_cast<unsigned long long>(*sig->second); }
+unsigned long long Value ::toUInt(void) const { assert(0); return 0; }
+unsigned long long Null ::toUInt(void) const { return 0; }
+unsigned long long Bool ::toUInt(void) const { return static_cast<unsigned long long>(value); }
+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(); }
// floating point cast
-Value ::operator double (void) const { assert(0); return 0; }
-Null ::operator double (void) const { return 0; }
-Bool ::operator double (void) const { return static_cast<double>(value); }
-SInt ::operator double (void) const { return static_cast<double>(value); }
-UInt ::operator double (void) const { return static_cast<double>(value); }
-Float ::operator double (void) const { return value; }
-Enum ::operator double (void) const { return static_cast<unsigned long long>(*sig->second); }
+double Value ::toFloat(void) const { assert(0); return 0; }
+double Null ::toFloat(void) const { return 0; }
+double Bool ::toFloat(void) const { return static_cast<double>(value); }
+double SInt ::toFloat(void) const { return static_cast<double>(value); }
+double UInt ::toFloat(void) const { return static_cast<double>(value); }
+double Float ::toFloat(void) const { return value; }
+double Enum ::toFloat(void) const { return sig->second->toFloat(); }
// pointer cast
virtual ~Value() {}
virtual void visit(Visitor &visitor) = 0;
- virtual operator bool (void) const = 0;
- virtual operator signed long long (void) const;
- virtual operator unsigned long long (void) const;
- virtual operator double (void) const;
+ 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 void *toPointer(void) const;
virtual unsigned long long toUIntPtr(void) const;
virtual const char *toString(void) const;
- inline operator signed char (void) const {
- return static_cast<signed long long>(*this);
- }
-
- inline operator unsigned char (void) const {
- return static_cast<signed long long>(*this);
- }
-
- inline operator signed short (void) const {
- return static_cast<signed long long>(*this);
- }
-
- inline operator unsigned short (void) const {
- return static_cast<unsigned long long>(*this);
- }
-
- inline operator signed (void) const {
- return static_cast<signed long long>(*this);
- }
-
- inline operator unsigned (void) const {
- return static_cast<unsigned long long>(*this);
- }
-
- inline operator signed long (void) const {
- return static_cast<signed long long>(*this);
- }
-
- inline operator unsigned long (void) const {
- return static_cast<unsigned long long>(*this);
- }
-
- inline operator float (void) const {
- return static_cast<double>(*this);
- }
-
const Value & operator[](size_t index) const;
};
class Null : public Value
{
public:
- operator bool (void) const;
- operator signed long long (void) const;
- operator unsigned long long (void) const;
- operator double (void) const;
+ bool toBool(void) const;
+ signed long long toSInt(void) const;
+ unsigned long long toUInt(void) const;
+ double toFloat(void) const;
void *toPointer(void) const;
unsigned long long toUIntPtr(void) const;
const char *toString(void) const;
public:
Bool(bool _value) : value(_value) {}
- operator bool (void) const;
- operator signed long long (void) const;
- operator unsigned long long (void) const;
- operator double (void) const;
+ bool toBool(void) const;
+ signed long long toSInt(void) const;
+ unsigned long long toUInt(void) const;
+ double toFloat(void) const;
void visit(Visitor &visitor);
bool value;
public:
SInt(signed long long _value) : value(_value) {}
- operator bool (void) const;
- operator signed long long (void) const;
- operator unsigned long long (void) const;
- operator double (void) const;
+ bool toBool(void) const;
+ signed long long toSInt(void) const;
+ unsigned long long toUInt(void) const;
+ double toFloat(void) const;
void visit(Visitor &visitor);
signed long long value;
public:
UInt(unsigned long long _value) : value(_value) {}
- operator bool (void) const;
- operator signed long long (void) const;
- operator unsigned long long (void) const;
- operator double (void) const;
+ bool toBool(void) const;
+ signed long long toSInt(void) const;
+ unsigned long long toUInt(void) const;
+ double toFloat(void) const;
void visit(Visitor &visitor);
unsigned long long value;
public:
Float(double _value) : value(_value) {}
- operator bool (void) const;
- operator signed long long (void) const;
- operator unsigned long long (void) const;
- operator double (void) const;
+ bool toBool(void) const;
+ signed long long toSInt(void) const;
+ unsigned long long toUInt(void) const;
+ double toFloat(void) const;
void visit(Visitor &visitor);
double value;
public:
String(std::string _value) : value(_value) {}
- operator bool (void) const;
+ bool toBool(void) const;
const char *toString(void) const;
void visit(Visitor &visitor);
Enum(const Signature *_sig) : sig(_sig) {}
- operator bool (void) const;
- operator signed long long (void) const;
- operator unsigned long long (void) const;
- operator double (void) const;
+ bool toBool(void) const;
+ signed long long toSInt(void) const;
+ unsigned long long toUInt(void) const;
+ double toFloat(void) const;
void visit(Visitor &visitor);
const Signature *sig;
Struct(Signature *_sig) : sig(_sig), members(_sig->member_names.size()) { }
~Struct();
- operator bool (void) const;
+ bool toBool(void) const;
void visit(Visitor &visitor);
const Signature *sig;
Array(size_t len) : values(len) {}
~Array();
- operator bool (void) const;
+ bool toBool(void) const;
void visit(Visitor &visitor);
std::vector<Value *> values;
~Blob();
- operator bool (void) const;
+ bool toBool(void) const;
void *toPointer(void) const;
void visit(Visitor &visitor);
public:
Pointer(unsigned long long value) : UInt(value) {}
- operator bool (void) const;
+ bool toBool(void) const;
void *toPointer(void) const;
unsigned long long toUIntPtr(void) const;
void visit(Visitor &visitor);