00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef __MMX_BAD_HPP
00014 #define __MMX_BAD_HPP
00015 #include <mblad/bap.hpp>
00016
00018 namespace mmx {
00019 #define Coordinate multivariate_coordinate<>
00020 #define Polynomial multivariate<sparse_polynomial<rational> >
00021 #define Regular_chain regular_chain<Polynomial>
00022
00023
00024 template<typename R>
00025 struct regular_chain {
00026 MMX_ALLOCATORS;
00027 pair<vector<R>, vector<generic> > rep;
00028 inline regular_chain () {}
00029 inline regular_chain (const pair<vector<R>, vector<generic> >& rep2) :
00030 rep (rep2) {}
00031 inline regular_chain (const regular_chain<R>& chain) :
00032 rep (*chain) {}
00033 inline regular_chain (const vector<R>& decision_system,
00034 const vector<generic>& attrib) :
00035 rep (decision_system, attrib) {}
00036 inline pair<vector<R>, vector<generic> > operator * () const {
00037 return rep; }
00038 };
00039
00040 WRAP_INDIRECT_IMPL(template<typename R> inline,regular_chain<R>)
00041
00042 template<typename R> syntactic
00043 flatten (const regular_chain<R>& chain) {
00044 return flatten (*chain); }
00045
00046
00047 vector<Regular_chain>
00048 bad_rosenfeld_groebner (const vector<Polynomial>& eqns,
00049 const vector<Polynomial>& ineqns,
00050 const vector<Coordinate>& indeps,
00051 const vector<Coordinate>& deps);
00052
00053 inline vector<Regular_chain>
00054 bad_rosenfeld_groebner (const vector<Polynomial>& eqns,
00055 const vector<Coordinate>& indeps,
00056 const vector<Coordinate>& deps) {
00057 return bad_rosenfeld_groebner (eqns, vec<Polynomial> (), indeps, deps); }
00058
00059 #undef Coordinate
00060 #undef Polynomial
00061 }
00062 #endif // __MMX_BAD_HPP