00001
00002
00014
00015
00016 #ifndef polybori_groebner_PairLS_h_
00017 #define polybori_groebner_PairLS_h_
00018
00019
00020 #include "groebner_defs.h"
00021 #include <boost/shared_ptr.hpp>
00022
00023 BEGIN_NAMESPACE_PBORIGB
00024
00025 typedef boost::shared_ptr<PairData> pair_data_ptr;
00026
00027 enum {
00028 VARIABLE_PAIR,
00029 IJ_PAIR,
00030 DELAYED_PAIR
00031 };
00032
00033
00034
00039 class PairLS{
00040 private:
00041 int type;
00042 public:
00043 int getType() const{
00044 return type;
00045 }
00046 wlen_type wlen;
00047 deg_type sugar;
00048
00049
00050 pair_data_ptr data;
00051 Monomial lm;
00052 Polynomial extract(const PolyEntryVector& v){
00053 return data->extract(v);
00054 }
00055 PairLS(int i, int j, const PolyEntryVector &v):
00056 wlen(v[i].weightedLength+v[j].weightedLength-2),
00057 data(new IJPairData(i,j)),
00058 lm(v[i].lead*v[j].lead)
00059 {
00060 type=IJ_PAIR;
00061 sugar=lm.deg()+std::max(v[i].ecart(),v[j].ecart());
00062 }
00063 PairLS(int i, idx_type v, const PolyEntryVector &gen,int type):
00064
00065 wlen(gen[i].weightedLength+gen[i].length),
00066 sugar(gen[i].deg+1),
00067 data(new VariablePairData(i,v)), lm(gen[i].lead) {
00068 PBORI_ASSERT(type==VARIABLE_PAIR);
00069 this->type=type;
00070 }
00071
00072 PairLS(const Polynomial& delayed):
00073 type(DELAYED_PAIR), wlen(delayed.eliminationLength()),
00074 sugar(delayed.deg()),
00075 data(new PolyPairData(delayed)),
00076 lm(delayed.lead()) { }
00077
00078 };
00079
00080 END_NAMESPACE_PBORIGB
00081
00082 #endif