Beispiel #1
0
static void vsortq( ObjectDB *odb )
{
   static int stack[ 200 ];
   int i, j, lt, rt, tos = -1, t, key = KEY, ipos = IPOS;
   float v;

   lt = 0;
   rt = ARRAYSIZE - 1;

   for ( ;; ) {
      while ( rt - lt > SUBARRAYSIZE ) {
         v = SORTVAL( rt );  i = lt - 1;  j = rt;
         for ( ;; ) {
            while ( SORTVAL( ++i ) < v ) ;
            while ( j && SORTVAL( --j ) > v ) ;
            if ( i > j ) break;
            SWAP( ARRAY( i ), ARRAY( j ));
         }
         SWAP( ARRAY( i ), ARRAY( rt ));
         if ( i - lt > rt - i )
            { PUSH( lt ); PUSH( i - 1 ); lt = i + 1; }
         else
            { PUSH( i + 1 ); PUSH( rt ); rt = i - 1; }
      }
      if ( STACKEMPTY ) break;
      POP( rt );
      POP( lt );
   }
}
Beispiel #2
0
static void vsorti( ObjectDB *odb )
{
   int i, j, t, key = KEY, ipos = IPOS;
   float v;

   for ( i = 1; i < ARRAYSIZE; i++ ) {
      t = ARRAY( i );
      v = SORTVAL( i );
      j = i;
      while ( j && SORTVAL( j - 1 ) > v ) {
         ARRAY( j ) = ARRAY( j - 1 );
         --j;
      }
      ARRAY( j ) = t;
   }
}
Beispiel #3
0
int pointSearch( ObjectDB *odb, float pos[ 3 ] )
{
   int lt = 0, rt = ARRAYSIZE - 1, x, key = KEY, ipos = IPOS;

   while ( rt >= lt ) {
      x = ( lt + rt ) / 2;
      if ( pos[ key ] < SORTVAL( x )) rt = x - 1; else lt = x + 1;
      if ( pos[ key ] == SORTVAL( x )) {
         lt = rt = x;
         while ( lt > 0 && pos[ key ] == SORTVAL( lt - 1 )) --lt;
         while ( rt < ARRAYSIZE - 1 && pos[ key ] == SORTVAL( rt + 1 )) ++rt;
         for ( x = lt; x <= rt; x++ )
            if ( pos[ 0 ] == COORD( x, 0 ) &&
                 pos[ 1 ] == COORD( x, 1 ) &&
                 pos[ 2 ] == COORD( x, 2 )) return ARRAY( x );
         return -1;
      }
   }
   return -1;
}
Beispiel #4
0
void
Dbg_util_edge_out(Rt_map *clmp, Rt_map *dlmp)
{
	if (DBG_NOTCLASS(DBG_C_INIT))
		return;
	if (DBG_NOTDETAIL())
		return;

	dbg_print(LIST(clmp), MSG_INTL(MSG_UTL_EDGE_OUT), SORTVAL(clmp),
	    NAME(clmp), NAME(dlmp));
}