APRONXX  0.9.12
/builddir/build/BUILD/apron-0.9.13/apronxx/apxx_dimension.hh
Go to the documentation of this file.
1 /* -*- C++ -*-
2  * apxx_dimension.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_DIMENSION_HH
17 #define __APXX_DIMENSION_HH
18 
19 #include "ap_dimension.h"
20 
21 
22 namespace apron {
23 
24 
25 /* ================================= */
26 /* varname */
27 /* ================================= */
28 
43 class varname {
44 
45 protected:
46 
48  static const int xindex;
49 
51  const std::vector<std::string>& names;
52 
53 public:
54 
67  varname(const std::vector<std::string>& names);
68 
70  template<class charT, class Traits>
71  friend
72  std::basic_ostream<charT,Traits>&
73  operator<<(std::basic_ostream<charT,Traits>& os, const varname& v);
74 
80  template<class charT, class Traits>
81  friend
82  std::vector<std::string>* get_varname(std::basic_ostream<charT,Traits>& os);
83 
84 };
85 
86 
87 
88 
89 /* ================================= */
90 /* dimchange */
91 /* ================================= */
92 
93 
102 class dimchange : public use_malloc {
103 
104 protected:
105 
106  ap_dimchange_t c;
107 
108 public:
109 
110  /* constructor */
111  /* =========== */
112 
115 
117  dimchange(size_t intdim=0, size_t realdim=0);
118 
123  dimchange(size_t intdim, size_t realdim, const ap_dim_t d[]);
124 
129  dimchange(size_t intdim, size_t realdim, const std::vector<ap_dim_t>& d);
130 
135  dimchange(const dimchange& x, bool inv=false);
136 
138 
139 
140  /* destructor */
141  /* ========== */
142 
145 
146  ~dimchange();
147 
149 
150 
151  /* assignment */
152  /* ========== */
153 
156 
158  dimchange& operator= (const dimchange& x);
159 
164  dimchange& operator= (const ap_dim_t d[]);
165 
170  dimchange& operator= (const std::vector<ap_dim_t>& d);
171 
173 
174 
175  /* access */
176  /* ====== */
177 
180 
182  size_t get_intdim() const;
183 
185  size_t get_realdim() const;
186 
191  ap_dim_t& operator[](size_t dim);
192 
197  const ap_dim_t& operator[](size_t dim) const;
198 
203  ap_dim_t& get(size_t dim);
204 
209  const ap_dim_t& get(size_t dim) const;
210 
212 
213 
214  /* print */
215  /* ===== */
216 
219 
224  friend std::ostream& operator<< (std::ostream& os, const dimchange& s);
225 
227  void print(FILE* stream=stdout) const;
228 
230 
231 
232 
233  /* other operators */
234  /* =============== */
235 
238 
244  void add_invert();
245 
250  dimchange operator- () const;
251 
253 
254 
255  /* C-level compatibility */
256  /* ===================== */
257 
260 
262  const ap_dimchange_t* get_ap_dimchange_t() const;
263 
265  ap_dimchange_t* get_ap_dimchange_t();
266 
268 };
269 
270 
271 
273 struct id {
274  size_t size;
275 
276  id(size_t size) : size(size) {}
277 };
278 
279 
280 
281 /* ================================= */
282 /* dimperm */
283 /* ================================= */
284 
285 
292 class dimperm : public use_malloc {
293 
294 protected:
295 
296  ap_dimperm_t c;
297 
298 public:
299 
300 
301  /* constructor */
302  /* =========== */
303 
306 
308  dimperm(size_t size=0);
309 
314  dimperm(size_t size, const ap_dim_t d[]);
315 
317  dimperm(const std::vector<ap_dim_t>& d);
318 
319 
321  dimperm(id t);
322 
327  dimperm(const dimperm& x, bool inv=false);
328 
330  dimperm(const dimperm& x, const dimperm& y);
331 
333 
334 
335  /* destructor */
336  /* ========== */
337 
340 
341  ~dimperm();
342 
344 
345 
346  /* assignment */
347  /* ========== */
348 
351 
353  dimperm& operator= (const dimperm& x);
354 
356  dimperm& operator= (id t);
357 
362  dimperm& operator= (const ap_dim_t d[]);
363 
365  dimperm& operator= (const std::vector<ap_dim_t>& d);
366 
368 
369 
370  /* access */
371  /* ====== */
372 
375 
377  size_t size() const;
378 
383  ap_dim_t& operator[](size_t dim);
384 
389  const ap_dim_t& operator[](size_t dim) const;
390 
395  ap_dim_t& get(size_t dim);
396 
401  const ap_dim_t& get(size_t dim) const;
402 
404 
405 
406  /* print */
407  /* ===== */
408 
411 
416  friend std::ostream& operator<< (std::ostream& os, const dimperm& s);
417 
419  void print(FILE* stream=stdout) const;
420 
422 
423 
424  /* other operators */
425  /* =============== */
426 
429 
430  /* composition */
431 
436  dimperm& operator*= (const dimperm& y);
437 
442  friend dimperm operator* (const dimperm& x, const dimperm& y);
443 
444 
445 
446  /* inversion */
447 
449  void invert();
450 
452  dimperm operator- () const;
453 
455 
456 
457  /* C-level compatibility */
458  /* ===================== */
459 
462 
464  const ap_dimperm_t* get_ap_dimperm_t() const;
465 
467  ap_dimperm_t* get_ap_dimperm_t();
468 
470 
471 };
472 
473 #include "apxx_dimension_inline.hh"
474 
475 }
476 
477 #endif /* __APXX_DIMENSION_HH */
Represents a dimension (i.e., variable by index) in an expression tree.
Definition: apxx_texpr0.hh:33
Dimension change object (ap_dimchange_t wrapper).
Definition: apxx_dimension.hh:102
ap_dim_t & operator[](size_t dim)
Returns a (modifiable) reference to an index in the underlying array.
Definition: apxx_dimension_inline.hh:148
dimchange(const dimchange &x, bool inv=false)
Makes a copy of a dimchange, copying the array, and optionally inverting the dimension change.
ap_dim_t & get(size_t dim)
Returns a (modifiable) reference to an index in the underlying array (bound-checked).
Definition: apxx_dimension_inline.hh:136
void add_invert()
Inverts *this.
Definition: apxx_dimension_inline.hh:188
dimchange & operator=(const dimchange &x)
(Deep) copy.
Definition: apxx_dimension_inline.hh:98
dimchange operator-() const
Returns the inverse of *this.
Definition: apxx_dimension_inline.hh:193
const ap_dimchange_t * get_ap_dimchange_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_dimension_inline.hh:204
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_dimension_inline.hh:179
size_t get_intdim() const
Returns the number of integer dimensions to add/remove.
Definition: apxx_dimension_inline.hh:126
ap_dimchange_t c
Structure managed by APRON.
Definition: apxx_dimension.hh:106
friend std::ostream & operator<<(std::ostream &os, const dimchange &s)
Printing.
~dimchange()
Definition: apxx_dimension_inline.hh:89
size_t get_realdim() const
Returns the number of real dimensions to add/remove.
Definition: apxx_dimension_inline.hh:131
dimchange(size_t intdim=0, size_t realdim=0)
Makes an uninitialized dimchange.
Dimension permutation object (ap_dimperm_t wrapper).
Definition: apxx_dimension.hh:292
const ap_dimperm_t * get_ap_dimperm_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_dimension_inline.hh:422
void print(FILE *stream=stdout) const
Prints to a C stream.
Definition: apxx_dimension_inline.hh:368
dimperm(size_t size=0)
Makes an uninitialized dimperm of the given size.
size_t size() const
Returns the size of the permutation.
Definition: apxx_dimension_inline.hh:315
ap_dim_t & operator[](size_t dim)
Returns a (modifiable) reference to the image of dim.
Definition: apxx_dimension_inline.hh:320
dimperm(const dimperm &x, bool inv=false)
Makes a copy of a permutation, optionally inverting it.
ap_dim_t & get(size_t dim)
Returns a (modifiable) reference to the image of dim (bound-checked).
Definition: apxx_dimension_inline.hh:330
void invert()
Inverts *this.
Definition: apxx_dimension_inline.hh:404
~dimperm()
Definition: apxx_dimension_inline.hh:264
dimperm & operator=(const dimperm &x)
Copies x.
Definition: apxx_dimension_inline.hh:273
ap_dimperm_t c
Structure managed by APRON.
Definition: apxx_dimension.hh:296
dimperm operator-() const
Returns a new dimperm that is the inverse of *this.
Definition: apxx_dimension_inline.hh:410
friend dimperm operator*(const dimperm &x, const dimperm &y)
Returns a new dimperm that is the composition of x and y.
friend std::ostream & operator<<(std::ostream &os, const dimperm &s)
Printing.
dimperm & operator*=(const dimperm &y)
Composes *this with y.
Definition: apxx_dimension_inline.hh:379
Stream modifier to set variable names to dimensions.
Definition: apxx_dimension.hh:43
friend std::vector< std::string > * get_varname(std::basic_ostream< charT, Traits > &os)
Gets the variable name vector associated to the stream.
Definition: apxx_dimension_inline.hh:43
static const int xindex
Index to stream-local data, allocated with xalloc.
Definition: apxx_dimension.hh:48
friend std::basic_ostream< charT, Traits > & operator<<(std::basic_ostream< charT, Traits > &os, const varname &v)
Associates the modifier to the stream.
const std::vector< std::string > & names
Names of variables.
Definition: apxx_dimension.hh:51
varname(const std::vector< std::string > &names)
Creates a modifier to associate variable names to dimensions.
Definition: apxx_dimension_inline.hh:24
Definition: apxx_abstract0.hh:27
The identity permutation, to simplify initialisations and assignments.
Definition: apxx_dimension.hh:273
id(size_t size)
Definition: apxx_dimension.hh:276
size_t size
Size of the permutation.
Definition: apxx_dimension.hh:274
Inherited by most wrappers to map new and delete to malloc and free.
Definition: apxx_scalar.hh:69