00001 #ifndef PROTON_SCALAR_HPP
00002 #define PROTON_SCALAR_HPP
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "./internal/scalar_base.hpp"
00024
00025 namespace proton {
00026
00027 namespace codec {
00028 class decoder;
00029 class encoder;
00030 }
00031
00035 class scalar : public internal::scalar_base {
00036 public:
00038 PN_CPP_EXTERN scalar() {}
00039
00041 template <class T> scalar(const T& x) { *this = x; }
00042
00044 template <class T> scalar& operator=(const T& x) { put(x); return *this; }
00045
00047 bool empty() const { return type() == NULL_TYPE; }
00048
00050 void clear() { *this = null(); }
00051 };
00052
00061 template<class T> T get(const scalar& s) { return internal::get<T>(s); }
00062
00073 template<class T> T coerce(const scalar& x) { return internal::coerce<T>(x); }
00074
00075
00086 template<class T> T coerce(scalar& x) { return internal::coerce<T>(x); }
00087
00088 }
00089
00090 #endif // PROTON_SCALAR_HPP