Revision: 7555
          http://playerstage.svn.sourceforge.net/playerstage/?rev=7555&view=rev
Author:   rtv
Date:     2009-03-28 21:26:54 +0000 (Sat, 28 Mar 2009)

Log Message:
-----------
cleaning up, using references for common method args and improving 
const-correctness

Modified Paths:
--------------
    code/stage/trunk/examples/ctrl/fasr.cc
    code/stage/trunk/examples/ctrl/sink.cc
    code/stage/trunk/examples/ctrl/source.cc
    code/stage/trunk/examples/ctrl/wander.cc
    code/stage/trunk/libstage/blockgroup.cc
    code/stage/trunk/libstage/model.cc
    code/stage/trunk/libstage/model_getset.cc
    code/stage/trunk/libstage/model_position.cc
    code/stage/trunk/libstage/model_props.cc
    code/stage/trunk/libstage/powerpack.cc
    code/stage/trunk/libstage/stage.cc
    code/stage/trunk/libstage/stage.hh

Modified: code/stage/trunk/examples/ctrl/fasr.cc
===================================================================
--- code/stage/trunk/examples/ctrl/fasr.cc      2009-03-28 00:10:37 UTC (rev 
7554)
+++ code/stage/trunk/examples/ctrl/fasr.cc      2009-03-28 21:26:54 UTC (rev 
7555)
@@ -390,23 +390,18 @@
   
         //pose.z += 0.0001;
         //robot->pos->SetPose( pose );
-  
+        
         if( pos->GetFlagCount() < payload && 
                  hypot( -7-pose.x, -7-pose.y ) < 2.0 )
                {
                  if( ++robot->work_get > workduration )
                         {
-                               // protect source from concurrent access
-                               robot->source->Lock();
-
                                // transfer a chunk from source to robot
                                pos->PushFlag( robot->source->PopFlag() );
-                               robot->source->Unlock();
-
                                robot->work_get = 0;    
-                }        
+                        }        
                }
-  
+        
         robot->at_dest = false;
 
         if( hypot( 7-pose.x, 7-pose.y ) < 1.0 )
@@ -417,16 +412,10 @@
 
                  if( ++robot->work_put > workduration )
                         {
-                               // protect sink from concurrent access
-                               robot->sink->Lock();
-
                                //puts( "dropping" );
                                // transfer a chunk between robot and goal
                                robot->sink->PushFlag( pos->PopFlag() );
-                               robot->sink->Unlock();
-
                                robot->work_put = 0;
-
                         }
                }
   

Modified: code/stage/trunk/examples/ctrl/sink.cc
===================================================================
--- code/stage/trunk/examples/ctrl/sink.cc      2009-03-28 00:10:37 UTC (rev 
7554)
+++ code/stage/trunk/examples/ctrl/sink.cc      2009-03-28 21:26:54 UTC (rev 
7555)
@@ -7,11 +7,10 @@
 
 // Stage calls this when the model starts up
 extern "C" int Init( Model* mod )
-{
+{  
+  //for( int i=0; i<5; i++ )
+  // mod->PushFlag( new Flag( stg_color_pack( 1,1,0,0), 0.5 ) );
   
-  for( int i=0; i<5; i++ )
-    mod->PushFlag( new Flag( stg_color_pack( 1,1,0,0), 0.5 ) );
-  
   mod->AddUpdateCallback( (stg_model_callback_t)Update, NULL );
 
   return 0; //ok
@@ -20,14 +19,8 @@
 // inspect the laser data and decide what to do
 int Update( Model* mod, void* dummy )
 {
-  // protect access to this model from other controllers
-  mod->Lock();
-  
   if( mod->GetWorld()->GetUpdateCount() % INTERVAL  == 0 )
     mod->PopFlag();
-
-  mod->Unlock();
-  
   return 0; // run again
 }
 

Modified: code/stage/trunk/examples/ctrl/source.cc
===================================================================
--- code/stage/trunk/examples/ctrl/source.cc    2009-03-28 00:10:37 UTC (rev 
7554)
+++ code/stage/trunk/examples/ctrl/source.cc    2009-03-28 21:26:54 UTC (rev 
7555)
@@ -21,14 +21,9 @@
 // inspect the laser data and decide what to do
 int Update( Model* mod, void* dummy )
 {
-  // protect access to this model from other controllers
-  mod->Lock();
-
   if( mod->GetWorld()->GetUpdateCount() % INTERVAL  == 0 )
     mod->PushFlag( new Flag( stg_color_pack( 1,1,0,0), flagsz ) );
 
-  mod->Unlock();
-  
   return 0; // run again
 }
 

Modified: code/stage/trunk/examples/ctrl/wander.cc
===================================================================
--- code/stage/trunk/examples/ctrl/wander.cc    2009-03-28 00:10:37 UTC (rev 
7554)
+++ code/stage/trunk/examples/ctrl/wander.cc    2009-03-28 21:26:54 UTC (rev 
7555)
@@ -120,7 +120,13 @@
       robot->pos->SetXSpeed( cruisespeed );      
                robot->pos->SetTurnSpeed(  0 );
     }
-           
+
+  if( robot->pos->Stalled() )
+        {
+               robot->pos->SetSpeed( 0,0,0 );
+               robot->pos->SetTurnSpeed( 0 );
+        }
+
   return 0;
 }
 

Modified: code/stage/trunk/libstage/blockgroup.cc
===================================================================
--- code/stage/trunk/libstage/blockgroup.cc     2009-03-28 00:10:37 UTC (rev 
7554)
+++ code/stage/trunk/libstage/blockgroup.cc     2009-03-28 21:26:54 UTC (rev 
7555)
@@ -58,17 +58,12 @@
 
 Model* BlockGroup::TestCollision()
 {
-  //printf( "blockgroup %p test collision...\n", this );
-
   Model* hitmod = NULL;
   
   for( GList* it=blocks; it; it = it->next )
         if( (hitmod = ((Block*)it->data)->TestCollision()))
                break; // bail on the earliest collision
-  
-  //printf( "blockgroup %p test collision done.\n", this );
-
-  return hitmod;
+  return hitmod; // NULL if no collision
 }
 
 
@@ -107,10 +102,6 @@
   offset.x = minx + size.x/2.0;
   offset.y = miny + size.y/2.0;
   offset.z = 0; // todo?
-
-  // normalize blocks
-  //  for( GList* it = blocks; itl it=it->next )
-  //((Block*)it->data)->Normalize( size.x, size.y, size.z, offset.x
 }
 
 
@@ -282,11 +273,6 @@
   
   if( rects && (rect_count > 0) )
         {
-               // shift the origin from bottom-left to center of the image
-               //double dx = width/2.0;
-               //double dy = height/2.0;
-               
-               //puts( "loading rects" );
                for( unsigned int r=0; r<rect_count; r++ )
                  {
                         stg_point_t pts[4];
@@ -296,15 +282,6 @@
                         double w = rects[r].size.x;
                         double h = rects[r].size.y;
                         
-//                      pts[0].x = x - dx;
-//                      pts[0].y = y - dy;
-//                      pts[1].x = x + w - dx;
-//                      pts[1].y = y -dy;
-//                      pts[2].x = x + w -dx;
-//                      pts[2].y = y + h -dy;
-//                      pts[3].x = x - dx;
-//                      pts[3].y = y + h -dy;                                  
                 
-
                         pts[0].x = x;
                         pts[0].y = y;
                         pts[1].x = x + w;
@@ -318,10 +295,10 @@
                         stg_color_t col = stg_color_pack( 1.0, 0,0,1.0 ); 
                         
                         AppendBlock( new Block( mod,
-                                                                               
                 pts,4,
-                                                                               
                 0,1,
-                                                                               
                 col,
-                                                                               
                 true ) );               
+                                                                               
         pts,4,
+                                                                               
         0,1,
+                                                                               
         col,
+                                                                               
         true ) );               
                  }                      
                free( rects );
         }  

Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc  2009-03-28 00:10:37 UTC (rev 7554)
+++ code/stage/trunk/libstage/model.cc  2009-03-28 21:26:54 UTC (rev 7555)
@@ -472,7 +472,7 @@
 }
 
 // convert a global pose into the model's local coordinate system
-Pose Model::GlobalToLocal( Pose pose )
+Pose Model::GlobalToLocal( const Pose& pose ) const
 {
   // get model's global pose
   Pose org = GetGlobalPose();
@@ -500,7 +500,7 @@
 }
 
 // returns true iff model [testmod] is an antecedent of this model
-bool Model::IsAntecedent( Model* testmod )
+bool Model::IsAntecedent( const Model* testmod ) const
 {
   if( parent == NULL )
     return false;
@@ -512,7 +512,7 @@
 }
 
 // returns true iff model [testmod] is a descendent of this model
-bool Model::IsDescendent( Model* testmod )
+bool Model::IsDescendent( const Model* testmod ) const
 {
   if( this == testmod )
         return true;
@@ -528,14 +528,14 @@
   return false;
 }
 
-bool Model::IsRelated( Model* that )
+bool Model::IsRelated( const Model* that ) const
 {
   // is it me?
   if( this == that )
         return true;
   
   // wind up to top-level object
-  Model* candidate = this;
+  Model* candidate = (Model*)this;
   while( candidate->parent )
         candidate = candidate->parent;
   
@@ -543,9 +543,7 @@
   return candidate->IsDescendent( that );
 }
 
-
-
-inline Pose Model::LocalToGlobal( Pose pose )
+inline Pose Model::LocalToGlobal( const Pose& pose ) const
 {  
   return pose_sum( pose_sum( GetGlobalPose(), geom.pose ), pose );
 }
@@ -612,7 +610,7 @@
   pose->a = pose->a;
 }
 
-void Model::Print( char* prefix )
+void Model::Print( char* prefix ) const
 {
   if( prefix )
     printf( "%s model ", prefix );
@@ -628,7 +626,7 @@
     ((Model*)it->data)->Print( prefix );
 }
 
-const char* Model::PrintWithPose()
+const char* Model::PrintWithPose() const
 {
   Pose gpose = GetGlobalPose();
 
@@ -678,6 +676,10 @@
 
 void Model::Update( void )
 {
+  // NOTE - update callbacks are NOT called from here, as this method
+  //  may be called in multiple threads, and callbacks may not be
+  //  reentrant
+  
   //   printf( "[%llu] %s update (%d subs)\n", 
   //                    this->world->sim_time, this->token, this->subs );
   
@@ -688,22 +690,8 @@
     {
       // consume  energy stored in the power pack
       stg_joules_t consumed =  watts * (world->interval_sim * 1e-6); 
-      pp->Subtract( consumed );
-      
-      /*               
-       printf ( "%s current %.2f consumed %.6f ppack @ %p [ %.2f/%.2f 
(%.0f)\n",
-       token, 
-       watts, 
-       consumed, 
-       power_pack, 
-       power_pack->stored, 
-       power_pack->capacity, 
-       power_pack->stored / power_pack->capacity * 100.0 );
-      */      
+      pp->Subtract( consumed );      
     }
-  
-  //CallCallbacks( &hooks.update );
-  //last_update = world->sim_time;
 }
 
 void Model::CallUpdateCallbacks( void )
@@ -712,7 +700,7 @@
   last_update = world->sim_time;
 }
 
-stg_meters_t Model::ModelHeight()
+stg_meters_t Model::ModelHeight() const
 {      
   stg_meters_t m_child = 0; //max size of any child
   for( GList* it=this->children; it; it=it->next )
@@ -729,25 +717,20 @@
 
 void Model::AddToPose( double dx, double dy, double dz, double da )
 {
-  if( dx || dy || dz || da )
-    {
-      Pose pose = GetPose();
-      pose.x += dx;
-      pose.y += dy;
-      pose.z += dz;
-      pose.a += da;
-
-      SetPose( pose );
-    }
+  Pose pose = this->GetPose();
+  pose.x += dx;
+  pose.y += dy;
+  pose.z += dz;
+  pose.a += da;
+  
+  this->SetPose( pose );
 }
 
-void Model::AddToPose( Pose pose )
+void Model::AddToPose( const Pose& pose )
 {
   this->AddToPose( pose.x, pose.y, pose.z, pose.a );
 }
 
-
-
 void Model::PlaceInFreeSpace( stg_meters_t xmin, stg_meters_t xmax, 
                              stg_meters_t ymin, stg_meters_t ymax )
 {
@@ -836,10 +819,6 @@
   
 Model* Model::ConditionalMove( Pose newpose )
 { 
-//   if( isnan( pose.x ) || isnan( pose.y )  || isnan( pose.z )  || isnan( 
pose.a ) )
-//     printf( "ConditionalMove bad newpose %s [%.2f %.2f %.2f %.2f]\n",
-//         token, newpose.x, newpose.y, newpose.z, newpose.a );
-
   Pose startpose = pose;
   pose = newpose; // do the move provisionally - we might undo it below
    
@@ -853,10 +832,6 @@
       world->dirty = true; // need redraw
     }
   
-//   if( isnan( pose.x ) || isnan( pose.y )  || isnan( pose.z )  || isnan( 
pose.a ) )
-//     printf( "ConditionalMove bad pose %s [%.2f %.2f %.2f %.2f]\n",
-//         token, pose.x, pose.y, pose.z, pose.a );
-
   return hitmod;
 }
 
@@ -866,12 +841,6 @@
   if( disabled )
     return;
   
-//   if( velocity.IsZero() )   
-//     {
-//       PRINT_WARN1( "model %s has velocity zero but its pose is being 
updated", token ); 
-//       return;
-//     }
-  
   // TODO - control this properly, and maybe do it faster
   //if( 0 )
   //if( (world->updates % 10 == 0) )
@@ -897,9 +866,9 @@
   p.z = velocity.z * interval;
   p.a = velocity.a * interval;
     
-  if( isnan( p.x ) || isnan( p.y )  || isnan( p.z )  || isnan( p.a ) )
-    printf( "UpdatePose bad vel %s [%.2f %.2f %.2f %.2f]\n",
-           token, p.x, p.y, p.z, p.a );
+  //if( isnan( p.x ) || isnan( p.y )  || isnan( p.z )  || isnan( p.a ) )
+  //printf( "UpdatePose bad vel %s [%.2f %.2f %.2f %.2f]\n",
+  //   token, p.x, p.y, p.z, p.a );
 
   // attempts to move to the new pose. If the move fails because we'd
   // hit another model, that model is returned.
@@ -909,9 +878,9 @@
 }
 
 
-int Model::TreeToPtrArray( GPtrArray* array )
+int Model::TreeToPtrArray( GPtrArray* array ) const
 {
-  g_ptr_array_add( array, this );
+  g_ptr_array_add( array, (void*)this );
 
   //printf( " added %s to array at %p\n", root->token, array );
 
@@ -923,10 +892,10 @@
   return added;
 }
 
-Model* Model::GetUnsubscribedModelOfType( stg_model_type_t type )
+Model* Model::GetUnsubscribedModelOfType( stg_model_type_t type ) const
 {  
   if( (this->type == type) && (this->subs == 0) )
-    return this;
+    return (Model*)this; // discard const
 
   // this model is no use. try children recursively
   for( GList* it = children; it; it=it->next )
@@ -959,7 +928,7 @@
   if( (this->type == type) && (!this->used ) )
     {
       this->used = true;
-      return this;
+      return this; // discard const
     }
 
   // this model is no use. try children recursively
@@ -977,7 +946,7 @@
 }
 
 
-Model* Model::GetModel( const char* modelname )
+Model* Model::GetModel( const char* modelname ) const
 {
   // construct the full model name and look it up
   char* buf = new char[TOKEN_MAX];
@@ -1012,7 +981,7 @@
   world->dirty = true; 
 }
 
-PowerPack* Model::FindPowerPack()
+PowerPack* Model::FindPowerPack() const
 {
   if( power_pack )
         return power_pack;

Modified: code/stage/trunk/libstage/model_getset.cc
===================================================================
--- code/stage/trunk/libstage/model_getset.cc   2009-03-28 00:10:37 UTC (rev 
7554)
+++ code/stage/trunk/libstage/model_getset.cc   2009-03-28 21:26:54 UTC (rev 
7555)
@@ -2,11 +2,11 @@
 using namespace Stg;
 
 
-void Model::SetGeom( Geom geom )
+void Model::SetGeom( const Geom& g )
 {
   UnMapWithChildren();
   
-  this->geom = geom;
+  this->geom = g;
   
   blockgroup.CalcSize();
   
@@ -121,12 +121,12 @@
 }
 
 // set the pose of model in global coordinates 
-void Model::SetGlobalPose( Pose gpose )
+void Model::SetGlobalPose( const Pose& gpose )
 {
   SetPose( parent ? parent->GlobalToLocal( gpose ) : gpose );
 }
 
-int Model::SetParent(  Model* newparent)
+int Model::SetParent( Model* newparent)
 {
   // remove the model from its old parent (if it has one)
   if( this->parent )
@@ -143,7 +143,7 @@
 }
 
 // get the model's velocity in the global frame
-Velocity Model::GetGlobalVelocity()
+Velocity Model::GetGlobalVelocity() const
 {
   Pose gpose = GetGlobalPose();
   
@@ -159,7 +159,7 @@
 }
 
 // set the model's velocity in the global frame
-void Model::SetGlobalVelocity( Velocity gv )
+void Model::SetGlobalVelocity( const Velocity& gv )
 {
   Pose gpose = GetGlobalPose();
 
@@ -175,7 +175,7 @@
 }
 
 // get the model's position in the global frame
-Pose Model::GetGlobalPose()
+Pose Model::GetGlobalPose() const
 { 
   // if I'm a top level model, my global pose is my local pose
   if( parent == NULL )
@@ -191,7 +191,7 @@
 }
 
 
-void Model::SetVelocity( Velocity vel )
+void Model::SetVelocity( const Velocity& vel )
 {
 //   assert( ! isnan(vel.x) );
 //   assert( ! isnan(vel.y) );
@@ -217,7 +217,7 @@
 
 
 // set the model's pose in the local frame
-void Model::SetPose( Pose newpose )
+void Model::SetPose( const Pose& newpose )
 {
   // if the pose has changed, we need to do some work
   if( memcmp( &pose, &newpose, sizeof(Pose) ) != 0 )

Modified: code/stage/trunk/libstage/model_position.cc
===================================================================
--- code/stage/trunk/libstage/model_position.cc 2009-03-28 00:10:37 UTC (rev 
7554)
+++ code/stage/trunk/libstage/model_position.cc 2009-03-28 21:26:54 UTC (rev 
7555)
@@ -104,10 +104,9 @@
   // no power consumed until we're subscribed
   this->SetWatts( 0 );
   
-  // sensible position defaults
-  Velocity vel;
-  memset( &vel, 0, sizeof(vel));
-  this->SetVelocity( vel );
+  // zero vel
+  Velocity v; // initially zero
+  this->SetVelocity( v );
   
   this->SetBlobReturn( TRUE );
   
@@ -655,7 +654,7 @@
   Gl::pose_inverse_shift( pose );
   Gl::pose_shift( est_origin );
   
-  glTranslatef( 0,0, 0.02 );
+  glTranslatef( 0,0,0.02 );
 
   // draw waypoints
   for( unsigned int i=0; i < waypoint_count; i++ )

Modified: code/stage/trunk/libstage/model_props.cc
===================================================================
--- code/stage/trunk/libstage/model_props.cc    2009-03-28 00:10:37 UTC (rev 
7554)
+++ code/stage/trunk/libstage/model_props.cc    2009-03-28 21:26:54 UTC (rev 
7555)
@@ -4,7 +4,7 @@
 
 #define MATCH(A,B) (strcmp(A,B)== 0)
 
-void* Model::GetProperty( const char* key )
+void* Model::GetProperty( const char* key ) const
 {
        // see if the key has the predefined-property prefix
        if( strncmp( key, MP_PREFIX, strlen(MP_PREFIX)) == 0 )
@@ -23,7 +23,7 @@
        }
 
        // otherwise it may be an arbitrary named property
-       return g_datalist_get_data( &this->props, key );
+       return g_datalist_get_data( (GData**)&this->props, key ); // cast to 
discard const
 }
 
 int Model::SetProperty( const char* key,
@@ -94,7 +94,7 @@
 }
 
 
-bool Model::GetPropertyFloat( const char* key, float* f, float defaultval )
+bool Model::GetPropertyFloat( const char* key, float* f, float defaultval ) 
const
 { 
   float* fp = (float*)GetProperty( key ); 
   if( fp )
@@ -107,7 +107,7 @@
   return false;
 }
 
-bool Model::GetPropertyInt( const char* key, int* i, int defaultval )
+bool Model::GetPropertyInt( const char* key, int* i, int defaultval ) const
 { 
   int* ip = (int*)GetProperty( key ); 
   if( ip )
@@ -120,7 +120,7 @@
   return false;
 }
 
-bool Model::GetPropertyStr( const char* key, char** c, char* defaultval )
+bool Model::GetPropertyStr( const char* key, char** c, char* defaultval ) const
 {
   char* cp = (char*)GetProperty( key ); 
   

Modified: code/stage/trunk/libstage/powerpack.cc
===================================================================
--- code/stage/trunk/libstage/powerpack.cc      2009-03-28 00:10:37 UTC (rev 
7554)
+++ code/stage/trunk/libstage/powerpack.cc      2009-03-28 21:26:54 UTC (rev 
7555)
@@ -34,25 +34,6 @@
   const double height = 0.5;
   const double width = 0.2;
   
-               // draw an electric zap
-//             glPolygonMode( GL_FRONT, GL_LINE );
-//             glBegin( GL_POLYGON );
-//             glVertex2i( 0, 0 );
-//             glVertex2i( 3, 2 );
-//             glVertex2i( 1, 2 );
-//             glEnd();
-
-//             glVertex2i( 1, 3 );
-//             glVertex2i( 0, 3 );
-//             glVertex2i( 1, 5 );
-//             glVertex2i( 3, 5 );
-//             glVertex2i( 4, 3 );
-//             glVertex2i( 5, 3 );
-//             glVertex2i( 4, 4 );
-//             glVertex2i( 5, 4);
-//             glEnd();
-  //}
-  
   double percent = stored/capacity * 100.0;
   
   const double alpha = 0.5;
@@ -130,7 +111,7 @@
   //gl_draw_string( -0.2, 0, 0, buf );
   
   // ?
-  glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
+  // glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
 }
 
 
@@ -163,7 +144,6 @@
   // we can't transfer more than he can take
   amount = MIN( amount, dest->RemainingCapacity() );
  
-
   //printf( "%s gives %.3f J to %s\n",
   //    mod->Token(), amount, dest->mod->Token() );
   

Modified: code/stage/trunk/libstage/stage.cc
===================================================================
--- code/stage/trunk/libstage/stage.cc  2009-03-28 00:10:37 UTC (rev 7554)
+++ code/stage/trunk/libstage/stage.cc  2009-03-28 21:26:54 UTC (rev 7555)
@@ -72,10 +72,10 @@
 
 
 
-void Stg::stg_print_velocity( Velocity* vel )
+void Stg::stg_print_velocity( const Velocity& vel )
 {
        printf( "velocity [x:%.3f y:%.3f a:%.3f]\n",
-                       vel->x, vel->y, vel->a );
+                       vel.x, vel.y, vel.a );
 }
 
 

Modified: code/stage/trunk/libstage/stage.hh
===================================================================
--- code/stage/trunk/libstage/stage.hh  2009-03-28 00:10:37 UTC (rev 7554)
+++ code/stage/trunk/libstage/stage.hh  2009-03-28 21:26:54 UTC (rev 7555)
@@ -153,10 +153,10 @@
 
   /** convert an angle in radians to degrees. */
   inline double rtod( double r ){ return( r*180.0/M_PI ); }
-
+  
   /** convert an angle in degrees to radians. */
   inline double dtor( double d ){ return( d*M_PI/180.0 ); }
-
+  
   /** Normalize an angle to within +/_ M_PI. */
   inline double normalize( const double a )
   {
@@ -280,7 +280,8 @@
                                  prefix, x,y,z,a );
     }
 
-        bool IsZero(){ return( !(x || y || z || a )); };
+        /* returns true iff all components of the velocity are zero. */
+        bool IsZero() const { return( !(x || y || z || a )); };
         
         void Load( Worldfile* wf, int section, const char* keyword );
         void Save( Worldfile* wf, int section, const char* keyword );
@@ -565,7 +566,7 @@
       database, a bright red color (0xF00) will be returned instead.
   */
   stg_color_t stg_lookup_color(const char *name);
-
+  
   /** returns the sum of [p1] + [p2], in [p1]'s coordinate system */
   inline Pose pose_sum( const Pose& p1, const Pose& p2 )
   {
@@ -590,11 +591,11 @@
   /** Report an error, with a standard, friendly message header */
   void stg_print_err( const char* err );
   /** Print human-readable geometry on stdout */
-  void stg_print_geom( Geom* geom );
+  void stg_print_geom( const Geom& geom );
   /** Print human-readable pose on stdout */
-  void stg_print_pose( Pose* pose );
+  void stg_print_pose( const Pose& pose );
   /** Print human-readable velocity on stdout */
-  void stg_print_velocity( Velocity* vel );
+  void stg_print_velocity( const Velocity& vel );
 
   /** A model creator function. Each model type must define a function of this 
type. */
   typedef Model* (*stg_creator_t)( World*, Model* );
@@ -975,7 +976,7 @@
         
     Worldfile* GetWorldFile(){ return wf; };
         
-    inline virtual bool IsGUI() { return false; }
+    virtual bool IsGUI() { return false; }
         
     virtual void Load( const char* worldfile_path );
     virtual void UnLoad();
@@ -989,7 +990,7 @@
     void CancelQuit(){ quit = false; }
     void CancelQuitAll(){ quit_all = false; }
         
-        void TryCharge( PowerPack* pp, Pose pose );
+        void TryCharge( PowerPack* pp, const Pose& pose );
 
     /** Get the resolution in pixels-per-metre of the underlying
                  discrete raytracing model */ 
@@ -1201,13 +1202,13 @@
     virtual void Draw( void ) const = 0;
     virtual void SetProjection( void ) const = 0;
 
-    inline float yaw( void ) const { return _yaw; }
-    inline float pitch( void ) const { return _pitch; }
-       
-    inline float x( void ) const { return _x; }
-    inline float y( void ) const { return _y; }
-    inline float z( void ) const { return _z; }
-       
+        float yaw( void ) const { return _yaw; }
+        float pitch( void ) const { return _pitch; }
+        
+        float x( void ) const { return _x; }
+        float y( void ) const { return _y; }
+        float z( void ) const { return _z; }
+        
     virtual void reset() = 0;
     virtual void Load( Worldfile* wf, int sec ) = 0;
 
@@ -1235,34 +1236,34 @@
     void strafe( float amount );
     void forward( float amount );
        
-    inline void setPose( float x, float y, float z ) { _x = x; _y = y; _z = z; 
}
-    inline void addPose( float x, float y, float z ) { _x += x; _y += y; _z += 
z; if( _z < 0.1 ) _z = 0.1; }
+     void setPose( float x, float y, float z ) { _x = x; _y = y; _z = z; }
+     void addPose( float x, float y, float z ) { _x += x; _y += y; _z += z; 
if( _z < 0.1 ) _z = 0.1; }
     void move( float x, float y, float z );
-    inline void setFov( float horiz_fov, float vert_fov ) { _horiz_fov = 
horiz_fov; _vert_fov = vert_fov; }
+     void setFov( float horiz_fov, float vert_fov ) { _horiz_fov = horiz_fov; 
_vert_fov = vert_fov; }
     ///update vertical fov based on window aspect and current horizontal fov
-    inline void setAspect( float aspect ) { 
+     void setAspect( float aspect ) { 
       //std::cout << "aspect: " << aspect << " vert: " << _vert_fov << " => " 
<< aspect * _vert_fov << std::endl;
       //_vert_fov = aspect / _horiz_fov;
       _aspect = aspect;
     }
-    inline void setYaw( float yaw ) { _yaw = yaw; }
-    inline float horizFov( void ) const { return _horiz_fov; }
-    inline float vertFov( void ) const { return _vert_fov; }
-    inline void addYaw( float yaw ) { _yaw += yaw; }
-    inline void setPitch( float pitch ) { _pitch = pitch; }
-    inline void addPitch( float pitch ) { _pitch += pitch; if( _pitch < 0 ) 
_pitch = 0; else if( _pitch > 180 ) _pitch = 180; }
+     void setYaw( float yaw ) { _yaw = yaw; }
+     float horizFov( void ) const { return _horiz_fov; }
+     float vertFov( void ) const { return _vert_fov; }
+     void addYaw( float yaw ) { _yaw += yaw; }
+     void setPitch( float pitch ) { _pitch = pitch; }
+     void addPitch( float pitch ) { _pitch += pitch; if( _pitch < 0 ) _pitch = 
0; else if( _pitch > 180 ) _pitch = 180; }
        
-    inline float realDistance( float z_buf_val ) const {
+     float realDistance( float z_buf_val ) const {
       //formula found at http://www.cs.unc.edu/~hoff/techrep/openglz.html
       //Z = Zn*Zf / (Zf - z*(Zf-Zn))
       return _z_near * _z_far / ( _z_far - z_buf_val * ( _z_far - _z_near ) );
     }
-    inline void scroll( float dy ) { _z += dy; }
-    inline float nearClip( void ) const { return _z_near; }
-    inline float farClip( void ) const { return _z_far; }
-    inline void setClip( float near, float far ) { _z_far = far; _z_near = 
near; }
+     void scroll( float dy ) { _z += dy; }
+     float nearClip( void ) const { return _z_near; }
+     float farClip( void ) const { return _z_far; }
+     void setClip( float near, float far ) { _z_far = far; _z_near = near; }
        
-    inline void reset() { setPitch( 70 ); setYaw( 0 ); }
+     void reset() { setPitch( 70 ); setYaw( 0 ); }
        
     void Load( Worldfile* wf, int sec );
     void Save( Worldfile* wf, int sec );
@@ -1284,10 +1285,10 @@
     virtual void SetProjection( void ) const;
   
     void move( float x, float y );
-    inline void setYaw( float yaw ) { _yaw = yaw;      }
-    inline void setPitch( float pitch ) { _pitch = pitch; }
-    inline void addYaw( float yaw ) { _yaw += yaw;     }
-    inline void addPitch( float pitch ) {
+     void setYaw( float yaw ) { _yaw = yaw;    }
+     void setPitch( float pitch ) { _pitch = pitch; }
+     void addYaw( float yaw ) { _yaw += yaw;   }
+     void addPitch( float pitch ) {
       _pitch += pitch;
       if( _pitch > 90 )
                  _pitch = 90;
@@ -1295,13 +1296,13 @@
                  _pitch = 0;
     }
   
-    inline void setScale( float scale ) { _scale = scale; }
-    inline void setPose( float x, float y) { _x = x; _y = y; }
+     void setScale( float scale ) { _scale = scale; }
+     void setPose( float x, float y) { _x = x; _y = y; }
   
     void scale( float scale, float shift_x = 0, float h = 0, float shift_y = 
0, float w = 0 ); 
-    inline void reset( void ) { _pitch = _yaw = 0; }
+     void reset( void ) { _pitch = _yaw = 0; }
   
-    inline float scale() const { return _scale; }
+     float scale() const { return _scale; }
   
     void Load( Worldfile* wf, int sec );
     void Save( Worldfile* wf, int sec );
@@ -1376,7 +1377,7 @@
     virtual void UnLoad();
     virtual bool Save( const char* filename );
        
-    inline virtual bool IsGUI() { return true; }
+    virtual bool IsGUI() { return true; }
 
         virtual Model* RecentlySelectedModel();
 
@@ -1678,7 +1679,7 @@
         void MapWithChildren();
         void UnMapWithChildren();
   
-        int TreeToPtrArray( GPtrArray* array );
+        int TreeToPtrArray( GPtrArray* array ) const;
   
         /** raytraces a single ray from the point and heading identified by
                  pose, in local coords */
@@ -1731,7 +1732,7 @@
 
         Model* ConditionalMove( Pose newpose );
 
-        stg_meters_t ModelHeight();
+        stg_meters_t ModelHeight() const;
 
         bool UpdateDue( void );
         void UpdateIfDue();
@@ -1790,7 +1791,7 @@
         virtual void PopColor(){ world->PopColor(); }
        
 
-        PowerPack* FindPowerPack();
+        PowerPack* FindPowerPack() const;
 
         void RecordRenderPoint( GSList** head, GSList* link, 
                                                                         
unsigned int* c1, unsigned int* c2 );
@@ -1848,7 +1849,7 @@
         void PushFlag( Flag* flag );
         Flag* PopFlag();
        
-        int GetFlagCount(){ return g_list_length( flag_list ); }
+        int GetFlagCount() const { return g_list_length( flag_list ); }
   
         /** Add a pointer to a blinkenlight to the model. */
         void AddBlinkenlight( stg_blinkenlight_t* b )
@@ -1892,33 +1893,33 @@
   
         /** Returns a pointer to this model's parent model, or NULL if this
                  model has no parent */
-        Model* Parent(){ return this->parent; }
+        Model* Parent() const { return this->parent; }
 
-        Model* GetModel( const char* name );
+        Model* GetModel( const char* name ) const;
         //int GuiMask(){ return this->gui_mask; };
 
         /** Returns a pointer to the world that contains this model */
-        World* GetWorld(){ return this->world; }
+        World* GetWorld() const { return this->world; }
   
         /** return the root model of the tree containing this model */
         Model* Root(){ return(  parent ? parent->Root() : this ); }
   
-        bool IsAntecedent( Model* testmod );
+        bool IsAntecedent( const Model* testmod ) const;
        
         /** returns true if model [testmod] is a descendent of this model */
-        bool IsDescendent( Model* testmod );
+        bool IsDescendent( const Model* testmod ) const;
        
         /** returns true if model [testmod] is a descendent or antecedent of 
this model */
-        bool IsRelated( Model* testmod );
+        bool IsRelated( const Model* testmod ) const;
 
         /** get the pose of a model in the global CS */
-        Pose GetGlobalPose();
+        Pose GetGlobalPose() const;
        
         /** get the velocity of a model in the global CS */
-        Velocity GetGlobalVelocity();
+        Velocity GetGlobalVelocity()  const;
        
         /* set the velocity of a model in the global coordinate system */
-        void SetGlobalVelocity(  Velocity gvel );
+        void SetGlobalVelocity( const Velocity& gvel );
        
         /** subscribe to a model's data */
         void Subscribe();
@@ -1927,54 +1928,55 @@
         void Unsubscribe();
        
         /** set the pose of model in global coordinates */
-        void SetGlobalPose(  Pose gpose );
+        void SetGlobalPose(  const Pose& gpose );
        
         /** set a model's velocity in its parent's coordinate system */
-        void SetVelocity(  Velocity vel );
+        void SetVelocity(  const Velocity& vel );
        
         /** set a model's pose in its parent's coordinate system */
-        void SetPose(  Pose pose );
+        void SetPose(  const Pose& pose );
        
         /** add values to a model's pose in its parent's coordinate system */
-        void AddToPose(  Pose pose );
+        void AddToPose(  const Pose& pose );
        
         /** add values to a model's pose in its parent's coordinate system */
         void AddToPose(  double dx, double dy, double dz, double da );
        
         /** set a model's geometry (size and center offsets) */
-        void SetGeom(  Geom src );
+        void SetGeom(  const Geom& src );
   
         /** Set a model's fiducial return value. Values less than zero
                  are not detected by the fiducial sensor. */
         void SetFiducialReturn(  int fid );
   
         /** Get a model's fiducial return value. */
-        int GetFiducialReturn()
-        { return vis.fiducial_return; }
+        int GetFiducialReturn()  const { return vis.fiducial_return; }
   
         /** set a model's fiducial key: only fiducial finders with a
                  matching key can detect this model as a fiducial. */
         void SetFiducialKey(  int key );
        
-        stg_color_t GetColor(){ return color; }
+        stg_color_t GetColor() const { return color; }
         
         /** return a model's unique process-wide identifier */
-        uint32_t GetId() { return id; }
+        uint32_t GetId()  const { return id; }
         
         //  stg_laser_return_t GetLaserReturn(){ return laser_return; }
        
         /** Change a model's parent - experimental*/
         int SetParent( Model* newparent);
        
-        /** Get a model's geometry - it's size and local pose (offset from
-                 origin in local coords) */
-        Geom GetGeom(){ return geom; }
+        /** Get (a copy of) the model's geometry - it's size and local
+                 pose (offset from origin in local coords). */
+        Geom GetGeom() const { return geom; }
        
-        /** Get the pose of a model in its parent's coordinate system  */
-        Pose GetPose(){ return pose; }
+        /** Get (a copy of) the pose of a model in its parent's coordinate
+                 system.  */
+        Pose GetPose() const { return pose; }
        
-        /** Get a model's velocity (in its local reference frame) */
-        Velocity GetVelocity(){ return velocity; }
+        /** Get (a copy of) the model's velocity in its local reference
+                 frame. */
+        Velocity GetVelocity() const { return velocity; }
        
         // guess what these do?
         void SetColor( stg_color_t col );
@@ -1993,7 +1995,7 @@
         void SetWatts( stg_watts_t watts );
         void SetMapResolution( stg_meters_t res );
        
-        bool DataIsFresh(){ return this->data_fresh; }
+        bool DataIsFresh() const { return this->data_fresh; }
        
         /* attach callback functions to data members. The function gets
                 called when the member is changed using SetX() accessor method 
*/
@@ -2042,10 +2044,10 @@
        
         /** named-property interface 
          */
-        void* GetProperty( const char* key );   
-        bool GetPropertyFloat( const char* key, float* f, float defaultval );  
 
-        bool GetPropertyInt( const char* key, int* i, int defaultval );        
 
-        bool GetPropertyStr( const char* key, char** c, char* defaultval );
+        void* GetProperty( const char* key ) const;     
+        bool GetPropertyFloat( const char* key, float* f, float defaultval ) 
const;     
+        bool GetPropertyInt( const char* key, int* i, int defaultval ) const;  
 
+        bool GetPropertyStr( const char* key, char** c, char* defaultval ) 
const;
 
         /** @brief Set a named property of a Stage model.
         
@@ -2084,25 +2086,24 @@
         
         void UnsetProperty( const char* key );
                
-        virtual void Print( char* prefix );
-        virtual const char* PrintWithPose();
+        virtual void Print( char* prefix ) const;
+        virtual const char* PrintWithPose() const;
        
-        /** Convert a pose in the world coordinate system into a model's
-                 local coordinate system. Overwrites [pose] with the new
-                 coordinate. */
-        Pose GlobalToLocal( const Pose pose );
-       
+        /** Given a global pose, returns that pose in the model's local
+                 coordinate system. */
+        Pose GlobalToLocal( const Pose& pose ) const;
+        
         /** Return the global pose (i.e. pose in world coordinates) of a
                  pose specified in the model's local coordinate system */
-        Pose LocalToGlobal( const Pose pose );
+        Pose LocalToGlobal( const Pose& pose ) const;
        
         /** Return the 3d point in world coordinates of a 3d point
                  specified in the model's local coordinate system */
-        stg_point3_t LocalToGlobal( const stg_point3_t local );
+        stg_point3_t LocalToGlobal( const stg_point3_t local ) const;
        
         /** returns the first descendent of this model that is unsubscribed
                  and has the type indicated by the string */
-        Model* GetUnsubscribedModelOfType( const stg_model_type_t type );
+        Model* GetUnsubscribedModelOfType( const stg_model_type_t type ) const;
        
         /** returns the first descendent of this model that is unused
                  and has the type indicated by the string. This model is 
tagged as used. */
@@ -2110,7 +2111,7 @@
   
         /** Returns the value of the model's stall boolean, which is true
                  iff the model has crashed into another model */
-        bool Stalled(){ return this->stall; }
+        bool Stalled() const { return this->stall; }
   };
 
 
@@ -2568,25 +2569,25 @@
         virtual void DataVisualize( Camera* cam );
        
         ///width of captured image
-        inline int getWidth( void ) const { return _width; }
+         int getWidth( void ) const { return _width; }
        
         ///height of captured image
-        inline int getHeight( void ) const { return _height; }
+         int getHeight( void ) const { return _height; }
        
         ///get reference to camera used
-        inline const PerspectiveCamera& getCamera( void ) const { return 
_camera; }
+         const PerspectiveCamera& getCamera( void ) const { return _camera; }
        
         ///get a reference to camera depth buffer
-        inline const GLfloat* FrameDepth() const { return _frame_data; }
+         const GLfloat* FrameDepth() const { return _frame_data; }
        
         ///get a reference to camera color image. 3 bytes (RGB) per pixel
-        inline const GLubyte* FrameColor() const { return _frame_color_data; }
+         const GLubyte* FrameColor() const { return _frame_color_data; }
        
         ///change the pitch
-        inline void setPitch( float pitch ) { _pitch_offset = pitch; 
_valid_vertexbuf_cache = false; }
+         void setPitch( float pitch ) { _pitch_offset = pitch; 
_valid_vertexbuf_cache = false; }
        
         ///change the yaw
-        inline void setYaw( float yaw ) { _yaw_offset = yaw; 
_valid_vertexbuf_cache = false; }
+         void setYaw( float yaw ) { _yaw_offset = yaw; _valid_vertexbuf_cache 
= false; }
   };
 
   // POSITION MODEL --------------------------------------------------------


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
_______________________________________________
Playerstage-commit mailing list
Playerstage-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to