]> git.tdb.fi Git - r2c2.git/blob - source/libmarklin/tracktype.h
df6ba022caf6addea2cc3ad511c4153bb98fcffc
[r2c2.git] / source / libmarklin / tracktype.h
1 #ifndef LIBMARKLIN_TRACKTYPE_H_
2 #define LIBMARKLIN_TRACKTYPE_H_
3
4 #include <msp/datafile/loader.h>
5 #include "endpoint.h"
6 #include "trackpart.h"
7
8 namespace Marklin {
9
10 class TrackType
11 {
12 public:
13         class Loader: public Msp::DataFile::Loader
14         {
15         private:
16                 TrackType &ttype;
17
18         public:
19                 Loader(TrackType &);
20                 TrackType &get_object() { return ttype; }
21         private:
22                 virtual void finish();
23
24                 void part();
25                 void position(float, float, float);
26         };
27
28 private:
29         unsigned     art_nr;
30         std::string  description;
31         std::vector<TrackPart> parts;
32         std::vector<Endpoint> endpoints;
33
34 public:
35         TrackType(unsigned);
36
37         unsigned get_article_number() const { return art_nr; }
38         const std::string &get_description() const { return description; }
39         float get_total_length() const;
40         float get_route_length(int) const;
41         unsigned get_n_routes() const;
42         const std::vector<TrackPart> &get_parts() const { return parts; }
43         const std::vector<Endpoint>  &get_endpoints() const { return endpoints; }
44
45 private:
46         void  collect_endpoints();
47 };
48
49 } // namespace Marklin
50
51 #endif