X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Fblock.h;h=41f904096c0820a33c95bb96cce1df0cd1a60f77;hb=9b05c573a38639827697fe393d55b7c76f5bde45;hp=f18ba8d6f49d52a53844045078aa17f5dd766a96;hpb=52cbe8d99669f843f8f75c51128e2748584dd03a;p=r2c2.git diff --git a/source/libmarklin/block.h b/source/libmarklin/block.h index f18ba8d..41f9040 100644 --- a/source/libmarklin/block.h +++ b/source/libmarklin/block.h @@ -1,5 +1,12 @@ -#ifndef MARKLIN_3D_BLOCK_H_ -#define MARKLIN_3D_BLOCK_H_ +/* $Id$ + +This file is part of the MSP Märklin suite +Copyright © 2006-2010 Mikkosoft Productions, Mikko Rasa +Distributed under the GPL +*/ + +#ifndef LIBMARKLIN_BLOCK_H_ +#define LIBMARKLIN_BLOCK_H_ #include #include @@ -7,47 +14,56 @@ namespace Marklin { +class Layout; +class Route; +class TrackIter; class Train; -class TrafficManager; class Block { public: struct Endpoint { - Track *track; + Track *track; unsigned track_ep; - Block *link; - unsigned routes; + Block *link; + unsigned paths; Endpoint(Track *, unsigned); }; private: - TrafficManager &trfc_mgr; - unsigned id; - unsigned sensor_id; - std::set tracks; + Layout &layout; + unsigned id; + unsigned sensor_id; + unsigned turnout_id; + std::set tracks; std::vector endpoints; - const Train *train; + Train *train; public: - Block(TrafficManager &, Track &); + Block(Layout &, Track &); + ~Block(); + + unsigned get_id() const { return id; } unsigned get_sensor_id() const { return sensor_id; } + unsigned get_turnout_id() const { return turnout_id; } const std::set &get_tracks() const { return tracks; } + bool has_track(Track &) const; const std::vector &get_endpoints() const { return endpoints; } - int get_endpoint_by_link(const Block &) const; - int traverse(unsigned) const; + const Endpoint &get_endpoint(unsigned) const; + int get_endpoint_by_link(Block &) const; + float get_path_length(unsigned, const Route * = 0) const; void check_link(Block &); + void break_link(Block &); Block *get_link(unsigned) const; - bool reserve(const Train *); + bool reserve(Train *); + Train *get_train() const { return train; } void print_debug(); private: - void find_routes(Track &, unsigned, unsigned, std::set &); - - static unsigned next_id; + void find_paths(TrackIter, unsigned); + void determine_id(); }; -typedef std::list BlockSeq; } // namespace Marklin