00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_AUTOMATA_IMPLEMENTATION_BMIG_BMIG_HANDLERS_OP_HXX
00018 # define VCSN_AUTOMATA_IMPLEMENTATION_BMIG_BMIG_HANDLERS_OP_HXX
00019
00020 # include <vaucanson/misc/contract.hh>
00021 # include <vaucanson/automata/concept/handlers.hh>
00022
00023
00024
00025 #define HOPERATOR(Op) \
00026 template<typename T, typename U> \
00027 bool operator Op (const handler<transition_h, boost::multi_index::detail::hashed_index_iterator<T, U> >& h1,\
00028 const handler<transition_h, boost::multi_index::detail::hashed_index_iterator<T, U> >& h2)\
00029 { \
00030 if (h1.value()->from_ == h2.value()->from_) \
00031 if (h1.value()->to_ == h2.value()->to_) \
00032 return h1.value()->label_ Op h2.value()->label_; \
00033 else \
00034 return h1.value()->to_ Op h2.value()->to_; \
00035 else \
00036 return h1.value()->from_ Op h2.value()->from_; \
00037 }
00038
00039 namespace vcsn
00040 {
00041 HOPERATOR(<);
00042 HOPERATOR(>);
00043 HOPERATOR(<=);
00044 HOPERATOR(>=);
00045 }
00046 #undef HOPERATOR
00047
00048 #define HOPERATOR(Op) \
00049 template<typename T, typename U> \
00050 bool operator Op (const handler<transition_h, \
00051 boost::multi_index::detail::hashed_index_iterator<T, U> >& h1,\
00052 const handler<transition_h, \
00053 boost::multi_index::detail::hashed_index_iterator<T, U> >& h2)\
00054 { \
00055 return h1.value() Op h2.value(); \
00056 }
00057 namespace vcsn
00058 {
00059 HOPERATOR(==);
00060 HOPERATOR(!=);
00061 }
00062 #undef HOPERATOR
00063
00064
00065
00066
00067 #define HOPERATOR(Op) \
00068 inline \
00069 bool operator Op (const handler<state_h, boost::shared_ptr<std::size_t> >& h1, \
00070 const handler<state_h, boost::shared_ptr<std::size_t> >& h2) \
00071 { \
00072 return h1.value() Op h2.value(); \
00073 }
00074
00075 namespace vcsn
00076 {
00077 HOPERATOR(==);
00078 HOPERATOR(!=);
00079 HOPERATOR(<);
00080
00081 inline
00082 bool operator> (const handler<state_h, boost::shared_ptr<std::size_t> >& h1,
00083 const handler<state_h, boost::shared_ptr<std::size_t> >& h2)
00084 {
00085 return h2 > h1;
00086 }
00087
00088 inline
00089 bool operator<= (const handler<state_h, boost::shared_ptr<std::size_t> >& h1,
00090 const handler<state_h, boost::shared_ptr<std::size_t> >& h2)
00091 {
00092 return h1 < h2 || h1 == h2;
00093 }
00094
00095 inline
00096 bool operator>= (const handler<state_h, boost::shared_ptr<std::size_t> >& h1,
00097 const handler<state_h, boost::shared_ptr<std::size_t> >& h2)
00098 {
00099 return !(h1 < h2);
00100 }
00101 }
00102 #undef HOPERATOR
00103
00104 #endif // ! VCSN_AUTOMATA_IMPLEMENTATION_BMIG_BMIG_HANDLERS_OP_HXX
00105