27 #ifndef MLN_UTIL_OBJECT_ID_HH
28 # define MLN_UTIL_OBJECT_ID_HH
35 # include <mln/core/concept/object.hh>
36 # include <mln/value/concept/integer.hh>
37 # include <mln/metal/abort.hh>
48 template <
typename Tag,
typename V>
62 template <
typename V2>
65 template <
typename Tag2,
typename V2>
70 template <
typename V2>
73 const V&
value()
const;
88 template <
typename Tag,
typename V>
92 template <
typename Tag,
typename V,
typename V2>
97 template <
typename Tag,
typename V>
102 # ifndef MLN_INCLUDE_ONLY
107 template <
typename Tag,
typename V>
114 template <
typename Tag,
typename V>
115 template <
typename V2>
117 object_id<Tag,V>::object_id(
const V2&
id)
120 mlc_converts_to(V2,V)::check();
123 template <
typename Tag,
typename V>
124 template <
typename Tag2,
typename V2>
126 object_id<Tag,V>::object_id(
const object_id<Tag2,V2>&
id)
129 typedef object_id<Tag2,V2> id_t;
130 mlc_abort(id_t)::check();
133 template <
typename Tag,
typename V>
134 template <
typename V2>
137 object_id<Tag,V>::operator=(
const V2& v)
139 mlc_converts_to(V2,V)::check();
145 template <
typename Tag,
typename V>
153 template <
typename Tag,
typename V>
161 template <
typename Tag,
typename V>
163 object_id<Tag,V>::operator
unsigned()
const
169 template <
typename Tag,
typename V>
172 object_id<Tag,V>::is_valid()
const
174 return id_ != mln_max(V);
177 template <
typename Tag,
typename V>
180 object_id<Tag,V>::invalidate()
185 template <
typename Tag,
typename V>
188 object_id<Tag,V>::to_equiv()
const
195 template <
typename Tag,
typename V,
typename V2>
198 operator==(
const object_id<Tag,V>& lhs,
const Value<V2>& rhs)
200 return lhs.value() ==
static_cast<V
>(
exact(rhs).to_equiv());
203 template <
typename Tag,
typename V>
206 operator==(
const object_id<Tag,V>& lhs,
const object_id<Tag,V>& rhs)
208 return lhs.value() == rhs.value();
211 template <
typename Tag,
typename V>
214 operator<(const object_id<Tag,V>& lhs,
const object_id<Tag,V>& rhs)
216 return lhs.value() < rhs.value();
222 template <
typename Tag,
typename V>
223 void from_to_(
const util::object_id<Tag,V>& from, V& to_)
230 # endif // ! MLN_INCLUDE_ONLY
234 #endif // ! MLN_UTIL_OBJECT_ID_HH