6 template<
class real_t >
7 static void msimplify(
eenv * ienv, real_t * data )
9 unsigned * supp =
new unsigned[ ienv->data_size() ];
10 unsigned nsupp = ienv->support( supp, data );
11 sz_t newszs[ienv->m_nvr];
16 for ( i = 0; i < nsupp; i ++ )
18 for ( add = supp[i], v = ienv->m_nvr-1; add; add /= ienv->m_szs[v], v-- )
20 sz = add % ienv->m_szs[v] + 1;
21 if ( sz > newszs[v] ) newszs[v] = sz;
23 for (
int v = 0; v < ienv->m_nvr; v ++ )
24 if ( newszs[v] != ienv->m_szs[v] )
continue;
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;
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 ++ )
38 data[oa[i]] = data[supp[i]];
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