Developer documentation

system_vstack.h
Go to the documentation of this file.
1 /********************************************************************
2  * This file is part of the source code of the realroot library.
3  * Author(s): J.P. Pavone, GALAAD, INRIA
4  * $Id: vstack.h,v 1.1 2005/07/11 10:03:57 jppavone Exp $
5  ********************************************************************/
6 #ifndef realroot_SOLVE_SBDSLV_VSTACK_HPP
7 #define realroot_SOLVE_SBDSLV_VSTACK_HPP
8 //--------------------------------------------------------------------
10 //--------------------------------------------------------------------
11 namespace mmx {
12 //--------------------------------------------------------------------
13 namespace realroot
14 {
15  template< class creal_t >
16  struct vstack /* pile de projection centrĂ©e variable */
17  {
18  typedef unsigned sz_t;
19  /* nombre de projections disponibles */
20  sz_t m_nbp;
21  inline sz_t nbp() const { return m_nbp; };
22  /* allocateur des coefficients et des projections */
25  vstack(): m_nbp(0) {};
26  /* accesseurs pour les projections */
27  inline sz_t* pinf( sz_t iptr ) { return m_ipchnk.data(iptr); };
28  inline const sz_t* pinf( sz_t iptr ) const { return m_ipchnk.data(iptr); };
29  inline sz_t& pmsz( sz_t iptr ) { return pinf(iptr)[0]; };
30  inline sz_t pmsz( sz_t iptr ) const { return pinf(iptr)[0]; };
31  inline sz_t& pmad( sz_t iptr ) { return pinf(iptr)[1]; };
32  inline sz_t pmad( sz_t iptr ) const { return pinf(iptr)[1]; };
33  inline sz_t& pMsz( sz_t iptr ) { return pinf(iptr)[2]; };
34  inline sz_t pMsz( sz_t iptr ) const { return pinf(iptr)[2]; };
35  inline sz_t& pMad( sz_t iptr ) { return pinf(iptr)[3]; };
36  inline sz_t pMad( sz_t iptr ) const { return pinf(iptr)[3]; };
37 
38  inline creal_t* pmdata( sz_t iptr ) { return m_cpchnk.data(pmad(iptr)); };
39  inline const creal_t* pmdata( sz_t iptr ) const { return m_cpchnk.data(pmad(iptr)); };
40  inline creal_t* pMdata( sz_t iptr ) { return m_cpchnk.data(pMad(iptr)); };
41  inline const creal_t* pMdata( sz_t iptr ) const { return m_cpchnk.data(pMad(iptr)); };
42 
43  inline creal_t& plower( sz_t iptr ) { return *(pmdata(iptr)-2); };
44  inline const creal_t& plower( sz_t iptr ) const { return *(pmdata(iptr)-2); };
45  inline creal_t& pupper( sz_t iptr ) { return *(pmdata(iptr)-1); };
46  inline const creal_t& pupper( sz_t iptr ) const { return *(pmdata(iptr)-1); };
47 
48  inline sz_t allocc( sz_t sz ) { return m_cpchnk.alloc(sz); };
49  inline sz_t alloci( sz_t sz ) { return m_ipchnk.alloc(sz); };
50 
51  /* interface avec le solveur */
52  void push( creal_t *& pmn, creal_t *& pmx, sz_t sz )
53  {
54  sz_t iptr;
55  if ( nbp() == 0 ) {
56  iptr = allocc(2);
57  m_cpchnk.data(iptr)[0] = 0.0;
58  m_cpchnk.data(iptr)[1] = 1.0;
59  };
60  iptr = alloci(4);
61  pMsz(iptr) = pmsz(iptr) = sz;
62  pmad(iptr) = allocc(sz);
63  pMad(iptr) = allocc(sz);
64  pmn = pmdata(iptr);
65  pmx = pMdata(iptr);
66  m_nbp ++ ;
67  };
68 
69  void add( creal_t const * pmn, creal_t const * pmx, sz_t sz )
70  {
71  creal_t *_pmn,*_pmx;
72  push(_pmn,_pmx,sz);
73  std::copy(pmn,pmn+sz,_pmn);
74  std::copy(pmx,pmx+sz,_pmx);
75  };
76 
77  inline void read( sz_t i, creal_t const *& pmn, creal_t const *& pmx, sz_t& sz ) const
78  { pmn = pmdata(4*i), pmx = pMdata(4*i), sz = pmsz (4*i); };
79 
80  void reset() {
81  m_nbp = 0;
82  m_cpchnk.free();
83  m_ipchnk.free();
84  };
85 
86 
87 
88  bool thickness( const creal_t& eps ) {
89  if ( nbp() == 0 ) return true;
90  creal_t mn = vct::min(pmdata(0),pmsz(0));
91  creal_t mx = vct::max(pMdata(0),pMsz(0));
92  if ( mn*mx > 0 ) return false;
93  for ( sz_t i = 4; i < 4*nbp(); i += 4 )
94  {
95  creal_t imn,imx;
96  imn = vct::min(pmdata(i),pmsz(i)); if ( imn < mn ) mn = imn;
97  imx = vct::max(pMdata(i),pMsz(i)); if ( imx > mx ) mx = imx;
98  if ( imx*imn > 0 ) return false;
99  };
100  return mx-mn < eps;
101  };
102 
103  void copy( const vstack& vs )
104  {
105  /* vs.print(); */
106  reset();
107  creal_t const *pmn;
108  creal_t const *pmx;
109  sz_t sz,i;
110  for ( i = 0; i < vs.nbp(); i ++ )
111  {
112  vs.read(i,pmn,pmx,sz);
113  add(pmn,pmx,sz);
114  };
115  };
116  };
117 };
118 //--------------------------------------------------------------------
119 } //namespace mmx
120 /********************************************************************/
121 #endif //
void min(A &mn, B const *v, unsigned n, int s=1)
Definition: tensor_vctops.hpp:185
sz_t pmsz(sz_t iptr) const
Definition: system_vstack.h:30
void read(sz_t i, creal_t const *&pmn, creal_t const *&pmx, sz_t &sz) const
Definition: system_vstack.h:77
sz_t pmad(sz_t iptr) const
Definition: system_vstack.h:32
creal_t * pMdata(sz_t iptr)
Definition: system_vstack.h:40
sz_t pMsz(sz_t iptr) const
Definition: system_vstack.h:34
sz_t alloci(sz_t sz)
Definition: system_vstack.h:49
void push(creal_t *&pmn, creal_t *&pmx, sz_t sz)
Definition: system_vstack.h:52
sz_t & pMsz(sz_t iptr)
Definition: system_vstack.h:33
creal_t * pmdata(sz_t iptr)
Definition: system_vstack.h:38
sz_t * pinf(sz_t iptr)
Definition: system_vstack.h:27
sz_t & pMad(sz_t iptr)
Definition: system_vstack.h:35
memory::linear_allocator< creal_t > m_cpchnk
Definition: system_vstack.h:21
sz_t m_nbp
Definition: system_vstack.h:20
const creal_t * pMdata(sz_t iptr) const
Definition: system_vstack.h:41
const sz_t * pinf(sz_t iptr) const
Definition: system_vstack.h:28
sz_t pMad(sz_t iptr) const
Definition: system_vstack.h:36
void copy(const vstack &vs)
Definition: system_vstack.h:103
TMPL void copy(Polynomial &r, const Polynomial &a)
Copy of a in r.
Definition: sparse_monomials.hpp:613
unsigned sz_t
Definition: system_vstack.h:18
sz_t & pmad(sz_t iptr)
Definition: system_vstack.h:31
bool thickness(const creal_t &eps)
Definition: system_vstack.h:88
sz_t alloc(sz_t sz)
Definition: system_linear_allocator.h:54
vstack()
Definition: system_vstack.h:25
T * data(sz_t address, const automatic_dispatch< false > &) const
Definition: system_linear_allocator.h:76
void reset()
Definition: system_vstack.h:80
void free(sz_t sz)
Definition: system_linear_allocator.h:67
sz_t nbp() const
Definition: system_vstack.h:21
Definition: system_vstack.h:16
const creal_t & plower(sz_t iptr) const
Definition: system_vstack.h:44
const creal_t & pupper(sz_t iptr) const
Definition: system_vstack.h:46
void add(creal_t const *pmn, creal_t const *pmx, sz_t sz)
Definition: system_vstack.h:69
creal_t & plower(sz_t iptr)
Definition: system_vstack.h:43
void max(A &mx, B const *v, unsigned n, int s=1)
Definition: tensor_vctops.hpp:200
creal_t & pupper(sz_t iptr)
Definition: system_vstack.h:45
memory::linear_allocator< sz_t > m_ipchnk
Definition: system_vstack.h:24
Definition: array.hpp:12
sz_t allocc(sz_t sz)
Definition: system_vstack.h:48
const creal_t * pmdata(sz_t iptr) const
Definition: system_vstack.h:39
sz_t & pmsz(sz_t iptr)
Definition: system_vstack.h:29
Home