realroot_doc 0.1.1
/Users/mourrain/Devel/mmx/realroot/include/realroot/bernstein_eenv_vrestrict.hpp File Reference

Go to the source code of this file.

Functions


Function Documentation

static void v0restrict ( real_t *  rs,
bernstein::eenv *  em,
const real_t &  l 
) [static]

Definition at line 7 of file bernstein_eenv_vrestrict.hpp.

Referenced by v0restrict(), and vrestrict().

{
  int k,i,j;
  real_t * ri, * rip;
  //  std::copy(ms,ms+em->data_size(),rs);
  for ( k = em->m_szs[0]-1; k >= 0; k-- )
    {
      for ( i = 0; i < k; i ++ )
        {
          ri  = rs + i*em->m_str[0];
          rip = ri + em->m_str[0];
          for ( j = 0; j < em->m_str[0]; j ++ )
            ri[j] = (1.0-l)*ri[j]+l*rip[j];
        };
    };
};
static void v0restrict ( real_t *  rs,
real_t *  ms,
bernstein::eenv *  em,
const real_t &  l 
) [static]

Definition at line 25 of file bernstein_eenv_vrestrict.hpp.

References mmx::sparse::copy(), and v0restrict().

{
  int k,i,j;
  real_t * ri, * rip;
  std::copy(ms,ms+em->data_size(),rs);
  v0restrict( rs, em, l );
};
static void vrestrict ( bernstein::eenv *  oenv,
bernstein::eenv *  ienv,
X *&  dst,
real_t *  src,
sz_t  v,
const X &  prm 
) [static]

Definition at line 34 of file bernstein_eenv_vrestrict.hpp.

References mmx::sparse::copy(), oaddress(), mmx::sparse::swap(), and v0restrict().

{
  sz_t nvr = ienv->m_nvr-1;
  sz_t c = 0;
  sz_t vrs[ienv->m_nvr];
  sz_t szs[ienv->m_nvr];
  std::copy(ienv->m_vrs,ienv->m_vrs + ienv->m_nvr, vrs );
  std::copy(ienv->m_szs,ienv->m_szs + ienv->m_nvr, szs );
  std::swap(vrs[v],vrs[0]);
  std::swap(szs[v],szs[0]);
  bernstein::eenv veenv( ienv->m_nvr, szs, vrs );
  unsigned * addr = new unsigned[ ienv->data_size() ];
  oaddress( &veenv, addr, ienv, 0, 0 );
  X * tmp = new X[ienv->data_size()];
  for ( unsigned c = 0;  c < ienv->data_size(); tmp[addr[c]] = src[c], c ++ );
  delete[] addr;
  v0restrict(tmp,&veenv,prm);
  oenv->~eenv();
  new(oenv) bernstein::eenv( ienv->m_nvr-1, szs+1, vrs+1 );
  dst = new X[oenv->data_size()];
  std::copy( tmp, tmp + oenv->data_size(), dst );
};