]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/track.cpp
Maintain a Block pointer in Track
[r2c2.git] / source / libmarklin / track.cpp
index 6938820fafc26fe1b43c86405fc1703762f10364..5f1ca438644eea5d094a09dcf61e019fe954f5f2 100644 (file)
@@ -6,6 +6,7 @@ Distributed under the GPL
 */
 
 #include <cmath>
+#include "block.h"
 #include "driver.h"
 #include "layout.h"
 #include "track.h"
@@ -19,6 +20,7 @@ namespace Marklin {
 Track::Track(Layout &l, const TrackType &t):
        layout(l),
        type(t),
+       block(0),
        rot(0),
        slope(0),
        flex(false),
@@ -41,6 +43,24 @@ Track::~Track()
        layout.remove_track(*this);
 }
 
+void Track::set_block(Block *b)
+{
+       if(b && !b->has_track(*this))
+               throw InvalidParameterValue("Track is not in the Block");
+       if(!b && block && block->has_track(*this))
+               throw InvalidState("Track is still in a Block");
+
+       block = b;
+}
+
+Block &Track::get_block() const
+{
+       if(!block)
+               throw InvalidState("No Block");
+
+       return *block;
+}
+
 void Track::set_position(const Point &p)
 {
        pos = p;