APRONXX  0.9.7
/builddir/build/BUILD/apron-0.9.10/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:
110  /* constructor */
111  /* =========== */
112 
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 
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  /* =============== */
238 
244  void add_invert();
245 
250  dimchange operator- () const;
251 
253 
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);
333 
334 
335  /* destructor */
336  /* ========== */
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 
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 
406  /* print */
407  /* ===== */
408 
416  friend std::ostream& operator<< (std::ostream& os, const dimperm& s);
417 
419  void print(FILE* stream=stdout) const;
420 
422 
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 */
Dimension permutation object (ap_dimperm_t wrapper).
Definition: apxx_dimension.hh:292
Dimension change object (ap_dimchange_t wrapper).
Definition: apxx_dimension.hh:102
Definition: apxx_abstract0.hh:27
const ap_dimperm_t * get_ap_dimperm_t() const
Returns a pointer to the internal APRON object stored in *this.
Definition: apxx_dimension.hh:423
size_t size
Size of the permutation.
Definition: apxx_dimension.hh:274
friend std::basic_ostream< charT, Traits > & operator<<(std::basic_ostream< charT, Traits > &os, const varname &v)
Associates the modifier to the stream.
Definition: apxx_dimension.hh:32
const std::vector< std::string > & names
Names of variables.
Definition: apxx_dimension.hh:51
texpr0::builder operator-(const texpr0::builder &a)
Definition: apxx_texpr0.hh:854
ap_dimchange_t c
Structure managed by APRON.
Definition: apxx_dimension.hh:106
varname(const std::vector< std::string > &names)
Creates a modifier to associate variable names to dimensions.
Definition: apxx_dimension.hh:25
id(size_t size)
Definition: apxx_dimension.hh:276
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.hh:44
dimperm operator*(const dimperm &x, const dimperm &y)
Definition: apxx_dimension.hh:393
Stream modifier to set variable names to dimensions.
Definition: apxx_dimension.hh:43
Inherited by most wrappers to map new and delete to malloc and free.
Definition: apxx_scalar.hh:69
The identity permutation, to simplify initialisations and assignments.
Definition: apxx_dimension.hh:273
Represents a dimension (i.e., variable by index) in an expression tree.
Definition: apxx_texpr0.hh:33
static const int xindex
Index to stream-local data, allocated with xalloc.
Definition: apxx_dimension.hh:48