00001
00002
00003
00004
00005
00006
00007
00008 #ifndef SYNAPS_MPOL_LEX_H
00009 #define SYNAPS_MPOL_LEX_H
00010
00011 #include <synaps/init.h>
00012
00013 __BEGIN_NAMESPACE_SYNAPS
00014
00018 struct Lex
00019 {
00020 template <class M>
00021 static bool less (const M &, const M &);
00022 template <class M>
00023 bool operator() (const M & m1, const M & m2) const {return less(m1,m2);}
00024 };
00025
00026 template <class M>
00027 inline bool Lex::less(const M & m1, const M & m2)
00028 {
00029 int n1 = m1.nvars(), n2 =m2.nvars();
00030 int i = 0;
00031
00032 if(std::max(n1,n2)<0)
00033 return false;
00034 else
00035 {
00036 while(m1[i] == m2[i] && i< n1+1&& i<n2+1) i++;
00037 if(i==n2+1)
00038 return false;
00039 else if(i==n1+1)
00040 return true;
00041 else
00042 return (m1[i]< m2[i]);
00043 }
00044 }
00045
00046 __END_NAMESPACE_SYNAPS
00047 #endif // SYNAPS_MPOL_LEX_H
00048