summaryrefslogtreecommitdiff
path: root/include/dbus-c++/types.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/dbus-c++/types.h')
-rw-r--r--include/dbus-c++/types.h696
1 files changed, 403 insertions, 293 deletions
diff --git a/include/dbus-c++/types.h b/include/dbus-c++/types.h
index 4b77dd7..044e72b 100644
--- a/include/dbus-c++/types.h
+++ b/include/dbus-c++/types.h
@@ -35,30 +35,31 @@
#include "message.h"
#include "error.h"
-namespace DBus {
+namespace DBus
+{
struct DXXAPI Path : public std::string
-{
- Path() {}
- Path(const std::string &s) : std::string(s) {}
- Path(const char *c) : std::string(c) {}
- Path &operator = (std::string &s)
- {
- std::string::operator = (s);
- return *this;
- }
+{
+ Path() {}
+ Path(const std::string &s) : std::string(s) {}
+ Path(const char *c) : std::string(c) {}
+ Path &operator = (std::string &s)
+ {
+ std::string::operator = (s);
+ return *this;
+ }
};
struct DXXAPI Signature : public std::string
-{
- Signature() {}
- Signature(const std::string &s) : std::string(s) {}
- Signature(const char *c) : std::string(c) {}
- Signature &operator = (std::string &s)
- {
- std::string::operator = (s);
- return *this;
- }
+{
+ Signature() {}
+ Signature(const std::string &s) : std::string(s) {}
+ Signature(const char *c) : std::string(c) {}
+ Signature &operator = (std::string &s)
+ {
+ std::string::operator = (s);
+ return *this;
+ }
};
struct DXXAPI Invalid {};
@@ -67,474 +68,583 @@ class DXXAPI Variant
{
public:
- Variant();
+ Variant();
- Variant(MessageIter &it);
+ Variant(MessageIter &it);
- Variant &operator = (const Variant &v);
+ Variant &operator = (const Variant &v);
- const Signature signature() const;
+ const Signature signature() const;
- void clear();
+ void clear();
- MessageIter reader() const
- {
- return _msg.reader();
- }
+ MessageIter reader() const
+ {
+ return _msg.reader();
+ }
- MessageIter writer()
- {
- return _msg.writer();
- }
+ MessageIter writer()
+ {
+ return _msg.writer();
+ }
- template <typename T>
- operator T() const
- {
- T cast;
- MessageIter ri = _msg.reader();
- ri >> cast;
- return cast;
- }
+ template <typename T>
+ operator T() const
+ {
+ T cast;
+ MessageIter ri = _msg.reader();
+ ri >> cast;
+ return cast;
+ }
private:
- Message _msg;
+ Message _msg;
};
template <
- typename T1,
- typename T2 = Invalid,
- typename T3 = Invalid,
- typename T4 = Invalid,
- typename T5 = Invalid,
- typename T6 = Invalid,
- typename T7 = Invalid,
- typename T8 = Invalid,
- typename T9 = Invalid,
- typename T10 = Invalid,
- typename T11 = Invalid,
- typename T12 = Invalid,
- typename T13 = Invalid,
- typename T14 = Invalid,
- typename T15 = Invalid,
- typename T16 = Invalid // nobody needs more than 16
->
+typename T1,
+ typename T2 = Invalid,
+ typename T3 = Invalid,
+ typename T4 = Invalid,
+ typename T5 = Invalid,
+ typename T6 = Invalid,
+ typename T7 = Invalid,
+ typename T8 = Invalid,
+ typename T9 = Invalid,
+ typename T10 = Invalid,
+ typename T11 = Invalid,
+ typename T12 = Invalid,
+ typename T13 = Invalid,
+ typename T14 = Invalid,
+ typename T15 = Invalid,
+ typename T16 = Invalid // nobody needs more than 16
+ >
struct Struct
{
- T1 _1; T2 _2; T3 _3; T4 _4; T5 _5; T6 _6; T7 _7; T8 _8; T9 _9;
- T10 _10; T11 _11; T12 _12; T13 _13; T14 _14; T15 _15; T16 _16;
+ T1 _1;
+ T2 _2;
+ T3 _3;
+ T4 _4;
+ T5 _5;
+ T6 _6;
+ T7 _7;
+ T8 _8;
+ T9 _9;
+ T10 _10;
+ T11 _11;
+ T12 _12;
+ T13 _13;
+ T14 _14;
+ T15 _15;
+ T16 _16;
};
template<typename K, typename V>
-inline bool dict_has_key(const std::map<K,V>& map, const K &key)
+inline bool dict_has_key(const std::map<K, V>& map, const K &key)
{
- return map.find(key) != map.end();
+ return map.find(key) != map.end();
}
template <typename T>
struct type
{
- static std::string sig()
- {
- throw ErrorInvalidArgs("unknown type");
- return "";
- }
+ static std::string sig()
+ {
+ throw ErrorInvalidArgs("unknown type");
+ return "";
+ }
};
-template <> struct type<Variant> { static std::string sig(){ return "v"; } };
-template <> struct type<uint8_t> { static std::string sig(){ return "y"; } };
-template <> struct type<bool> { static std::string sig(){ return "b"; } };
-template <> struct type<int16_t> { static std::string sig(){ return "n"; } };
-template <> struct type<uint16_t> { static std::string sig(){ return "q"; } };
-template <> struct type<int32_t> { static std::string sig(){ return "i"; } };
-template <> struct type<uint32_t> { static std::string sig(){ return "u"; } };
-template <> struct type<int64_t> { static std::string sig(){ return "x"; } };
-template <> struct type<uint64_t> { static std::string sig(){ return "t"; } };
-template <> struct type<double> { static std::string sig(){ return "d"; } };
-template <> struct type<std::string> { static std::string sig(){ return "s"; } };
-template <> struct type<Path> { static std::string sig(){ return "o"; } };
-template <> struct type<Signature> { static std::string sig(){ return "g"; } };
-template <> struct type<Invalid> { static std::string sig(){ return ""; } };
-
-template <typename E>
+template <> struct type<Variant>
+{
+ static std::string sig()
+ {
+ return "v";
+ }
+};
+template <> struct type<uint8_t>
+{
+ static std::string sig()
+ {
+ return "y";
+ }
+};
+template <> struct type<bool>
+{
+ static std::string sig()
+ {
+ return "b";
+ }
+};
+template <> struct type<int16_t>
+{
+ static std::string sig()
+ {
+ return "n";
+ }
+};
+template <> struct type<uint16_t>
+{
+ static std::string sig()
+ {
+ return "q";
+ }
+};
+template <> struct type<int32_t>
+{
+ static std::string sig()
+ {
+ return "i";
+ }
+};
+template <> struct type<uint32_t>
+{
+ static std::string sig()
+ {
+ return "u";
+ }
+};
+template <> struct type<int64_t>
+{
+ static std::string sig()
+ {
+ return "x";
+ }
+};
+template <> struct type<uint64_t>
+{
+ static std::string sig()
+ {
+ return "t";
+ }
+};
+template <> struct type<double>
+{
+ static std::string sig()
+ {
+ return "d";
+ }
+};
+template <> struct type<std::string>
+{
+ static std::string sig()
+ {
+ return "s";
+ }
+};
+template <> struct type<Path>
+{
+ static std::string sig()
+ {
+ return "o";
+ }
+};
+template <> struct type<Signature>
+{
+ static std::string sig()
+ {
+ return "g";
+ }
+};
+template <> struct type<Invalid>
+{
+ static std::string sig()
+ {
+ return "";
+ }
+};
+
+template <typename E>
struct type< std::vector<E> >
-{ static std::string sig(){ return "a" + type<E>::sig(); } };
+{
+ static std::string sig()
+ {
+ return "a" + type<E>::sig();
+ }
+};
template <typename K, typename V>
-struct type< std::map<K,V> >
-{ static std::string sig(){ return "a{" + type<K>::sig() + type<V>::sig() + "}"; } };
+struct type< std::map<K, V> >
+{
+ static std::string sig()
+ {
+ return "a{" + type<K>::sig() + type<V>::sig() + "}";
+ }
+};
template <
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename T11,
- typename T12,
- typename T13,
- typename T14,
- typename T15,
- typename T16 // nobody needs more than 16
->
-struct type< Struct<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16> >
-{
- static std::string sig()
- {
- return "("
- + type<T1>::sig()
- + type<T2>::sig()
- + type<T3>::sig()
- + type<T4>::sig()
- + type<T5>::sig()
- + type<T6>::sig()
- + type<T7>::sig()
- + type<T8>::sig()
- + type<T9>::sig()
- + type<T10>::sig()
- + type<T11>::sig()
- + type<T12>::sig()
- + type<T13>::sig()
- + type<T14>::sig()
- + type<T15>::sig()
- + type<T16>::sig()
- + ")";
- }
+typename T1,
+ typename T2,
+ typename T3,
+ typename T4,
+ typename T5,
+ typename T6,
+ typename T7,
+ typename T8,
+ typename T9,
+ typename T10,
+ typename T11,
+ typename T12,
+ typename T13,
+ typename T14,
+ typename T15,
+ typename T16 // nobody needs more than 16
+ >
+struct type< Struct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> >
+{
+ static std::string sig()
+ {
+ return "("
+ + type<T1>::sig()
+ + type<T2>::sig()
+ + type<T3>::sig()
+ + type<T4>::sig()
+ + type<T5>::sig()
+ + type<T6>::sig()
+ + type<T7>::sig()
+ + type<T8>::sig()
+ + type<T9>::sig()
+ + type<T10>::sig()
+ + type<T11>::sig()
+ + type<T12>::sig()
+ + type<T13>::sig()
+ + type<T14>::sig()
+ + type<T15>::sig()
+ + type<T16>::sig()
+ + ")";
+ }
};
} /* namespace DBus */
inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const DBus::Invalid &)
{
- return iter;
+ return iter;
}
inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const uint8_t &val)
{
- iter.append_byte(val);
- return iter;
+ iter.append_byte(val);
+ return iter;
}
inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const bool &val)
{
- iter.append_bool(val);
- return iter;
+ iter.append_bool(val);
+ return iter;
}
-inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const int16_t& val)
+inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const int16_t &val)
{
- iter.append_int16(val);
- return iter;
+ iter.append_int16(val);
+ return iter;
}
-inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const uint16_t& val)
+inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const uint16_t &val)
{
- iter.append_uint16(val);
- return iter;
+ iter.append_uint16(val);
+ return iter;
}
-inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const int32_t& val)
+inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const int32_t &val)
{
- iter.append_int32(val);
- return iter;
+ iter.append_int32(val);
+ return iter;
}
-inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const uint32_t& val)
+inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const uint32_t &val)
{
- iter.append_uint32(val);
- return iter;
+ iter.append_uint32(val);
+ return iter;
}
-inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const int64_t& val)
+inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const int64_t &val)
{
- iter.append_int64(val);
- return iter;
+ iter.append_int64(val);
+ return iter;
}
-inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const uint64_t& val)
+inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const uint64_t &val)
{
- iter.append_uint64(val);
- return iter;
+ iter.append_uint64(val);
+ return iter;
}
inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const double &val)
{
- iter.append_double(val);
- return iter;
+ iter.append_double(val);
+ return iter;
}
inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const std::string &val)
{
- iter.append_string(val.c_str());
- return iter;
+ iter.append_string(val.c_str());
+ return iter;
}
inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const DBus::Path &val)
{
- iter.append_path(val.c_str());
- return iter;
+ iter.append_path(val.c_str());
+ return iter;
}
inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const DBus::Signature &val)
{
- iter.append_signature(val.c_str());
- return iter;
+ iter.append_signature(val.c_str());
+ return iter;
}
template<typename E>
inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const std::vector<E>& val)
{
- const std::string sig = DBus::type<E>::sig();
- DBus::MessageIter ait = iter.new_array(sig.c_str());
+ const std::string sig = DBus::type<E>::sig();
+ DBus::MessageIter ait = iter.new_array(sig.c_str());
- typename std::vector<E>::const_iterator vit;
- for (vit = val.begin(); vit != val.end(); ++vit)
- {
- ait << *vit;
- }
+ typename std::vector<E>::const_iterator vit;
+ for (vit = val.begin(); vit != val.end(); ++vit)
+ {
+ ait << *vit;
+ }
- iter.close_container(ait);
- return iter;
+ iter.close_container(ait);
+ return iter;
}
template<>
inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const std::vector<uint8_t>& val)
{
- DBus::MessageIter ait = iter.new_array("y");
- ait.append_array('y', &val.front(), val.size());
- iter.close_container(ait);
- return iter;
+ DBus::MessageIter ait = iter.new_array("y");
+ ait.append_array('y', &val.front(), val.size());
+ iter.close_container(ait);
+ return iter;
}
template<typename K, typename V>
-inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const std::map<K,V>& val)
+inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const std::map<K, V>& val)
{
- const std::string sig = "{" + DBus::type<K>::sig() + DBus::type<V>::sig() + "}";
- DBus::MessageIter ait = iter.new_array(sig.c_str());
+ const std::string sig = "{" + DBus::type<K>::sig() + DBus::type<V>::sig() + "}";
+ DBus::MessageIter ait = iter.new_array(sig.c_str());
- typename std::map<K,V>::const_iterator mit;
- for (mit = val.begin(); mit != val.end(); ++mit)
- {
- DBus::MessageIter eit = ait.new_dict_entry();
+ typename std::map<K, V>::const_iterator mit;
+ for (mit = val.begin(); mit != val.end(); ++mit)
+ {
+ DBus::MessageIter eit = ait.new_dict_entry();
- eit << mit->first << mit->second;
+ eit << mit->first << mit->second;
- ait.close_container(eit);
- }
+ ait.close_container(eit);
+ }
- iter.close_container(ait);
- return iter;
+ iter.close_container(ait);
+ return iter;
}
template <
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename T11,
- typename T12,
- typename T13,
- typename T14,
- typename T15,
- typename T16
->
-inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const DBus::Struct<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>& val)
-{
- DBus::MessageIter sit = iter.new_struct();
-
- sit << val._1 << val._2 << val._3 << val._4
+typename T1,
+ typename T2,
+ typename T3,
+ typename T4,
+ typename T5,
+ typename T6,
+ typename T7,
+ typename T8,
+ typename T9,
+ typename T10,
+ typename T11,
+ typename T12,
+ typename T13,
+ typename T14,
+ typename T15,
+ typename T16
+ >
+inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const DBus::Struct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>& val)
+{
+ DBus::MessageIter sit = iter.new_struct();
+
+ sit << val._1 << val._2 << val._3 << val._4
<< val._5 << val._6 << val._7 << val._8
<< val._9 << val._10 << val._11 << val._12
<< val._13 << val._14 << val._15 << val._16;
- iter.close_container(sit);
+ iter.close_container(sit);
- return iter;
+ return iter;
}
extern DXXAPI DBus::MessageIter &operator << (DBus::MessageIter &iter, const DBus::Variant &val);
inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, DBus::Invalid &)
{
- return iter;
+ return iter;
}
inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, uint8_t &val)
{
- val = iter.get_byte();
- return ++iter;
+ val = iter.get_byte();
+ return ++iter;
}
inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, bool &val)
{
- val = iter.get_bool();
- return ++iter;
+ val = iter.get_bool();
+ return ++iter;
}
-inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, int16_t& val)
+inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, int16_t &val)
{
- val = iter.get_int16();
- return ++iter;
+ val = iter.get_int16();
+ return ++iter;
}
-inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, uint16_t& val)
+inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, uint16_t &val)
{
- val = iter.get_uint16();
- return ++iter;
+ val = iter.get_uint16();
+ return ++iter;
}
-inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, int32_t& val)
+inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, int32_t &val)
{
- val = iter.get_int32();
- return ++iter;
+ val = iter.get_int32();
+ return ++iter;
}
-inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, uint32_t& val)
+inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, uint32_t &val)
{
- val = iter.get_uint32();
- return ++iter;
+ val = iter.get_uint32();
+ return ++iter;
}
-inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, int64_t& val)
+inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, int64_t &val)
{
- val = iter.get_int64();
- return ++iter;
+ val = iter.get_int64();
+ return ++iter;
}
-inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, uint64_t& val)
+inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, uint64_t &val)
{
- val = iter.get_uint64();
- return ++iter;
+ val = iter.get_uint64();
+ return ++iter;
}
inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, double &val)
{
- val = iter.get_double();
- return ++iter;
+ val = iter.get_double();
+ return ++iter;
}
inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, std::string &val)
{
- val = iter.get_string();
- return ++iter;
+ val = iter.get_string();
+ return ++iter;
}
inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, DBus::Path &val)
{
- val = iter.get_path();
- return ++iter;
+ val = iter.get_path();
+ return ++iter;
}
inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, DBus::Signature &val)
{
- val = iter.get_signature();
- return ++iter;
+ val = iter.get_signature();
+ return ++iter;
}
template<typename E>
inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, std::vector<E>& val)
{
- if (!iter.is_array())
- throw DBus::ErrorInvalidArgs("array expected");
+ if (!iter.is_array())
+ throw DBus::ErrorInvalidArgs("array expected");
- DBus::MessageIter ait = iter.recurse();
+ DBus::MessageIter ait = iter.recurse();
- while (!ait.at_end())
- {
- E elem;
+ while (!ait.at_end())
+ {
+ E elem;
- ait >> elem;
+ ait >> elem;
- val.push_back(elem);
- }
- return ++iter;
+ val.push_back(elem);
+ }
+ return ++iter;
}
template<>
inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, std::vector<uint8_t>& val)
{
- if (!iter.is_array())
- throw DBus::ErrorInvalidArgs("array expected");
+ if (!iter.is_array())
+ throw DBus::ErrorInvalidArgs("array expected");
- if (iter.array_type() != 'y')
- throw DBus::ErrorInvalidArgs("byte-array expected");
+ if (iter.array_type() != 'y')
+ throw DBus::ErrorInvalidArgs("byte-array expected");
- DBus::MessageIter ait = iter.recurse();
+ DBus::MessageIter ait = iter.recurse();
- uint8_t *array;
- size_t length = ait.get_array(&array);
+ uint8_t *array;
+ size_t length = ait.get_array(&array);
- val.insert(val.end(), array, array+length);
+ val.insert(val.end(), array, array + length);
- return ++iter;
+ return ++iter;
}
template<typename K, typename V>
-inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, std::map<K,V>& val)
+inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, std::map<K, V>& val)
{
- if (!iter.is_dict())
- throw DBus::ErrorInvalidArgs("dictionary value expected");
+ if (!iter.is_dict())
+ throw DBus::ErrorInvalidArgs("dictionary value expected");
- DBus::MessageIter mit = iter.recurse();
+ DBus::MessageIter mit = iter.recurse();
- while (!mit.at_end())
- {
- K key; V value;
+ while (!mit.at_end())
+ {
+ K key;
+ V value;
- DBus::MessageIter eit = mit.recurse();
+ DBus::MessageIter eit = mit.recurse();
- eit >> key >> value;
+ eit >> key >> value;
- val[key] = value;
+ val[key] = value;
- ++mit;
- }
+ ++mit;
+ }
- return ++iter;
+ return ++iter;
}
template <
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename T11,
- typename T12,
- typename T13,
- typename T14,
- typename T15,
- typename T16
->
-inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, DBus::Struct<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>& val)
-{
- DBus::MessageIter sit = iter.recurse();
-
- sit >> val._1 >> val._2 >> val._3 >> val._4
+typename T1,
+ typename T2,
+ typename T3,
+ typename T4,
+ typename T5,
+ typename T6,
+ typename T7,
+ typename T8,
+ typename T9,
+ typename T10,
+ typename T11,
+ typename T12,
+ typename T13,
+ typename T14,
+ typename T15,
+ typename T16
+ >
+inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, DBus::Struct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>& val)
+{
+ DBus::MessageIter sit = iter.recurse();
+
+ sit >> val._1 >> val._2 >> val._3 >> val._4
>> val._5 >> val._6 >> val._7 >> val._8
>> val._9 >> val._10 >> val._11 >> val._12
>> val._13 >> val._14 >> val._15 >> val._16;
- return ++iter;
+ return ++iter;
}
extern DXXAPI DBus::MessageIter &operator >> (DBus::MessageIter &iter, DBus::Variant &val);
-
+
#endif//__DBUSXX_TYPES_H