Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00057 #ifndef __VALUE_HPP___
00058 #define __VALUE_HPP___
00059
00060 #include <iostream>
00061
00062 #include <openfluid/dllexport.hpp>
00063 #include <openfluid/base/OFException.hpp>
00064
00065
00066 namespace openfluid { namespace core {
00067
00068 class NullValue;
00069 class BooleanValue;
00070 class DoubleValue;
00071 class IntegerValue;
00072 class StringValue;
00073
00074 class VectorValue;
00075 class MatrixValue;
00076 class MapValue;
00077
00078
00079 class DLLEXPORT Value
00080 {
00081 public:
00082
00083 enum Type { NONE, BOOLEAN, INTEGER, DOUBLE, STRING, VECTOR, MATRIX, MAP, NULLL };
00084
00088 Value() {};
00089
00093 Value(const Value& ) {};
00094
00098 virtual Value& operator =(const Value& ) { return *this; }
00099
00100 virtual ~Value() {};
00101
00102 virtual Type getType() const = 0;
00103
00104 virtual Value* clone() const { throw openfluid::base::OFException("OpenFLUID framework","Value::clone","Value is not cloneable"); };
00105
00106 inline virtual bool isSimple() const = 0;
00107
00108 inline virtual bool isCompound() const = 0;
00109
00110 virtual void writeToStream(std::ostream& OutStm) const = 0;
00111
00112 friend std::ostream& operator<<(std::ostream& OutStm, const Value& Val)
00113 { Val.writeToStream(OutStm); return OutStm; };
00114
00118 inline bool isDoubleValue() const { return getType() == Value::DOUBLE; };
00119
00120 const DoubleValue& asDoubleValue() const;
00121
00122 DoubleValue& asDoubleValue();
00123
00127 inline bool isIntegerValue() const { return getType() == Value::INTEGER; };
00128
00129 const IntegerValue& asIntegerValue() const;
00130
00131 IntegerValue& asIntegerValue();
00132
00136 inline bool isBooleanValue() const { return getType() == Value::BOOLEAN; };
00137
00138 const BooleanValue& asBooleanValue() const;
00139
00140 BooleanValue& asBooleanValue();
00141
00145 inline bool isStringValue() const { return getType() == Value::STRING; };
00146
00147 const StringValue& asStringValue() const;
00148
00149 StringValue& asStringValue();
00150
00154 inline bool isNullValue() const { return getType() == Value::NULLL; };
00155
00156 const NullValue& asNullValue() const;
00157
00158 NullValue& asNullValue();
00159
00163 inline bool isVectorValue() const { return getType() == Value::VECTOR; };
00164
00165 const VectorValue& asVectorValue() const;
00166
00167 VectorValue& asVectorValue();
00168
00172 inline bool isMatrixValue() const { return getType() == Value::MATRIX; };
00173
00174 const MatrixValue& asMatrixValue() const;
00175
00176 MatrixValue& asMatrixValue();
00177
00181 inline bool isMapValue() const { return getType() == Value::MAP; };
00182
00183 const MapValue& asMapValue() const;
00184
00185 MapValue& asMapValue();
00186
00190 std::string toString() const;
00191
00192 static bool getValueTypeFromString(const std::string ValueTypeString, Value::Type& ValueType);
00193
00194 static std::string getStringFromValueType(const Value::Type ValueType);
00195
00196 };
00197
00198
00199 } }
00200
00201
00202 #endif