DGtal  0.9.2
ConceptUtils.h
1 
17 #pragma once
18 
33 #if defined(ConceptUtils_RECURSES)
34 #error Recursive header files inclusion detected in ConceptUtils.h
35 #else // defined(ConceptUtils_RECURSES)
36 
37 #define ConceptUtils_RECURSES
38 
39 #if !defined ConceptUtils_h
40 
41 #define ConceptUtils_h
42 
44 // Inclusions
45 #include <iostream>
47 
48 namespace DGtal
49 {
53  struct TagFalse{};
54 
58  struct TagTrue{};
59 
63  struct TagUnknown{};
64 
69  template<typename T>
70  struct Negate
71  { typedef TagUnknown type; };
72  template<>
73  struct Negate<TagTrue>
74  { typedef TagFalse type; };
75  template<>
76  struct Negate<TagFalse>
77  { typedef TagTrue type; };
78 
85  template <class T>
86  struct DummyObject : public boost::static_object<T>
87  {};
88 
90 // Namespace ConceptUtils
97  namespace concepts
98  {
99 namespace ConceptUtils
100 {
105  template<typename T1, typename T2>
106  struct SameType
107  { static const bool value = false; };
108 
109  template<typename T>
110  struct SameType<T,T>
111  { static const bool value = true; };
112 
119  template <typename T>
120  void sameType( const T & t1, const T & t2 );
121 
125  template<typename T>
126  struct CheckTrue
127  { static const bool value = false; };
128  template<>
130  { static const bool value = true; };
131 
135  template<typename T>
136  struct CheckFalse
137  { static const bool value = !CheckTrue<T>::value; };
138 
142  template<typename T>
144  { static const bool value = false; };
145  template<>
147  { static const bool value = true; };
148 
152  template<typename T>
154  { static const bool value = CheckTrue<T>::value||CheckFalse<T>::value; };
155 
159  template<typename T>
160  struct CheckTag
161  { static const bool value = CheckTrueOrFalse<T>::value||CheckUnknown<T>::value; };
162 
167  void checkTrue( const TagTrue & tag );
168 
173  void checkFalse( const TagFalse & tag );
174 
179  void checkUnknown( const TagUnknown & tag );
180 
185  void checkTag( const TagUnknown & tag );
186 
191  void checkTag( const TagTrue & tag );
192 
197  void checkTag( const TagFalse & tag );
198 
203  void checkTrueOrFalse( const TagFalse & tag );
204 
209  void checkTrueOrFalse( const TagTrue & tag );
210 
211 
212 } // end of namespace ConceptUtils
213  } //end of namespace concepts.
214 } // namespace DGtal
215 
216 // //
218 
219 #endif // !defined ConceptUtils_h
220 
221 #undef ConceptUtils_RECURSES
222 #endif // else defined(ConceptUtils_RECURSES)
void checkTag(const TagUnknown &tag)
void checkTrue(const TagTrue &tag)
void checkTrueOrFalse(const TagFalse &tag)
void sameType(const T &t1, const T &t2)
DGtal is the top-level namespace which contains all DGtal functions and types.
void checkUnknown(const TagUnknown &tag)
TagUnknown type
Definition: ConceptUtils.h:71
void checkFalse(const TagFalse &tag)