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/type_compat.h>
00026
00029
00030 namespace proton {
00031
00035 class scalar : public 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 void clear() { *this = null(); }
00048 };
00049
00058 template<class T> T get(const scalar& s) { return internal::get<T>(s); }
00059
00070 template<class T> T coerce(const scalar& x) { return internal::coerce<T>(x); }
00071
00072
00083 template<class T> T coerce(scalar& x) { return internal::coerce<T>(x); }
00084
00085 }
00086
00087 #endif // PROTON_SCALAR_HPP