APRONXX 0.9.14
/builddir/build/BUILD/apron-0.9.15-build/apron-0.9.15/apronxx/apxx_linexpr1.hh
Go to the documentation of this file.
1/* -*- C++ -*-
2 * apxx_linexpr1.hh
3 *
4 * APRON Library / C++ class wrappers
5 *
6 * Copyright (C) Antoine Mine' 2007
7 *
8 */
9/* This file is part of the APRON Library, released under LGPL license
10 with an exception allowing the redistribution of statically linked
11 executables.
12
13 Please read the COPYING file packaged in the distribution.
14*/
15
16#ifndef __APXX_LINEXPR1_HH
17#define __APXX_LINEXPR1_HH
18
19#include "ap_linexpr1.h"
20#include "apxx_environment.hh"
21#include "apxx_linexpr0.hh"
22
23
24namespace apron {
25
26
27/* ================================= */
28/* linexpr1 */
29/* ================================= */
30
31
39class linexpr1 : public use_malloc {
40
41protected:
42
43 ap_linexpr1_t l;
44
46 linexpr1(ap_linexpr1_t& p);
47
48
49public:
50
51
52 /* constructors */
53 /* ============ */
54
57
61 linexpr1(const environment& e, const linexpr0& x);
62
71 linexpr1(const environment& e, ap_linexpr_discr_t lin_discr=AP_LINEXPR_SPARSE, size_t size=0);
72
74 linexpr1(const linexpr1& x);
75
80 linexpr1(const linexpr1& x, const environment& e);
81
83
84
85 /* destructor */
86 /* ========== */
87
90
94 ~linexpr1();
95
97
98
99 /* assignment */
100 /* ========== */
101
104
106 linexpr1& operator= (const linexpr1& x);
107
109
110
111 /* dimension operations */
112 /* ==================== */
113
116
121 void extend_environment(const environment& e);
122
124
125
126 /* access */
127 /* ====== */
128
131
134
136 const linexpr0& get_linexpr0() const;
137
140
142 size_t size() const;
143
148 ap_linexpr_discr_t get_discr() const;
149
151 coeff& get_cst();
152
154 const coeff& get_cst() const;
155
160 coeff& operator[](const var& v);
161
166 const coeff& operator[](const var& v) const;
167
169
170
171 /* print */
172 /* ===== */
173
176
178 friend std::ostream& operator<< (std::ostream& os, const linexpr1& s);
179
181 void print(FILE* stream=stdout) const;
182
184
185
186 /* tests */
187 /* ===== */
188
191
193 bool is_integer() const;
194
196 bool is_real() const;
197
204 ap_linexpr_type_t get_type() const;
205
207 bool is_linear() const;
208
210 bool is_quasilinear() const;
211
212
213 // TODO: equal, compare (currently not in ap_linexpr1.h) ???
214
215
217
218 /* iterators */
219 /* ========= */
220
223
236
237 /* TODO:
238 - reverse traversal (operator--).
239 */
240
241 friend class linexpr1;
242
243 protected:
244
245 ap_linexpr1_t* l;
246 ap_dim_t pos;
247
249 void skip_AP_DIM_MAX();
250
252 const_iterator(ap_linexpr1_t* l);
253
254 public:
255
257 const_iterator(const linexpr1& e);
258
261
264
269 const var& get_var() const;
270
275 ap_dim_t get_dim() const;
276
281 const coeff& get_coeff() const;
282
284 void next();
285
290 void operator++();
291
293 bool valid() const;
294
295 };
296
306 class iterator : public const_iterator {
307
308 /* TODO:
309 - removing/inserting coefficients at iterator position for sparse expressions.
310 */
311
312 protected:
313
314 friend class linexpr1;
315
317 iterator(ap_linexpr1_t* l);
318
319 public:
320
322 iterator(linexpr1& e);
323
325 iterator(const iterator& i);
326
328 iterator& operator=(const iterator& i);
329
334 coeff& get_coeff() const;
335
336 };
337
339 iterator begin();
340
342 const_iterator begin() const;
343
345
346
347 /* other operators */
348 /* =============== */
349
352
357 void minimize();
358
360
361
362 /* TODO: evaluation, linearization, intelligent constructors */
363
364
365 /* C-level compatibility */
366 /* ===================== */
367
370
372 const ap_linexpr1_t* get_ap_linexpr1_t() const;
373
375 ap_linexpr1_t* get_ap_linexpr1_t();
376
378
379};
380
382
383}
384
385#endif /* __APXX_LINEXPR1_HH */
Coefficient (ap_coeff_t wrapper).
Definition apxx_coeff.hh:36
Level 1 environment (ap_environment_t wrapper).
Definition apxx_environment.hh:51
Level 0 linear expression (ap_linexpr0_t wrapper).
Definition apxx_linexpr0.hh:44
Iterator to traverse a constant linexpr1.
Definition apxx_linexpr1.hh:235
ap_linexpr1_t * l
Internal use only. Pointer to the underlying APRON structure.
Definition apxx_linexpr1.hh:245
bool valid() const
Whether we are at a valid position (true) or past the last iterator position (false).
Definition apxx_linexpr1_inline.hh:293
void next()
Moves the iterator to the following position.
Definition apxx_linexpr1_inline.hh:282
const_iterator(ap_linexpr1_t *l)
Internal use only.
const coeff & get_coeff() const
Returns a reference to the coefficient at the current iterator position.
Definition apxx_linexpr1_inline.hh:268
void operator++()
Moves the iterator to the following position.
Definition apxx_linexpr1_inline.hh:288
const var & get_var() const
Returns the variable name of the coefficient at the current iterator position.
Definition apxx_linexpr1_inline.hh:259
ap_dim_t pos
Internal use only. Current index.
Definition apxx_linexpr1.hh:246
const_iterator & operator=(const const_iterator &i)
Assigns the iterator.
Definition apxx_linexpr1_inline.hh:238
void skip_AP_DIM_MAX()
Internal use only. Skips free coefficients in sparse expressions.
Definition apxx_linexpr1_inline.hh:202
ap_dim_t get_dim() const
Returns the dimension of the coefficient at the current iterator position.
Definition apxx_linexpr1_inline.hh:252
Iterator to traverse and mutate a linear expression.
Definition apxx_linexpr1.hh:306
iterator(ap_linexpr1_t *l)
Internal use only.
coeff & get_coeff() const
Returns a (modifiable) reference to the coefficient at the current iterator position.
Definition apxx_linexpr1_inline.hh:275
iterator & operator=(const iterator &i)
Assigns the iterator.
Definition apxx_linexpr1_inline.hh:245
Level 1 linear expression (ap_linexpr1_t wrapper).
Definition apxx_linexpr1.hh:39
coeff & get_cst()
Returns a (modifiable) reference to the constant coefficient.
Definition apxx_linexpr1_inline.hh:122
iterator begin()
Returns a new iterator to traverse and mutate the linear expression.
Definition apxx_linexpr1_inline.hh:303
void minimize()
Minimizes all coefficients.
Definition apxx_linexpr1_inline.hh:312
ap_linexpr_discr_t get_discr() const
Returns the type of underlying linexpr0.
Definition apxx_linexpr1_inline.hh:117
~linexpr1()
Frees all space for the expression and coefficients, and decrements the reference count of the enviro...
Definition apxx_linexpr1_inline.hh:63
void extend_environment(const environment &e)
Extends the environment of the expression.
Definition apxx_linexpr1_inline.hh:84
const coeff & operator[](const var &v) const
Returns a reference to the coefficient corresponding to the given variable name.
friend std::ostream & operator<<(std::ostream &os, const linexpr1 &s)
Printing.
const linexpr0 & get_linexpr0() const
Returns a reference to the underlying linexpr0.
Definition apxx_linexpr1_inline.hh:102
bool is_linear() const
Whether all coefficients are scalar.
Definition apxx_linexpr1_inline.hh:188
const ap_linexpr1_t * get_ap_linexpr1_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_linexpr1_inline.hh:321
environment get_environment() const
Returns the environment of the expression (with incremented reference count).
Definition apxx_linexpr1_inline.hh:97
bool is_quasilinear() const
Whether all coefficients are scalar, except maybe the constant one.
Definition apxx_linexpr1_inline.hh:193
bool is_integer() const
Whether the expression only depends on integer variables.
Definition apxx_linexpr1_inline.hh:173
ap_linexpr1_t l
Structure managed by APRON.
Definition apxx_linexpr1.hh:43
linexpr1(ap_linexpr1_t &p)
Internal use only. Shallow copy (no copy of linexpr0 or environment).
Definition apxx_linexpr1_inline.hh:28
linexpr1 & operator=(const linexpr1 &x)
Makes a (deep) copy.
Definition apxx_linexpr1_inline.hh:72
size_t size() const
Returns the number of coefficients in the expression.
Definition apxx_linexpr1_inline.hh:112
coeff & operator[](const var &v)
Returns a (modifiable) reference to the coefficient corresponding to the given variable name.
ap_linexpr_type_t get_type() const
Gets the type of the linear expression.
Definition apxx_linexpr1_inline.hh:183
bool is_real() const
Whether the expression only depends on real variables.
Definition apxx_linexpr1_inline.hh:178
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition apxx_linexpr1_inline.hh:164
Variable name (ap_var_t wrapper).
Definition apxx_var.hh:39
Definition apxx_abstract0.hh:27
Inherited by most wrappers to map new and delete to malloc and free.
Definition apxx_scalar.hh:69