#include <gugr_planesweep.h>
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< segment > | m_segs |
|
||||||||||||||||
|
Definition at line 272 of file gugr_planesweep.h. References m_il, m_ir, and segnode(). Referenced by segnode().
|
|
|
Definition at line 287 of file gugr_planesweep.h. References m_segs.
|
|
||||||||||||||||
|
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 }
|
|
||||||||||||
|
Definition at line 352 of file gugr_planesweep.h.
|
|
||||||||||||
|
Definition at line 301 of file gugr_planesweep.h. References gust::PoolFree().
00302 {
00303 if( p != 0 ) PoolFree( p, s );
00304 }
|
|
|
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 }
|
|
||||||||||||||||
|
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 }
|
|
|
Definition at line 263 of file gugr_planesweep.h. |
|
|
Definition at line 264 of file gugr_planesweep.h. |
|
|
Definition at line 266 of file gugr_planesweep.h. |
|
|
Definition at line 268 of file gugr_planesweep.h. |
|
|
Definition at line 267 of file gugr_planesweep.h. |
|
|
Definition at line 270 of file gugr_planesweep.h. |
1.2.13.1 written by Dimitri van Heesch,
© 1997-2001