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 "./scalar_base.hpp"
00024
00025 #include "proton/null.hpp"
00026
00027 #include <proton/type_compat.h>
00028
00031
00032 namespace proton {
00033
00037 class scalar : public scalar_base {
00038 public:
00040 PN_CPP_EXTERN scalar() {}
00041
00043 template <class T> scalar(const T& x) { *this = x; }
00044
00046 template <class T> scalar& operator=(const T& x) { put(x); return *this; }
00047
00049 void clear() { *this = null(); }
00050 };
00051
00060 template<class T> T get(const scalar& s) { return internal::get<T>(s); }
00061
00072 template<class T> T coerce(const scalar& x) { return internal::coerce<T>(x); }
00073
00074
00085 template<class T> T coerce(scalar& x) { return internal::coerce<T>(x); }
00086
00087 }
00088
00089 #endif // PROTON_SCALAR_HPP