APRONXX 0.9.15
/home/mine/apron/apronxx/apxx_tcons1.hh
Go to the documentation of this file.
1/* -*- C++ -*-
2 * apxx_tcons1.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_TCONS1_HH
17#define __APXX_TCONS1_HH
18
19#include "ap_tcons1.h"
20#include "apxx_tcons0.hh"
21#include "apxx_texpr1.hh"
22
23
24namespace apron {
25
26
27/* ================================= */
28/* tcons1 */
29/* ================================= */
30
31
32/*! \brief Level 1 arbitrary constraint (ap_tcons1_t wrapper).
33 *
34 * Level 1 version of arbitrary constraints using expression trees.
35 * Variable names (var) are used instead of dimensions (ap_dim_t).
36 * Internally, a tcons1 wraps together a tcons0 (memory managed) and an environment (holding a
37 * reference count).
38 */
39class tcons1 : public use_malloc {
40
41protected:
42
43 ap_tcons1_t l;
44
45 //! Internal use only. Performs a shallow copy and takes ownership of the contents.
46 tcons1(ap_tcons1_t l);
47
48 friend class abstract0;
49 friend class tcons1_array;
50
51public:
52
54 /* constructors */
55 /* ============ */
56
57 /** @name Constructors */
59
66 tcons1(const environment& env, ap_constyp_t constyp=AP_CONS_SUPEQ);
67
68
69 *
70 * The extra scalar is not created (has_modulo returns false).
71 * \arg \c constyp can be \c AP_CONS_EQ, \c AP_CONS_SUPEQ, \c AP_CONS_SUP, or \c AP_CONS_DISEQ (but not \c AP_CONS_EQMOD).
72 */
73 tcons1(ap_constyp_t constyp, const texpr1::builder& t);
74
75 /*! \brief Creates a new constraint from an expression tree and a modulo scalar (both copied).
76 *
77 * \arg \c constyp can be \c AP_CONS_EQ, \c AP_CONS_SUPEQ, \c AP_CONS_SUP, \c AP_CONS_EQMOD, or \c AP_CONS_DISEQ.
78 */
79 tcons1(ap_constyp_t constyp, const texpr1::builder& t, const scalar& modulo);
80
82 tcons1(const tcons1& x);
84
87
89 tcons1(const tcons1& x, const environment& e);
90
92 tcons1(const environment& e, unsat x);
93
98 tcons1(const lincons1& x);
100
102
103 /* destructor */
104 /* ========== */
105
106 /** @name Destructor */
108
110 ~tcons1();
111
112
114 /* 'Intelligent' constructors */
115 /* ========================== */
116
119
120 //! Makes a constraint a-b >= 0.
121 friend tcons1 operator>=(const texpr1::builder& a, const texpr1::builder& b);
122
124 friend tcons1 operator<=(const texpr1::builder& a, const texpr1::builder& b);
125
126
128
130 friend tcons1 operator< (const texpr1::builder& a, const texpr1::builder& b);
131
133 friend tcons1 operator==(const texpr1::builder& a, const texpr1::builder& b);
134
136 friend tcons1 operator!=(const texpr1::builder& a, const texpr1::builder& b);
137
138 //@}
139
140 /* assignment */
141 /* ========== */
142
145
146
148
151
153
154 * Real-valued addition and multiplication operators are used (i.e., no rounding).
155 */
156 tcons1& operator= (const lincons1& x);
157
160
161 * it is created.
162 */
163 void set_modulo(const scalar& c);
164
165
167 * Does not fail as get_texpr can: if the constraint was created without an underlying expression,
168 * it is created.
169 */
170 void set_texpr(const texpr1::builder& c);
171
173
174
175 /* dimension operations */
176 /* ==================== */
177
185 void extend_environment(const environment& e);
186
188
189
190 /* access */
191 /* ====== */
192
193 /** @name Accesses */
195
196 /* get */
197
198 //! Returns the environment of the expression (with incremented reference count).
200
202 const tcons0& get_tcons0() const;
206
207
209 * \return either \c AP_CONS_EQ, \c AP_CONS_SUPEQ, \c AP_CONS_SUP, \c AP_CONS_EQMOD, or \c AP_CONS_DISEQ.
210 */
211 ap_constyp_t& get_constyp();
212
213 /*! \brief Returns a reference to the constraint type.
214 *
215 * \return either \c AP_CONS_EQ, \c AP_CONS_SUPEQ, \c AP_CONS_SUP, \c AP_CONS_EQMOD, or \c AP_CONS_DISEQ.
216 */
217 const ap_constyp_t& get_constyp() const;
220 bool has_modulo() const;
221
222
223 bool has_texpr() const;
224
227
228 */
230
233
234 */
235 const scalar& get_modulo() const;
236
239
245
246 */
248
250
251
252 /* print */
253 /* ===== */
254
263 friend std::ostream& operator<< (std::ostream& os, const tcons1& s);
264
266 void print(FILE* stream=stdout) const;
267
269
270 /* tests */
271 /* ===== */
272
274
275
279 */
280 bool is_interval_cst() const;
281
283
284 * \throw std::invalid_argument if no valid expression tree has been defined.
285 */
286 bool is_interval_linear() const;
287
288
290 * \throw std::invalid_argument if no valid expression tree has been defined.
291 */
292 bool is_interval_polynomial() const;
293
294 /*! \brief Whether the expression is a polynomial fraction and there is no rounding.
295 *
296 * \throw std::invalid_argument if no valid expression tree has been defined.
297 */
298 bool is_interval_polyfrac() const;
303
304 bool is_scalar() const;
305
307
309 /* C-level compatibility */
310 /* ===================== */
311
312
313 //@{
314
316 const ap_tcons1_t* get_ap_tcons1_t() const;
317
319 ap_tcons1_t* get_ap_tcons1_t();
320
322
323};
324
325
326
327/* ================================= */
328/* tcons1_array */
329/* ================================= */
330
333
334 * A tcons1_array represents an array of constraints on arbitrary expressions.
335 * An constraints share the same environment.
336 */
337class tcons1_array : public use_malloc {
338
339protected:
340
341 ap_tcons1_array_t a;
344 tcons1_array(ap_tcons1_array_t& a);
345
346 friend class abstract0;
347 friend class abstract1;
348
349public:
350
351 /* constructors */
352 /* ============ */
353
355 //@{
356
360 tcons1_array(const environment& e, const tcons0_array& x);
361
363
364 * has_modulo and has_texpr will return false on all elements of the array.
365 */
366 tcons1_array(const environment& e, size_t size);
367
369 tcons1_array(const tcons1_array& x);
370
372
373 * \throw std::invalid_argument if e is not a super-environment of that of x.
374 */
375 tcons1_array(const tcons1_array& x, const environment& e);
376
377
382
383 tcons1_array(size_t size, const tcons1 x[]);
384
387 * \warning assumes that all constraints have the same environment (unchecked).
388 * \throw std::invalid_argument if vector size<1.
389 */
390 tcons1_array(const std::vector<tcons1>& x);
391
393
394
395 /* destructor */
396 /* ========== */
397
400
403
405
406
407 /* assignment */
408 /* ========== */
409
412
415
418
419 * \arg x should contain (at least) size elements.
420 */
421 tcons1_array& operator= (const tcons1 x[]);
422
427 tcons1_array& operator= (const std::vector<tcons1>& x);
428
430
431
432 /* dimension operations */
433 /* ==================== */
434
435
437
439 void resize(size_t size);
444
446
448
449
450 /* access */
451 /* ====== */
452
455
457 size_t size() const;
458
461
462 //! Returns a reference to the underlying tcons0_array.
463 const tcons0_array& get_tcons0_array() const;
464
471
472 tcons1 get(size_t i) const;
473
476
477 * \throw std::out_of_range if i exceeds the dimension of the array.
478 */
479 void set(size_t i, const tcons1& x);
480
482
483
484 /* conversion */
485 /* ========== */
486
489
491 operator std::vector<tcons1>() const;
492
494
495
496 /* print */
497 /* ===== */
498
501
507 friend std::ostream& operator<< (std::ostream& os, const tcons1_array& s);
508
510 void print(FILE* stream=stdout) const;
511
514
515 /* C-level compatibility */
516 /* ===================== */
517
520
521
522 const ap_tcons1_array_t* get_ap_tcons1_array_t() const;
523
525 ap_tcons1_array_t* get_ap_tcons1_array_t();
526
528
529};
530
532
533}
534
535#endif /* __APXX_TCONS1_HH */
Level 1 environment (ap_environment_t wrapper).
Definition apxx_environment.hh:51
Level 1 linear constraint (ap_lincons1_t wrapper).
Definition apxx_lincons1.hh:40
Scalar (ap_scalar_t wrapper).
Definition apxx_scalar.hh:89
Array of arbitrary constraints (ap_tcons0_array_t wrapper).
Definition apxx_tcons0.hh:350
Level 0 arbitrary constraint (ap_tcons0_t wrapper).
Definition apxx_tcons0.hh:47
tcons1_array(ap_tcons1_array_t &a)
Internal use only. Performs a shallow copy and takes ownership of the contents.
Definition apxx_tcons1.hh:331
ap_tcons1_array_t a
Structure managed by APRON.
Definition apxx_tcons1.hh:341
friend class abstract0
Definition apxx_tcons1.hh:346
environment get_environment() const
Returns the environment shared by all constraints (with incremented reference count).
Definition apxx_tcons1.hh:462
tcons1_array & operator=(const tcons1_array &x)
(Deep) copy.
Definition apxx_tcons1.hh:396
size_t size() const
Returns the size of the array.
Definition apxx_tcons1.hh:457
friend std::ostream & operator<<(std::ostream &os, const tcons1_array &s)
Printing.
Definition apxx_tcons1.hh:513
void set(size_t i, const tcons1 &x)
Changes the constraint at index i.
Definition apxx_tcons1.hh:485
const tcons0_array & get_tcons0_array() const
Returns a reference to the underlying tcons0_array.
Definition apxx_tcons1.hh:467
friend class abstract1
Definition apxx_tcons1.hh:347
~tcons1_array()
Frees the space used by the array and all its constraints.
Definition apxx_tcons1.hh:387
void resize(size_t size)
Resizes the array.
Definition apxx_tcons1.hh:440
const ap_tcons1_array_t * get_ap_tcons1_array_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_tcons1.hh:531
tcons1 get(size_t i) const
Returns a copy of the constraint at index i.
Definition apxx_tcons1.hh:477
void extend_environment(const environment &e)
Extends the environment of all expressions in array.
Definition apxx_tcons1.hh:445
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition apxx_tcons1.hh:522
Level 1 arbitrary constraint (ap_tcons1_t wrapper).
Definition apxx_tcons1.hh:39
friend tcons1 operator!=(const texpr1::builder &a, const texpr1::builder &b)
Makes a constraint a-b != 0.
Definition apxx_tcons1.hh:127
bool has_modulo() const
Returns whether the constraint has a valid extra scalar (used in modulo constraints).
Definition apxx_tcons1.hh:218
bool has_texpr() const
Whether the constraint contains a valid expression tree.
Definition apxx_tcons1.hh:223
friend tcons1 operator>(const texpr1::builder &a, const texpr1::builder &b)
Makes a constraint a-b > 0.
Definition apxx_tcons1.hh:106
texpr1::iterator get_texpr()
Returns an iterator to the root of the underlying expression tree.
Definition apxx_tcons1.hh:240
friend class abstract0
Definition apxx_tcons1.hh:48
bool is_interval_cst() const
Whether the expression is constant (i.e., has no dimension leaves).
Definition apxx_tcons1.hh:279
friend tcons1 operator>=(const texpr1::builder &a, const texpr1::builder &b)
Makes a constraint a-b >= 0.
Definition apxx_tcons1.hh:92
friend std::ostream & operator<<(std::ostream &os, const tcons1 &s)
Printing.
Definition apxx_tcons1.hh:257
ap_constyp_t & get_constyp()
Returns a (modifiable) reference to the constraint type.
Definition apxx_tcons1.hh:208
void set_texpr(const texpr1::builder &c)
Sets the underlying expression tree to c (copied).
Definition apxx_tcons1.hh:166
texpr1::const_iterator get_texpr() const
Returns a const_iterator to the root of the underlying expression tree.
Definition apxx_tcons1.hh:246
ap_tcons1_t * get_ap_tcons1_t()
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_tcons1.hh:313
~tcons1()
Frees the constraint, including the embedded expression tree and optional modulo scalar.
Definition apxx_tcons1.hh:83
bool is_interval_polynomial() const
Whether the expression is polynomial and there is no rounding.
Definition apxx_tcons1.hh:289
ap_tcons1_t l
Structure managed by APRON.
Definition apxx_tcons1.hh:43
bool is_interval_linear() const
Whether the expression is linear and there is no rounding.
Definition apxx_tcons1.hh:284
void set_modulo(const scalar &c)
Sets the extra scalar modulo to c (copied).
Definition apxx_tcons1.hh:161
tcons1(ap_tcons1_t l)
Internal use only. Performs a shallow copy and takes ownership of the contents.
Definition apxx_tcons1.hh:29
tcons1 & operator=(const tcons1 &x)
(Deep) copy.
Definition apxx_tcons1.hh:138
void extend_environment(const environment &e)
Extends the environment of the expression.
Definition apxx_tcons1.hh:180
const ap_constyp_t & get_constyp() const
Returns a reference to the constraint type.
Definition apxx_tcons1.hh:213
friend tcons1 operator<(const texpr1::builder &a, const texpr1::builder &b)
Makes a constraint b-a > 0.
Definition apxx_tcons1.hh:113
friend tcons1 operator<=(const texpr1::builder &a, const texpr1::builder &b)
Makes a constraint b-a >= 0.
Definition apxx_tcons1.hh:99
environment get_environment() const
Returns the environment of the expression (with incremented reference count).
Definition apxx_tcons1.hh:193
scalar & get_modulo()
Returns a (modifiable) reference to the extra scalar.
Definition apxx_tcons1.hh:228
bool is_interval_polyfrac() const
Whether the expression is a polynomial fraction and there is no rounding.
Definition apxx_tcons1.hh:294
const scalar & get_modulo() const
Returns a reference to the extra scalar.
Definition apxx_tcons1.hh:234
friend class tcons1_array
Definition apxx_tcons1.hh:49
friend tcons1 operator==(const texpr1::builder &a, const texpr1::builder &b)
Makes a constraint a-b == 0.
Definition apxx_tcons1.hh:120
bool is_scalar() const
Whether all occurring constants are scalar.
Definition apxx_tcons1.hh:299
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition apxx_tcons1.hh:270
const ap_tcons1_t * get_ap_tcons1_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition apxx_tcons1.hh:308
const tcons0 & get_tcons0() const
Returns a reference to the underlying tcons0.
Definition apxx_tcons1.hh:198
tcons0 & get_tcons0()
Returns a (modifiable) reference to the underlying tcons0.
Definition apxx_tcons1.hh:203
Temporary expression nodes used when constructing a texpr1.
Definition apxx_texpr1.hh:561
Iterators to traverse a constant expression tree.
Definition apxx_texpr1.hh:183
Iterators to traverse and mutate an expression tree.
Definition apxx_texpr1.hh:386
Definition apxx_abstract0.hh:27
Unsatisfiable constraint, to simplify initialisations and assignments.
Definition apxx_lincons0.hh:28
Inherited by most wrappers to map new and delete to malloc and free.
Definition apxx_scalar.hh:69