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

C:/temp/src/j2k/QNX4/PositionTracker.hpp

Go to the documentation of this file.
00001 class PositionTracker
00002 {
00003 public:
00004 
00005     PostionTracker();
00006     virtual PositionTracker();
00007 
00008     int Wrap( int val, int max ) {
00009         if ( val < 0   ) return (val + max + 1);
00010         if ( val > max ) return (val - max - 1);
00011         return val;
00012     }
00013 
00014     int Check( int bit, int val ) {
00015         if ( bit < 0  ||  bit > 65536 ) return -1;
00016         int bit2 = 1 << bit;
00017         return ( ( val && bit2 ) == bit2 );
00018 
00019       // int bit2 = 2 ^ bit;
00020       // return ( ( val && bit2 ) == bit2 );
00021     }
00022 
00023     int UpdateTrack() {
00024       
00025         int r = board->Read();
00026         int i = 0;
00027         int t = 0;
00028         int Tracks[ 16 ];
00029         int OldTracks[ 16 ];
00030 
00031         for( int k = 1; k < 65536; k *= 2 ) { // 16
00032             t = ( ( r & k) == k );
00033             OldTracks[ i ] = Tracks[ i ];
00034             Tracks[ i ] = t;
00035             i++;
00036         }
00037 
00038         for( int m = 0; m < 3; m++ ) {  // 3
00039             int pos    = Train[ m ]->position;
00040             int prev   = Train[ m ]->prev_position;
00041             int prevT1 = Wrap( tr - 1, 15 );
00042             int nextT1 = Wrap( tr + 1, 15 );
00043             int prevT3 = Wrap( tr - 3, 15 );
00044             int nextT3 = Wrap( tr + 3, 15 );
00045 
00046             Train[ m ]->prev_position = pos;
00047 
00048             if ( Tracks[ pos ] ) {  // Still there
00049                 Tracks[ pos ] = m;
00050             } else if ( OldTracks[ nextT1 ] == m ) { // Train was After
00051                     Tracks[ pos ] = m;
00052             } else if ( OldTracks[ prevT1 ] == m ) { // Train was Before
00053                     Tracks[ pos ] = m;
00054             } else if ( OldTracks[ nextT3 ] == m ) { // Train was After by 3
00055                     Tracks[ pos ] = m;
00056             } else if ( OldTracks[ prevT3 ] == m ) { // Train was Before by 3
00057                     Tracks[ pos ] = m;
00058             } 
00059         }
00060     }
00061 };

Generated on Sun Oct 14 18:46:37 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001