#include "value.h" #include namespace domain { Value::ValueType Value::getType() { return type; } bool Value::isType(Value::ValueType type) { return this->type == type; } long long Value::asInt() { if(isType(Value::INT)) { return intValue; } throw std::exception(); } std::string Value::asString() { if(isType(Value::STRING)) { return stringValue; } throw std::exception(); } bool Value::asBool() { if(isType(Value::BOOL)) { return boolValue; } throw std::exception(); } AddressSpace Value::asAddressSpace() { if(isType(Value::ADDRESS_SPACE)) { return *addressSpace; } throw std::exception(); } std::string Value::asReference() { if(isType(Value::WIRE_REFERENCE) || isType(Value::ATTRIBUTE_REFERENCE) || isType(Value::UNDEFINED)) { return reference; } throw std::exception(); } void Value::setInt(long long value) { if(isType(Value::INT)) { this->intValue = value; } throw std::exception(); } void Value::setString(std::string value) { if(isType(Value::STRING)) { this->stringValue = value; } throw std::exception(); } void Value::setBool(bool value) { if(isType(Value::BOOL)) { this->boolValue = value; } throw std::exception(); } void Value::setReference(std::string value) { if(isType(Value::WIRE_REFERENCE)) { this->reference = value; } throw std::exception(); } Value Value::fromInt(long long value) { Value val; val.type = Value::INT; val.intValue = value; return val; } Value Value::fromString(std::string value) { Value val; val.type = Value::STRING; val.stringValue = value; return val; } Value Value::fromBool(bool value) { Value val; val.type = Value::BOOL; val.boolValue = value; return val; } Value Value::fromAddressSpace(AddressSpace addressSpace) { Value val; val.type = Value::ADDRESS_SPACE; val.addressSpace = addressSpace; return val; } Value Value::fromReference(std::string value, Value::ValueType type) { Value val; val.type = type; val.reference = value; return val; } Value Value::ofType(Value::ValueType type) { Value val; val.type = type; return val; } Value Value::fromNull() { Value val; val.type = Value::NIL; return val; } } // namespace domain