56 typedef ObjectType object_type;
57 typedef PropertyType property_type;
58 typedef typename object_ptr_holder<object_type>::type object_ptr_holder_type;
68 bool isValid()
const {
return object_ && property_;}
71 object_type*
object()
const {
return getObject(); }
74 property_type*
property()
const {
return property_; }
77 if(!property_)
return EValueType::eInvalid;
78 return property_->getValueType();
81 errc_t getValueDouble(
double& value)
const
83 auto object = getObject();
84 if(!property_ || !
object)
return eErrorInvalidParam;
85 return property_->getValueDouble(
object, value);
87 errc_t setValueDouble(
double value)
89 auto object = getObject();
90 if(!property_ || !
object)
return eErrorInvalidParam;
91 return property_->setValueDouble(
object, value);
93 errc_t getValueInt(
int& value)
const
95 auto object = getObject();
96 if(!property_ || !
object)
return eErrorInvalidParam;
97 return property_->getValueInt(
object, value);
99 errc_t setValueInt(
int value)
101 auto object = getObject();
102 if(!property_ || !
object)
return eErrorInvalidParam;
103 return property_->setValueInt(
object, value);
105 errc_t getValueBool(
bool& value)
const
107 auto object = getObject();
108 if(!property_ || !
object)
return eErrorInvalidParam;
109 return property_->getValueBool(
object, value);
111 errc_t setValueBool(
bool value)
113 auto object = getObject();
114 if(!property_ || !
object)
return eErrorInvalidParam;
115 return property_->setValueBool(
object, value);
117 errc_t getValueString(std::string& value)
const
119 auto object = getObject();
120 if(!property_ || !
object)
return eErrorInvalidParam;
121 return property_->getValueString(
object, value);
123 errc_t setValueString(StringView value)
125 auto object = getObject();
126 if(!property_ || !
object)
return eErrorInvalidParam;
127 return property_->setValueString(
object, value);
129 errc_t getValueObject(Object*& value)
const
131 auto object = getObject();
132 if(!property_ || !
object)
return eErrorInvalidParam;
133 return property_->getValueObject(
object, value);
135 errc_t setValueObject(Object* value)
137 auto object = getObject();
138 if(!property_ || !
object)
return eErrorInvalidParam;
139 return property_->setValueObject(
object, value);
142 double getValueDouble()
const
145 getValueDouble(value);
148 int getValueInt()
const
154 bool getValueBool()
const
160 std::string getValueString()
const
163 getValueString(value);
166 Object* getValueObject()
const
168 Object* value =
nullptr;
169 getValueObject(value);
173 operator double()
const
175 return getValueDouble();
179 return getValueInt();
181 operator bool()
const
183 return getValueBool();
185 operator std::string()
const
187 return getValueString();
190 AttributeBasic& operator=(
double value)
192 setValueDouble(value);
195 AttributeBasic& operator=(
int value)
201 template<typename T, typename = typename std::enable_if<std::is_same<T, bool>::value>::type>
202 AttributeBasic& operator=(T value)
207 AttributeBasic& operator=(StringView value)
209 setValueString(value);
213 object_type* getObject()
const;
215 object_ptr_holder_type object_{};
216 property_type* property_{
nullptr};