00001 // -*- c++ -*- 00002 //***************************************************************************** 00013 //***************************************************************************** 00014 00015 #ifndef polybori_common_common_tags_h_ 00016 #define polybori_common_common_tags_h_ 00017 00018 // include basic definitions 00019 #include <polybori/pbori_defs.h> 00020 #include <polybori/orderings/order_tags.h> 00021 00022 BEGIN_NAMESPACE_PBORI 00023 00027 struct invalid_tag { }; 00028 00032 struct valid_tag { }; 00033 00034 00038 template <class Tag> 00039 struct invert_tag; 00040 00041 template <> 00042 struct invert_tag<valid_tag> { typedef invalid_tag type; }; 00043 00044 template <> 00045 struct invert_tag<invalid_tag> { typedef valid_tag type; }; 00046 00050 template <class Tag1, class Tag2> 00051 struct and_tag { typedef invalid_tag type; }; 00052 00053 template <> 00054 struct and_tag<valid_tag, valid_tag> { typedef valid_tag type; }; 00055 00056 00060 struct navigator_tag {}; 00061 00065 template <class ValidityTag> 00066 class equality_property { 00067 public: 00068 00070 typedef ValidityTag easy_equality_property; 00071 }; 00072 00073 00074 END_NAMESPACE_PBORI 00075 00076 #endif // order_tags_h_