00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef MLN_VALUE_CONCEPT_SCALAR_HH
00027 # define MLN_VALUE_CONCEPT_SCALAR_HH
00028
00032
00033 # include <mln/core/concept/value.hh>
00034 # include <mln/literal/one.hh>
00035
00036
00037 namespace mln
00038 {
00039
00040 namespace value
00041 {
00042
00043
00044 template <typename E> struct Scalar;
00045
00046
00047
00048 template <>
00049 struct Scalar<void>
00050 {
00051 typedef Value<void> super;
00052 };
00053
00054 template <typename E>
00055 struct Scalar : public Value<E>
00056 {
00057 typedef Scalar<void> category;
00058 };
00059
00060 }
00061
00062
00063
00065 template <typename S>
00066 S& operator++(value::Scalar<S>& rhs);
00067
00069 template <typename S>
00070 S& operator--(value::Scalar<S>& rhs);
00071
00072
00073 # ifndef MLN_INCLUDE_ONLY
00074
00075 template <typename S>
00076 inline
00077 S& operator++(value::Scalar<S>& rhs)
00078 {
00079 mlc_converts_to(literal::one_t, S)::check();
00080 return exact(rhs) += S(literal::one);
00081 }
00082
00083 template <typename S>
00084 inline
00085 S& operator--(value::Scalar<S>& rhs)
00086 {
00087 mlc_converts_to(literal::one_t, S)::check();
00088 return exact(rhs) -= S(literal::one);
00089 }
00090
00091 # endif // ! MLN_INCLUDE_ONLY
00092
00093 }
00094
00095
00096 #endif // ! MLN_VALUE_CONCEPT_SCALAR_HH