Go to the source code of this file.
static void msimplify | ( | eenv * | ienv, | |
real_t * | data | |||
) | [inline, static] |
Definition at line 7 of file bernstein_eenv_simplify.hpp.
References mmx::array::add(), assert, mmx::vct::fill(), and oaddress().
00008 { 00009 unsigned * supp = new unsigned[ ienv->data_size() ]; 00010 unsigned nsupp = ienv->support( supp, data ); 00011 sz_t newszs[ienv->m_nvr]; 00012 unsigned i,add; 00013 sz_t v; 00014 unsigned sz; 00015 std::fill(newszs,newszs+ienv->m_nvr,0); 00016 for ( i = 0; i < nsupp; i ++ ) 00017 { 00018 for ( add = supp[i], v = ienv->m_nvr-1; add; add /= ienv->m_szs[v], v-- ) 00019 { 00020 sz = add % ienv->m_szs[v] + 1; 00021 if ( sz > newszs[v] ) newszs[v] = sz; 00022 }; 00023 for ( int v = 0; v < ienv->m_nvr; v ++ ) 00024 if ( newszs[v] != ienv->m_szs[v] ) continue; 00025 break; 00026 }; 00027 00028 if ( i < nsupp ) { delete[] supp; return; }; 00029 for ( sz_t v = 0; v < ienv->m_nvr; v ++ ) 00030 if ( newszs[v] == 0 ) newszs[v] = 1; 00031 00032 eenv senv(ienv->m_nvr,newszs,ienv->m_vrs); 00033 unsigned * oa = new unsigned[ nsupp ]; 00034 oaddress( &senv, oa, ienv, supp, nsupp ); 00035 for ( unsigned i = 0; i < nsupp; i ++ ) 00036 { 00037 assert(oa[i]<supp[i]); 00038 data[oa[i]] = data[supp[i]]; 00039 }; 00040 ienv->swap(senv); 00041 };