|
shape_doc 0.1
|
#include <ssi_qsegment.hpp>
Definition at line 13 of file ssi_qsegment.hpp.
| lrnode * alloc | ( | unsigned | size | ) | [static] |
Definition at line 15 of file ssi_qsegment.cpp.
{
unsigned i, acc;
i = size, acc =0;
do { acc += i, i = i / 2 + i % 2; } while ( i > 1 );
return new lrnode[acc+1];
};
Definition at line 23 of file ssi_qsegment.cpp.
References lrnode::lmax, lrnode::lmin, lrnode::ls, Mmax, Mmin, mmx::shape_ssi::right(), lrnode::rmax, lrnode::rmin, lrnode::rs, lrnode::umax, and lrnode::umin.
{
#define Mmin(a,b) std::min(a,b)
#define Mmax(a,b) std::max(a,b)
unsigned bsize = size;
bool right = true;
lrnode * built = data;
lrnode * curr = data + size;
unsigned i,j;
do
{
if ( right )
{
for ( i = 0, j = 0; i < bsize-(bsize%2); i += 2, j++ )
{
curr[j].umin = built[i].umin;
curr[j].umax = built[i+1].umax;
curr[j].lmin = Mmin(built[i].lmin,
built[i+1].lmin);
curr[j].lmax = Mmax(built[i].lmax,
built[i+1].lmax);
curr[j].rmin = Mmin(built[i].rmin,
built[i+1].rmin);
curr[j].rmax = Mmax(built[i].rmax,
built[i+1].rmax);
curr[j].ls = built + i;
curr[j].rs = built + i + 1;
};
if ( bsize%2 ) { curr[j++] = built[bsize-1]; };
built = curr;
curr += j;
}
else
{
unsigned next_size = bsize/2 + bsize % 2;
built += bsize-1;
curr += next_size-1;
for ( i = 0, j = 0; i < bsize-(bsize%2); i += 2, j++ )
{
curr[-j].umin = built[-i-1].umin;
curr[-j].umax = built[-i].umax;
curr[-j].lmin = Mmin(built[-i].lmin,
built[-i-1].lmin);
curr[-j].lmax = Mmax(built[-i].lmax,
built[-i-1].lmax);
curr[-j].rmin = Mmin(built[-i].rmin,
built[-i-1].rmin);
curr[-j].rmax = Mmax(built[-i].rmax,
built[-i-1].rmax);
curr[-j].ls = built - i - 1;
curr[-j].rs = built - i;
};
if ( bsize%2 ) { curr[-j] = built[-bsize+1]; };
built = curr - next_size+1;
curr++;
};
right = !right;
bsize = bsize/2 + bsize%2;
}
while( bsize > 1 );
return --curr;
};
Definition at line 15 of file ssi_qsegment.hpp.
Referenced by lrnode::make(), mmx::shape_ssi::operator<<(), and qsegment::qsegment().
Definition at line 15 of file ssi_qsegment.hpp.
Referenced by lrnode::make(), mmx::shape_ssi::operator<<(), and qsegment::qsegment().
Definition at line 16 of file ssi_qsegment.hpp.
Referenced by qsegment::make(), lrnode::make(), and qsegment::qsegment().
Definition at line 15 of file ssi_qsegment.hpp.
Referenced by qsegment::make(), lrnode::make(), mmx::shape_ssi::operator<<(), and qsegment::qsegment().
Definition at line 15 of file ssi_qsegment.hpp.
Referenced by qsegment::make(), lrnode::make(), mmx::shape_ssi::operator<<(), and qsegment::qsegment().
Definition at line 16 of file ssi_qsegment.hpp.
Referenced by qsegment::make(), lrnode::make(), and qsegment::qsegment().
Definition at line 15 of file ssi_qsegment.hpp.
Referenced by qsegment::make(), lrnode::make(), and qsegment::qsegment().
Definition at line 15 of file ssi_qsegment.hpp.
Referenced by qsegment::make(), lrnode::make(), and qsegment::qsegment().