00001 #ifndef PROTON_ANNOTATION_KEY_HPP
00002 #define PROTON_ANNOTATION_KEY_HPP
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "./scalar_base.hpp"
00026 #include "./symbol.hpp"
00027
00028 #include <proton/type_compat.h>
00029
00032
00033 namespace proton {
00034
00038 class annotation_key : public scalar_base {
00039 public:
00041 annotation_key() {}
00042
00044 template <class T> annotation_key(const T& x) { *this = x; }
00045
00048 annotation_key& operator=(uint64_t x) { put_(x); return *this; }
00049 annotation_key& operator=(const symbol& x) { put_(x); return *this; }
00051
00054 annotation_key& operator=(const std::string& x) { put_(symbol(x)); return *this; }
00055 annotation_key& operator=(const char *x) { put_(symbol(x)); return *this; }
00057
00059 friend class message;
00060 friend class codec::decoder;
00062 };
00063
00066 template <class T> T get(const annotation_key& x);
00068
00072 template<> inline uint64_t get<uint64_t>(const annotation_key& x) { return internal::get<uint64_t>(x); }
00073
00077 template<> inline symbol get<symbol>(const annotation_key& x) { return internal::get<symbol>(x); }
00078
00083 template<class T> T coerce(const annotation_key& x) { return internal::coerce<T>(x); }
00084
00085 }
00086
00087 #endif // PROTON_ANNOTATION_KEY_HPP