Developer documentation

tensor_monomials.hpp
Go to the documentation of this file.
1 #ifndef realroot_tensor_monomial_hpp
2 #define realroot_tensor_monomial_hpp
3 
4 #include <vector>
5 #include <iterator>
9 #include <realroot/binomials.hpp>
10 
11 namespace mmx {
12 
14 namespace tensor
15 {
16 
17  template<class C>
18  struct monomials
19  {
20  typedef C coeff_t;
21  typedef std::vector<C> vector_type;
22  //typedef vectdse<C> vector_type;
23  typedef C * iterator;
24  // typedef typename vector_type::const_iterator const_iterator;
25  typedef const C * const_iterator;
26  typedef std::reverse_iterator<iterator> reverse_iterator;
27  typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
28  typedef typename vector_type::size_type size_type;
29  typedef coeff_t value_type;
32  vector_type data;
33  // shared_object<monomials_rep<C> > data;
34  // monomials_rep<C> & rep() { return (*data);}
35  // const monomials_rep<C> & rep() const { return (*data);}
36  monomials();
37  monomials( const C& x);
38  monomials( const C& c, int d, unsigned v);
39  monomials( int v, int d);
40  template<class X, class O>
41  monomials( const sparse::monomial_seq<X,O>& );
42  monomials( const eenv & e);
43  monomials( const eenv& e, const C& c );
44  monomials( int nvr, const int * szs, const int * vrs = 0 );
45 
46  void resize(int l) {};
47  C * begin() { return &(data[0]); };
48  C * end () { return &(data[0])+esz(); };
49 
50  const_iterator begin() const { return &(data[0]); };
51  const_iterator end() const { return &(data[esz()]); };
52 
53  reverse_iterator
54  rbegin() {
55  return reverse_iterator(&(data[0])+esz());
56  }
57  const_reverse_iterator
58  rbegin() const {
59  return const_reverse_iterator(&(data[0])+esz());
60  }
61  reverse_iterator
62  rend() {
63  return reverse_iterator(&(data[0]));
64  }
65  const_reverse_iterator
66  rend() const {
67  return const_reverse_iterator(&(data[0]));
68  }
69 
70 
71  int esz() const { return env.sz(); };
72  int size() const { return env.sz(); };
73  int nbvar() const { return env.nvr(); };
74  int nvr() const { return env.nvr(); };
75  int * szs() { return env.szs(); };
76  int * vrs() { return env.vrs(); };
77  int * str() { return env.str(); };
78  const int * szs() const { return env.szs(); };
79  const int * vrs() const { return env.vrs(); };
80  const int * str() const { return env.str(); };
81 
82  const C & operator[]( int i ) const { return data[i]; };
83  C & operator[]( int i ) { return data[i]; };
84  bool hasvar( int& lv, int gv ) const;
85  bool operator==( const C& c ) const {
86  return esz() == 1 && data[0] == c; }
87  bool operator==( const monomials& mpl ) const ;
88  void swap( monomials<C>& a ) { std::swap(env,a.env); data.swap(a.data); };
89  // Return coefficient of x^deg
90  const C entry(std::vector<int> deg);
91  };
92 
93 };
94 
95 
96 } //namespace mmx
97 
99 
100 
101 //======================================================================
102 namespace mmx {
103 # define Polynomial tensor::monomials<C>
104 # define TMPL template<class C>
105 
106 template<class A, class B> struct use;
107 struct operators_of;
108 
109 TMPL struct use<operators_of,Polynomial> {
110 
111  static inline void
112  add (Polynomial &r, const Polynomial &a ) {
113  tensor::add (r, a);
114  }
115  static inline void
116  add (Polynomial &r, const Polynomial &a, const Polynomial &b) {
117  tensor::add (r, a, b);
118  }
119  static inline void
120  add (Polynomial &r, const Polynomial &a, const C & b) {
121  tensor::add (r, a, b);
122  }
123  static inline void
124  add (Polynomial &r, const C & a, const Polynomial &b) {
125  tensor::add (r, b, a);
126  }
127  static inline void
128  sub (Polynomial &r, const Polynomial &a ) {
129  tensor::sub (r, a );
130  }
131  static inline void
132  sub (Polynomial &r, const Polynomial &a, const Polynomial &b) {
133  tensor::sub (r, a, b);
134  }
135  static inline void
136  sub (Polynomial &r, const C & a, const Polynomial &b) {
137  tensor::sub (r, a, b);
138  }
139  static inline void
140  sub (Polynomial &r, const Polynomial &a, const C & b) {
141  tensor::sub (r, a, b);
142  }
143  static inline void
144  mul (Polynomial &r, const Polynomial &a ) {
145  tensor::mul (r, a );
146  }
147  static inline void
148  mul (Polynomial &r, const Polynomial &a, const Polynomial &b) {
149  tensor::mul (r, a, b);
150 }
151  static inline void
152  mul (Polynomial &r, const Polynomial &a, const C & b) {
153  tensor::mul (r, a, b); }
154  static inline void
155  mul (Polynomial &r, const C & a, const Polynomial &b) {
156  tensor::mul (r, b, a);
157  }
158  static inline void
159  div (Polynomial &r, const Polynomial &a, const Polynomial &b) {
160  tensor::div (r, a, b);
161  }
162  static inline void
163  div (Polynomial &r, const Polynomial &a, const C & b) {
164  tensor::div (r, a, b);
165  }
166 // static inline void
167 // rem (Polynomial &r, const Polynomial &a, const Polynomial &b) {
168 // tensor::rem (r, b, a);
169 // }
170 };
171 # undef Polynomial
172 # undef TMPL
173 //====================================================================
174 } //namespace mmx
175 #endif /* realroot_tensor_monomial_hpp */
int * str()
Definition: tensor_monomials.hpp:77
#define TMPL
Definition: tensor_monomials.hpp:104
const C & b
Definition: Interval_glue.hpp:25
const_iterator begin() const
Definition: tensor_monomials.hpp:50
const C * const_iterator
Definition: tensor_monomials.hpp:25
reverse_iterator rend()
Definition: tensor_monomials.hpp:62
void add(bernstein< C > &mpl, const C &c)
Definition: tensor_bernstein_fcts.hpp:53
void swap(monomials< C > &a)
Definition: tensor_monomials.hpp:88
int * szs()
Definition: tensor_eenv_fcts.hpp:12
MP swap(const MP &P, int var_i, int var_j)
Definition: sparse_monomials.hpp:988
static void sub(Polynomial &r, const Polynomial &a, const C &b)
Definition: tensor_monomials.hpp:140
void mul(bernstein< C > &r, const bernstein< C > &a, const bernstein< C > &b)
Definition: tensor_bernstein_fcts.hpp:142
reverse_iterator rbegin()
Definition: tensor_monomials.hpp:54
static void add(Polynomial &r, const C &a, const Polynomial &b)
Definition: tensor_monomials.hpp:124
const int * str() const
Definition: tensor_monomials.hpp:80
bool hasvar(int &lv, int gv) const
int size() const
Definition: tensor_monomials.hpp:72
static void mul(Polynomial &r, const C &a, const Polynomial &b)
Definition: tensor_monomials.hpp:155
int * vrs()
Definition: tensor_eenv_fcts.hpp:18
const C & operator[](int i) const
Definition: tensor_monomials.hpp:82
const_reverse_iterator rend() const
Definition: tensor_monomials.hpp:66
C coeff_t
Definition: tensor_monomials.hpp:20
static void sub(Polynomial &r, const Polynomial &a, const Polynomial &b)
Definition: tensor_monomials.hpp:132
static void sub(Polynomial &r, const Polynomial &a)
Definition: tensor_monomials.hpp:128
int * str()
Definition: tensor_eenv_fcts.hpp:21
Definition: tensor_eenv.hpp:9
static void sub(Polynomial &r, const C &a, const Polynomial &b)
Definition: tensor_monomials.hpp:136
int * vrs()
Definition: tensor_monomials.hpp:76
static binomials< C > binoms
Definition: tensor_monomials.hpp:30
static void div(Polynomial &r, const Polynomial &a, const C &b)
Definition: tensor_monomials.hpp:163
bool operator==(const C &c) const
Definition: tensor_monomials.hpp:85
C * iterator
Definition: tensor_monomials.hpp:23
const_reverse_iterator rbegin() const
Definition: tensor_monomials.hpp:58
polynomial< COEFF, with< MonomialTensor > > Polynomial
Definition: solver_mv_cf.cpp:23
void sub(bernstein< C > &r, const bernstein< C > &a)
Definition: tensor_bernstein_fcts.hpp:105
vector_type data
Definition: tensor_monomials.hpp:32
C * begin()
Definition: tensor_monomials.hpp:47
C & operator[](int i)
Definition: tensor_monomials.hpp:83
int nvr() const
number of variables
Definition: tensor_eenv_fcts.hpp:9
int nbvar() const
Definition: tensor_monomials.hpp:73
static void add(Polynomial &r, const Polynomial &a, const C &b)
Definition: tensor_monomials.hpp:120
C * end()
Definition: tensor_monomials.hpp:48
std::vector< C > vector_type
Definition: tensor_monomials.hpp:21
coeff_t value_type
Definition: tensor_monomials.hpp:29
const int * vrs() const
Definition: tensor_monomials.hpp:79
monomials()
Definition: tensor_monomials_fcts.hpp:22
const C entry(std::vector< int > deg)
Definition: tensor_monomials_fcts.hpp:479
Definition: tensor_monomials.hpp:18
const_iterator end() const
Definition: tensor_monomials.hpp:51
Definition: polynomial.hpp:37
static void mul(Polynomial &r, const Polynomial &a, const C &b)
Definition: tensor_monomials.hpp:152
void resize(int l)
Definition: tensor_monomials.hpp:46
static void mul(Polynomial &r, const Polynomial &a, const Polynomial &b)
Definition: tensor_monomials.hpp:148
vector_type::size_type size_type
Definition: tensor_monomials.hpp:28
int sz() const
return the total number of coefficients of the dense representation
Definition: tensor_eenv_fcts.hpp:16
int nvr() const
Definition: tensor_monomials.hpp:74
Definition: binomials.hpp:68
int esz() const
Definition: tensor_monomials.hpp:71
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: tensor_monomials.hpp:27
int * szs()
Definition: tensor_monomials.hpp:75
static void div(Polynomial &r, const Polynomial &a, const Polynomial &b)
Definition: tensor_monomials.hpp:159
const C & c
Definition: Interval_glue.hpp:45
static void mul(Polynomial &r, const Polynomial &a)
Definition: tensor_monomials.hpp:144
const int * szs() const
Definition: tensor_monomials.hpp:78
double C
Definition: solver_mv_fatarcs.cpp:16
static void add(Polynomial &r, const Polynomial &a, const Polynomial &b)
Definition: tensor_monomials.hpp:116
void div(bernstein< C > &r, const bernstein< C > &a, const C &c)
Definition: tensor_bernstein_fcts.hpp:178
Definition: array.hpp:12
eenv env
Definition: tensor_monomials.hpp:31
static void add(Polynomial &r, const Polynomial &a)
Definition: tensor_monomials.hpp:112
std::reverse_iterator< iterator > reverse_iterator
Definition: tensor_monomials.hpp:26
Home