X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Flayout.cpp;h=25568d6e6fb23d51e86ad003cf36d12c466314b9;hb=e392d397f6b86a49a05e9738357ccbfc2a922f01;hp=f1bc3211bab00b5a8e6d4403f8d0ad3607694834;hpb=f74ce147edde73319e55475433adb8e1d87b7201;p=r2c2.git diff --git a/source/libmarklin/layout.cpp b/source/libmarklin/layout.cpp index f1bc321..25568d6 100644 --- a/source/libmarklin/layout.cpp +++ b/source/libmarklin/layout.cpp @@ -75,9 +75,16 @@ void Layout::remove_track(Track &t) unsigned Layout::allocate_turnout_id(bool dbl) { - unsigned result = next_turnout_id++; - if(dbl) - ++next_turnout_id; + set used_ids; + for(set::const_iterator i=tracks.begin(); i!=tracks.end(); ++i) + if((*i)->get_turnout_id()) + used_ids.insert((*i)->get_turnout_id()); + + unsigned result = next_turnout_id; + while(used_ids.count(result) || (dbl && used_ids.count(result+1))) + ++result; + next_turnout_id = result+1+dbl; + return result; } @@ -289,8 +296,10 @@ Layout::Loader::Loader(Layout &l): add("base", &Layout::base); add("route", static_cast(&Loader::route)); add("route", static_cast(&Loader::route)); - add("track", &Loader::track); - add("train", &Loader::train); + add("track", static_cast(&Loader::track)); + add("track", static_cast(&Loader::track)); + add("train", static_cast(&Loader::train)); + add("train", static_cast(&Loader::train)); } void Layout::Loader::finish() @@ -313,6 +322,11 @@ void Layout::Loader::route(const string &n) } void Layout::Loader::track(unsigned art_nr) +{ + track(ArticleNumber(art_nr)); +} + +void Layout::Loader::track(ArticleNumber art_nr) { Track *trk = new Track(obj, obj.catalogue.get_track(art_nr)); load_sub(*trk); @@ -323,6 +337,11 @@ void Layout::Loader::track(unsigned art_nr) } void Layout::Loader::train(unsigned art_nr, unsigned addr) +{ + train(ArticleNumber(art_nr), addr); +} + +void Layout::Loader::train(ArticleNumber art_nr, unsigned addr) { Train *trn = new Train(obj, obj.catalogue.get_vehicle(art_nr), addr); load_sub(*trn);