APRONXX 0.9.12
/builddir/build/BUILD/apron-0.9.13/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 & 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