56 typedef ObjectType object_type;
57 typedef PropertyType property_type;
58 typedef typename object_ptr_holder<object_type>::type object_ptr_holder_type;
71 bool isValid()
const {
return object_ && property_;}
74 object_type*
object()
const {
return getObject(); }
77 property_type*
property()
const {
return property_; }
80 if(!property_)
return EValueType::eInvalid;
81 return property_->getValueType();
84 errc_t getValueDouble(
double& value)
const
86 auto object = getObject();
87 if(!property_ || !
object)
return eErrorInvalidParam;
88 return property_->getValueDouble(
object, value);
90 errc_t setValueDouble(
double value)
92 auto object = getObject();
93 if(!property_ || !
object)
return eErrorInvalidParam;
94 return property_->setValueDouble(
object, value);
96 errc_t getValueInt(
int& value)
const
98 auto object = getObject();
99 if(!property_ || !
object)
return eErrorInvalidParam;
100 return property_->getValueInt(
object, value);
102 errc_t setValueInt(
int value)
104 auto object = getObject();
105 if(!property_ || !
object)
return eErrorInvalidParam;
106 return property_->setValueInt(
object, value);
108 errc_t getValueBool(
bool& value)
const
110 auto object = getObject();
111 if(!property_ || !
object)
return eErrorInvalidParam;
112 return property_->getValueBool(
object, value);
114 errc_t setValueBool(
bool value)
116 auto object = getObject();
117 if(!property_ || !
object)
return eErrorInvalidParam;
118 return property_->setValueBool(
object, value);
120 errc_t getValueString(std::string& value)
const
122 auto object = getObject();
123 if(!property_ || !
object)
return eErrorInvalidParam;
124 return property_->getValueString(
object, value);
126 errc_t setValueString(StringView value)
128 auto object = getObject();
129 if(!property_ || !
object)
return eErrorInvalidParam;
130 return property_->setValueString(
object, value);
132 errc_t getValueObject(Object*& value)
const
134 auto object = getObject();
135 if(!property_ || !
object)
return eErrorInvalidParam;
136 return property_->getValueObject(
object, value);
138 errc_t setValueObject(Object* value)
140 auto object = getObject();
141 if(!property_ || !
object)
return eErrorInvalidParam;
142 return property_->setValueObject(
object, value);
145 double getValueDouble()
const
148 getValueDouble(value);
151 int getValueInt()
const
157 bool getValueBool()
const
163 std::string getValueString()
const
166 getValueString(value);
169 Object* getValueObject()
const
171 Object* value =
nullptr;
172 getValueObject(value);
176 operator double()
const
178 return getValueDouble();
182 return getValueInt();
184 operator bool()
const
186 return getValueBool();
188 operator std::string()
const
190 return getValueString();
193 AttributeBasic& operator=(
double value)
195 setValueDouble(value);
198 AttributeBasic& operator=(
int value)
204 template<typename T, typename = typename std::enable_if<std::is_same<T, bool>::value>::type>
205 AttributeBasic& operator=(T value)
210 AttributeBasic& operator=(StringView value)
212 setValueString(value);
216 object_type* getObject()
const;
218 object_ptr_holder_type object_{};
219 property_type* property_{
nullptr};