00001 #ifndef __J2K__Track_HPP__
00002 #define __J2K__Track_HPP__
00003
00004 #include <j2k/Fred/Standard.hpp>
00005
00006 class Track;
00007 class TrackArray;
00008 class Train;
00009 class Semaphore;
00010
00011 #include <j2k/nto/TrackStruct.hpp>
00012 #include <j2k/nto/Semaphore.hpp>
00013 #include <j2k/nto/Train.hpp>
00014
00015 class Track
00016 {
00017 public:
00018 Track( int index = 0 );
00019 Track( track_segment_t seg );
00020 Track( track_init_t init, track_segment_t seg, double* length );
00021
00022 virtual ~Track();
00023
00024
00025 long setTrain();
00026 long setTrain( Train* t, long reserved = 1 );
00027
00028 BOOL isEmpty();
00029 BOOL isFull();
00030 long isReserved();
00031
00032 Train* getTrain();
00033
00034 long getLeft( size_t index = 0 );
00035 long getRight( size_t index = 0 );
00036
00037 long getLeftEmpty( Track** tracks );
00038 long getRightEmpty( Track** tracks );
00039
00040 long getMaxLeft();
00041 long getMaxRight();
00042
00043 double getLength( size_t index = 0 );
00044 long getLengthName( size_t index = 0 );
00045
00046 track_type_t getType( size_t index = 0 );
00047
00048 protected:
00049 int index;
00050 long reserved;
00051
00052 Train* current;
00053 double length[ 10 ];
00054
00055 Semaphore occupied;
00056 Semaphore lock;
00057
00058 track_segment_t segment;
00059
00060 private:
00061 Track( const Track& src );
00062 const Track& operator=( const Track& src );
00063 };
00064
00065 #endif
00066