]> git.tdb.fi Git - r2c2.git/blobdiff - source/shoppinglist/main.cpp
Support setting routes for trains
[r2c2.git] / source / shoppinglist / main.cpp
index a87e2f8cab7a817db5d78ed36b6ae0bade96fe00..a56326c937e16a58fc8e597f931ac0e891599238 100644 (file)
@@ -1,9 +1,15 @@
-#include <fstream>
+/* $Id$
+
+This file is part of the MSP Märklin suite
+Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa
+Distributed under the GPL
+*/
+
 #include <iostream>
 #include <map>
 #include <msp/core/getopt.h>
-#include <msp/parser/loader.h>
-#include <msp/parser/parser.h>
+#include <msp/datafile/loader.h>
+#include <msp/datafile/parser.h>
 
 using namespace std;
 using namespace Msp;
@@ -14,7 +20,7 @@ public:
        ShoppingList(int, char **);
        void print(ostream &);
 private:
-       class InventoryLoader: public Parser::Loader
+       class InventoryLoader: public DataFile::Loader
        {
        public:
                InventoryLoader(ShoppingList &);
@@ -24,7 +30,7 @@ private:
                void track(unsigned, unsigned);
        };
 
-       class LayoutLoader: public Parser::Loader
+       class LayoutLoader: public DataFile::Loader
        {
        public:
                LayoutLoader(ShoppingList &);
@@ -34,10 +40,8 @@ private:
                void track(unsigned);
        };
 
-       typedef map<unsigned, unsigned> TrackMap;
-
-       TrackMap inventory;
-       TrackMap layout;
+       map<unsigned, unsigned> inventory;
+       map<unsigned, unsigned> layout;
 
        void load_inventory(const string &);
        void load_layout(const string &);
@@ -63,16 +67,16 @@ ShoppingList::ShoppingList(int argc, char **argv)
 
 void ShoppingList::load_inventory(const string &fn)
 {
-       ifstream in(fn.c_str());
-       Parser::Parser parser(in, fn);
+       IO::File in(fn);
+       DataFile::Parser parser(in, fn);
        InventoryLoader il(*this);
        il.load(parser);
 }
 
 void ShoppingList::load_layout(const string &fn)
 {
-       ifstream in(fn.c_str());
-       Parser::Parser parser(in, fn);
+       IO::File in(fn);
+       DataFile::Parser parser(in, fn);
        LayoutLoader ll(*this);
        ll.load(parser);
 }
@@ -80,9 +84,9 @@ void ShoppingList::load_layout(const string &fn)
 void ShoppingList::print(ostream &out)
 {
        out<<"// Need to get:\n";
-       for(TrackMap::iterator i=layout.begin(); i!=layout.end(); ++i)
+       for(map<unsigned, unsigned>::iterator i=layout.begin(); i!=layout.end(); ++i)
        {
-               TrackMap::iterator j=inventory.find(i->first);
+               map<unsigned, unsigned>::iterator j=inventory.find(i->first);
                if(j!=inventory.end())
                {
                        if(j->second<i->second)
@@ -93,17 +97,17 @@ void ShoppingList::print(ostream &out)
        }
 
        out<<"// Pre-existing:\n";
-       for(TrackMap::iterator i=layout.begin(); i!=layout.end(); ++i)
+       for(map<unsigned, unsigned>::iterator i=layout.begin(); i!=layout.end(); ++i)
        {
-               TrackMap::iterator j=inventory.find(i->first);
+               map<unsigned, unsigned>::iterator j=inventory.find(i->first);
                if(j!=inventory.end())
                        out<<"track "<<i->first<<' '<<min(i->second,j->second)<<";\n";
        }
 
        out<<"// Unused:\n";
-       for(TrackMap::iterator i=inventory.begin(); i!=inventory.end(); ++i)
+       for(map<unsigned, unsigned>::iterator i=inventory.begin(); i!=inventory.end(); ++i)
        {
-               TrackMap::iterator j=layout.find(i->first);
+               map<unsigned, unsigned>::iterator j=layout.find(i->first);
                if(j!=layout.end())
                {
                        if(j->second<i->second)
@@ -130,6 +134,7 @@ ShoppingList::LayoutLoader::LayoutLoader(ShoppingList &s):
 {
        add("track", &LayoutLoader::track);
        add("base");
+       add("route");
 }
 
 void ShoppingList::LayoutLoader::track(unsigned part)