Developer documentation

bernstein_eenv_simplify.hpp
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: eenv-simplify.hpp,v 1.1 2005/07/11 10:03:55 jppavone Exp $
5  ********************************************************************/
6 template< class real_t >
7 static void msimplify( eenv * ienv, real_t * data )
8 {
9  unsigned * supp = new unsigned[ ienv->data_size() ];
10  unsigned nsupp = ienv->support( supp, data );
11  sz_t newszs[ienv->m_nvr];
12  unsigned i,add;
13  sz_t v;
14  unsigned sz;
15  std::fill(newszs,newszs+ienv->m_nvr,0);
16  for ( i = 0; i < nsupp; i ++ )
17  {
18  for ( add = supp[i], v = ienv->m_nvr-1; add; add /= ienv->m_szs[v], v-- )
19  {
20  sz = add % ienv->m_szs[v] + 1;
21  if ( sz > newszs[v] ) newszs[v] = sz;
22  };
23  for ( int v = 0; v < ienv->m_nvr; v ++ )
24  if ( newszs[v] != ienv->m_szs[v] ) continue;
25  break;
26  };
27 
28  if ( i < nsupp ) { delete[] supp; return; };
29  for ( sz_t v = 0; v < ienv->m_nvr; v ++ )
30  if ( newszs[v] == 0 ) newszs[v] = 1;
31 
32  eenv senv(ienv->m_nvr,newszs,ienv->m_vrs);
33  unsigned * oa = new unsigned[ nsupp ];
34  oaddress( &senv, oa, ienv, supp, nsupp );
35  for ( unsigned i = 0; i < nsupp; i ++ )
36  {
37  assert(oa[i]<supp[i]);
38  data[oa[i]] = data[supp[i]];
39  };
40  ienv->swap(senv);
41 };
void fill(C *a, unsigned n, int s, const C &x)
Definition: tensor_vctops.hpp:152
tensor::eenv eenv
Definition: tensor_convert.hpp:12
void add(V &a, const W &b)
Addition of two vectors.
Definition: array.hpp:154
#define assert(expr, msg)
Definition: shared_object.hpp:57
Home