]> git.tdb.fi Git - r2c2.git/blobdiff - source/shoppinglist/main.cpp
Add a pathfinder function to Route
[r2c2.git] / source / shoppinglist / main.cpp
index 5f88780a7c02e937ca4fcfe4bc7cc36fcfa84f54..449ef8be4d1f6042fec6a4be625d97ca651193a9 100644 (file)
@@ -1,8 +1,15 @@
-#include <iostream>
+/* $Id$
+
+This file is part of the MSP Märklin suite
+Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa
+Distributed under the GPL
+*/
+
 #include <map>
 #include <msp/core/getopt.h>
 #include <msp/datafile/loader.h>
 #include <msp/datafile/parser.h>
+#include <msp/io/print.h>
 
 using namespace std;
 using namespace Msp;
@@ -11,7 +18,7 @@ class ShoppingList
 {
 public:
        ShoppingList(int, char **);
-       void print(ostream &);
+       void print(IO::Base &);
 private:
        class InventoryLoader: public DataFile::Loader
        {
@@ -33,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 &);
@@ -45,7 +50,7 @@ private:
 int main(int argc, char **argv)
 {
        ShoppingList sl(argc, argv);
-       sl.print(cout);
+       sl.print(IO::cout);
        return 0;
 }
 
@@ -76,40 +81,40 @@ void ShoppingList::load_layout(const string &fn)
        ll.load(parser);
 }
 
-void ShoppingList::print(ostream &out)
+void ShoppingList::print(IO::Base &out)
 {
-       out<<"// Need to get:\n";
-       for(TrackMap::iterator i=layout.begin(); i!=layout.end(); ++i)
+       IO::print(out, "// Need to get:\n");
+       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)
-                               out<<"track "<<i->first<<' '<<i->second-j->second<<";\n";
+                               IO::print(out, "track %d %d;\n", i->first, i->second-j->second);
                }
                else
-                       out<<"track "<<i->first<<' '<<i->second<<";\n";
+                       IO::print(out, "track %d %d;\n", i->first, i->second);
        }
 
-       out<<"// Pre-existing:\n";
-       for(TrackMap::iterator i=layout.begin(); i!=layout.end(); ++i)
+       IO::print(out, "// Pre-existing:\n");
+       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";
+                       IO::print(out, "track %d %d;\n", i->first, min(i->second, j->second));
        }
 
-       out<<"// Unused:\n";
-       for(TrackMap::iterator i=inventory.begin(); i!=inventory.end(); ++i)
+       IO::print(out, "// Unused:\n");
+       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)
-                               out<<"track "<<i->first<<' '<<i->second-j->second<<";\n";
+                               IO::print(out, "track %d %d;\n", i->first, i->second-j->second);
                }
                else
-                       out<<"track "<<i->first<<' '<<i->second<<";\n";
+                       IO::print(out, "track %d %d;\n", i->first, i->second);
        }
 }
 
@@ -129,6 +134,7 @@ ShoppingList::LayoutLoader::LayoutLoader(ShoppingList &s):
 {
        add("track", &LayoutLoader::track);
        add("base");
+       add("route");
 }
 
 void ShoppingList::LayoutLoader::track(unsigned part)