]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/train.h
Split block allocation to a separate class
[r2c2.git] / source / libr2c2 / train.h
index 461a27e583146bde1080e64acbb6384b0c33a3e6..94348e105c551a76edcd0730af57aac7ed3dd18b 100644 (file)
@@ -6,7 +6,7 @@
 #include <msp/datafile/objectloader.h>
 #include <msp/time/timestamp.h>
 #include "block.h"
-#include "blockiter.h"
+#include "blockallocator.h"
 #include "controller.h"
 #include "trainai.h"
 
@@ -30,8 +30,7 @@ public:
                Loader(Train &);
        private:
                virtual void finish();
-               void block(unsigned);
-               void block_hint(unsigned);
+               void blocks();
                void name(const std::string &);
                void quantized_speed();
                void router();
@@ -46,8 +45,6 @@ public:
        sigc::signal<void, Block &> signal_advanced;
 
 private:
-       typedef std::list<BlockIter> BlockList;
-
        Layout &layout;
        const VehicleType &loco_type;
        unsigned address;
@@ -55,11 +52,7 @@ private:
        std::string name;
        const Train *preceding_train;
        std::vector<Vehicle *> vehicles;
-       BlockList blocks;
-       BlockList::iterator cur_blocks_end;
-       Block *pending_block;
-       Block *stop_at_block;
-       bool reserving;
+       BlockAllocator allocator;
        bool advancing;
        Controller *controller;
        std::list<TrainAI *> ais;
@@ -122,13 +115,12 @@ public:
 
        void place(Block &, unsigned);
        void unplace();
-       bool is_placed() const { return !blocks.empty(); }
+       bool is_placed() const { return !allocator.empty(); }
        void stop_at(Block *);
        bool free_block(Block &);
        void free_noncritical_blocks();
-       const BlockIter &get_head_block() const;
-       const BlockIter &get_tail_block() const;
-       int get_entry_to_block(const Block &) const;
+       void reserve_more();
+       const BlockAllocator &get_block_allocator() const { return allocator; }
        float get_reserved_distance() const;
 
        void tick(const Msp::Time::TimeStamp &, const Msp::Time::TimeDelta &);
@@ -139,16 +131,9 @@ private:
        void loco_speed_event(unsigned, unsigned, bool);
        void loco_func_event(unsigned, unsigned, bool);
        void block_state_changed(Block &, Block::State);
-       void turnout_path_changed(Track &);
        void halt_event(bool);
        void block_reserved(const Block &, const Train *);
-public:
-       void reserve_more();
-private:
        float get_reserved_distance_until(const Block *, bool) const;
-       void release_blocks();
-       void release_blocks(BlockList::iterator, BlockList::iterator);
-       void reverse_blocks(BlockList &) const;
 };
 
 } // namespace R2C2