19 #ifndef _ABSTRACTPROPERTYTYPE_H_
20 #define _ABSTRACTPROPERTYTYPE_H_
23 #include "jsonhelper.h"
25 #include "superptr.hpp"
26 #include "timestamp.h"
27 #include "valuequality.h"
29 #include <boost/algorithm/string.hpp>
30 #include <boost/any.hpp>
31 #include <boost/lexical_cast.hpp>
32 #include <boost/utility.hpp>
39 #include <type_traits>
64 static const Zone::Type FrontRight;
65 static const Zone::Type FrontLeft;
66 static const Zone::Type MiddleRight;
67 static const Zone::Type MiddleLeft;
68 static const Zone::Type RearRight;
69 static const Zone::Type RearLeft;
71 typedef std::vector<Zone::Type> ZoneList;
137 virtual std::string
toString()
const = 0;
200 const std::string
alias() {
return mAlias.empty() ?
name : mAlias; }
207 void setAlias(
const std::string & a) { mAlias = a; }
275 template <
typename T>
278 return boost::any_cast<T>(mValue);
299 const string s = g_variant_get_type_string(var.get());
306 std::vector<std::function<void(AbstractPropertyType*)>>
destroyed;
342 return v.get<
double>();
356 return v.get<
bool>();
370 return v.get<std::string>();
380 template <
typename T>
390 template <
typename T>
397 static const char* signature() {
return "i"; }
399 static int value(GVariant* v)
402 g_variant_get(v, signature(), &val);
406 static std::string stringize(std::string v)
416 static const char* signature() {
return "d"; }
418 static double value(GVariant* v)
420 return g_variant_get_double(v);
422 static std::string stringize(std::string v)
432 static const char* signature() {
return "q"; }
434 static uint16_t
value(GVariant* v)
436 return g_variant_get_uint16(v);
438 static std::string stringize(std::string v)
448 static const char* signature() {
return "n"; }
450 static int16_t
value(GVariant* v)
452 return g_variant_get_int16(v);
454 static std::string stringize(std::string v)
464 static const char* signature() {
return "y"; }
466 static char value(GVariant* v)
468 return g_variant_get_byte(v);
470 static std::string stringize(std::string v)
480 static const char* signature() {
return "u"; }
482 static uint32_t
value(GVariant* v)
484 return g_variant_get_uint32(v);
486 static std::string stringize(std::string v)
496 static const char* signature() {
return "x"; }
498 static int64_t
value(GVariant* v)
500 return g_variant_get_int64(v);
502 static std::string stringize(std::string v)
512 static const char* signature() {
return "t"; }
514 static uint64_t
value(GVariant* v)
516 return g_variant_get_uint64(v);
518 static std::string stringize(std::string v)
528 static const char* signature() {
return "b"; }
530 static bool value(GVariant *v)
532 return g_variant_get_boolean(v);
534 static std::string stringize(std::string v)
536 if(v ==
"0" || v ==
"1")
539 boost::algorithm::to_lower(v);
540 return v ==
"true" ?
"1":
"0";
548 static const char* signature() {
return "s"; }
550 static const char*
value(GVariant *v)
552 return g_variant_get_string(v,
nullptr);
554 static std::string stringize(std::string v)
558 static const char* gvalue(std::string v)
571 template <
typename T>
583 setValue(other.
value<T>());
594 setValue(other.
value<T>());
620 bool operator < (const BasicPropertyType<T>& other)
const
622 return value<T>() < other.value<T>();
627 return value<T>() > other.
value<T>();
645 if(!val.empty() && val !=
"")
667 picojson::object
object = v.get<picojson::object>();
669 object[
"value"] = amb::gvariantToJson(
toVariant());
683 if(!val.empty() && val !=
"")
691 std::stringstream stream;
692 stream.precision(10);
700 return serializeVariant<T>(value<T>());
705 setValue(deserializeVariant<T>(v));
723 void setValue(boost::any val)
735 std::stringstream stream(val);
738 setValue((N)someTemp);
753 return (g_variant_new(
"i",(
int)val));
829 return value<std::string>() < other.
value<std::string>();
836 picojson::object obj = val.get<picojson::object>();
838 obj[
"value"] = amb::gvariantToJson(
toVariant());
860 return value<std::string>();
867 return g_variant_new_string(
toString().c_str());
873 setValue(std::string(g_variant_get_string(v,NULL)));
900 std::vector<T> l = other.list();
929 appendPriv(property);
956 picojson::array array;
969 if(!boost::algorithm::starts_with(str,
"["))
972 if(!boost::algorithm::ends_with(str,
"]"))
976 picojson::parse(value, str);
981 picojson::array array = value.get<picojson::array>();
994 GVariantBuilder params;
995 g_variant_builder_init(¶ms, ((
const GVariantType *)
"av"));
997 for(
auto itr : mList)
1000 g_variant_builder_add_value(¶ms, newvar);
1003 GVariant* var = g_variant_builder_end(¶ms);
1014 gsize dictsize = g_variant_n_children(v);
1015 for (
int i=0;i<dictsize;i++)
1017 GVariant *childvariant = g_variant_get_child_value(v,i);
1018 GVariant *innervariant = g_variant_get_variant(childvariant);
1023 std::vector<T> list() {
return mList; }
1032 void appendPriv(T i)
1039 std::vector<T> mList;