X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fblock.h;h=f255e43f2e2421fb18b81bd9c0a6e862e0218a63;hb=399b48a7a80dafde49e7530ff8dfd2820232a73f;hp=3592992c03ca16d152b61566760c04a71ad0fe8d;hpb=b14059de03324aecde3efc649293d98ce5b7aaf2;p=r2c2.git diff --git a/source/libr2c2/block.h b/source/libr2c2/block.h index 3592992..f255e43 100644 --- a/source/libr2c2/block.h +++ b/source/libr2c2/block.h @@ -1,56 +1,41 @@ -/* $Id$ - -This file is part of R²C² -Copyright © 2006-2010 Mikkosoft Productions, Mikko Rasa -Distributed under the GPL -*/ - #ifndef LIBR2C2_BLOCK_H_ #define LIBR2C2_BLOCK_H_ #include #include #include "track.h" +#include "trackchain.h" namespace R2C2 { class Layout; class Route; +class TrackCircuit; class TrackIter; class Train; -class Block: public sigc::trackable +class Block: public TrackChain { public: - enum State - { - INACTIVE, - MAYBE_INACTIVE, - MAYBE_ACTIVE, - ACTIVE - }; - struct Endpoint { Track *track; unsigned track_ep; Block *link; - unsigned paths; Endpoint(Track *, unsigned); + + TrackIter track_iter() const; }; sigc::signal signal_reserved; - sigc::signal signal_state_changed; private: - Layout &layout; unsigned id; - unsigned sensor_id; - unsigned turnout_id; - State state; - Msp::Time::TimeDelta state_confirm_timeout; - std::set tracks; + unsigned sensor_addr; + unsigned turnout_addr; + bool conflict; + TrackCircuit *sensor; std::vector endpoints; Train *train; @@ -58,12 +43,17 @@ public: Block(Layout &, Track &); ~Block(); + virtual void set_name(const std::string &); + +private: + virtual void on_track_added(Track &); + virtual Validity check_validity(Track &) const; + +public: unsigned get_id() const { return id; } - unsigned get_sensor_id() const { return sensor_id; } - unsigned get_turnout_id() const { return turnout_id; } - State get_state() const { return state; } - const std::set &get_tracks() const { return tracks; } - bool has_track(Track &) const; + unsigned get_sensor_address() const { return sensor_addr; } + unsigned get_turnout_address() const { return turnout_addr; } + TrackCircuit *get_sensor() const { return sensor; } const std::vector &get_endpoints() const { return endpoints; } const Endpoint &get_endpoint(unsigned) const; int get_endpoint_by_link(Block &) const; @@ -73,11 +63,11 @@ public: Block *get_link(unsigned) const; bool reserve(Train *); Train *get_train() const { return train; } - void tick(const Msp::Time::TimeDelta &); private: - void find_paths(TrackIter, unsigned); void determine_id(); - void sensor_event(unsigned, bool); + +public: + virtual Msp::DataFile::Statement save_reference() const; }; } // namespace R2C2