Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

gugr::segnode Struct Reference

#include <gugr_planesweep.h>

List of all members.

Public Methods

 segnode (int left, int right, segnode *parent)
 ~segnode ()
void * operator new (size_t s)
void operator delete (void *p, size_t s)
void insert (int beg, int end, segment *seg)
void remove (int beg, int end, segment *seg)
void leaves_to_array (int *nL, Ptr< segnode *> *L)

Public Attributes

int m_il
int m_ir
segnode * m_left
segnode * m_right
segnode * m_parent
RefMap< segmentm_segs


Constructor & Destructor Documentation

gugr::segnode::segnode int    left,
int    right,
segnode *    parent
[inline]
 

Definition at line 272 of file gugr_planesweep.h.

References m_il, m_ir, and segnode().

Referenced by segnode().

00273   {
00274     m_il = left;
00275     m_ir = right;
00276     
00277     m_parent = parent;
00278     
00279     if( right - left > 1 )
00280     {
00281       m_left = new segnode( left, (left + right)/2, this );
00282       m_right = new segnode( (left + right)/2, right, this );
00283     }
00284     else
00285       m_left = m_right = 0;
00286   }

gugr::segnode::~segnode   [inline]
 

Definition at line 287 of file gugr_planesweep.h.

References m_segs.

00288   {
00289     delete m_left;
00290     delete m_right;
00291 
00292     m_segs.DeleteElems();
00293   }


Member Function Documentation

void gugr::segnode::insert int    beg,
int    end,
segment   seg
[inline]
 

Definition at line 305 of file gugr_planesweep.h.

References gugr::compare_pointer_to_pointer(), m_il, m_ir, m_segs, and gul::ndebug.

00306   {
00307     gul::Assert<gul::InternalError>( ndebug || (beg != end) );
00308 
00309     if( (beg <= m_il) && (m_ir <= end) )
00310     {
00311       int side;
00312       RefMap<segment>::Node node,node1;
00313 
00314       side = m_segs.SearchNode( seg, 
00315              (int (*)(segment *, segment *))compare_pointer_to_pointer, &node );
00316       if( side == 0 ) throw InternalError();
00317 
00318       node1 = m_segs.NewNode(seg);
00319 
00320       m_segs.InsertNode( node1, node, side );
00321     } 
00322     else
00323     {
00324       if( beg < (m_il + m_ir)/2 )
00325         m_left->insert( beg, end, seg );
00326       if( end > (m_il + m_ir)/2 )
00327         m_right->insert( beg, end, seg );
00328     }
00329   }

void gugr::segnode::leaves_to_array int *    nL,
Ptr< segnode *> *    L
[inline]
 

Definition at line 352 of file gugr_planesweep.h.

00353   {
00354     if( m_left == 0 )
00355     {
00356       (*L)[*nL] = this;
00357       (*nL)++;
00358     }
00359     else
00360     {
00361       m_left->leaves_to_array( nL, L );
00362       m_right->leaves_to_array( nL, L );
00363     }  
00364     return;
00365   }

void gugr::segnode::operator delete void *    p,
size_t    s
[inline]
 

Definition at line 301 of file gugr_planesweep.h.

References gust::PoolFree().

00302   {
00303     if( p != 0 ) PoolFree( p, s );
00304   }

void* gugr::segnode::operator new size_t    s [inline]
 

Definition at line 294 of file gugr_planesweep.h.

References gust::PoolAlloc().

00295   {
00296     size_t dummy;
00297     void *p = PoolAlloc( s, &dummy );
00298     if( p == NULL ) throw PoolAllocError();
00299     return(p);
00300   }

void gugr::segnode::remove int    beg,
int    end,
segment   seg
[inline]
 

Definition at line 330 of file gugr_planesweep.h.

References gugr::compare_pointer_to_pointer(), m_il, m_ir, and m_segs.

00331   {
00332     if( (beg <= m_il) && (m_ir <= end) )
00333     {
00334       int side;
00335       RefMap<segment>::Node node;
00336 
00337       side = m_segs.SearchNode( seg, 
00338              (int (*)(segment *, segment *))compare_pointer_to_pointer, &node );
00339       if( side != 0 ) throw InternalError();
00340 
00341       m_segs.RemoveNode( node );
00342       m_segs.FreeNode( node );
00343     } 
00344     else
00345     {
00346       if( beg < (m_il + m_ir)/2 )
00347         m_left->remove( beg, end, seg );
00348       if( end > (m_il + m_ir)/2 )
00349         m_right->remove( beg, end, seg );
00350     }
00351   }


Member Data Documentation

int gugr::segnode::m_il
 

Definition at line 263 of file gugr_planesweep.h.

Referenced by insert(), remove(), and segnode().

int gugr::segnode::m_ir
 

Definition at line 264 of file gugr_planesweep.h.

Referenced by insert(), remove(), and segnode().

segnode* gugr::segnode::m_left
 

Definition at line 266 of file gugr_planesweep.h.

segnode* gugr::segnode::m_parent
 

Definition at line 268 of file gugr_planesweep.h.

segnode* gugr::segnode::m_right
 

Definition at line 267 of file gugr_planesweep.h.

RefMap<segment> gugr::segnode::m_segs
 

Definition at line 270 of file gugr_planesweep.h.

Referenced by insert(), remove(), and ~segnode().


The documentation for this struct was generated from the following file:
Generated on Mon Jan 21 04:17:55 2002 for GUL 0.6 - Geometry Utility Library by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001