-/* $Id$
-
-This file is part of R²C²
-Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
#include <map>
#include <msp/core/application.h>
#include <msp/core/getopt.h>
#include <msp/datafile/loader.h>
#include <msp/datafile/parser.h>
#include <msp/io/print.h>
-#include "libr2c2/articlenumber.h"
using namespace std;
using namespace Msp;
-using namespace R2C2;
-class ShoppingList: public Application
+class ShoppingList: public RegisteredApplication<ShoppingList>
{
private:
class InventoryLoader: public DataFile::Loader
private:
ShoppingList &sl;
- void track(ArticleNumber, int);
+ void track(const string &, int);
};
class LayoutLoader: public DataFile::Loader
private:
ShoppingList &sl;
- void track(ArticleNumber);
+ void track(const string &);
};
- map<ArticleNumber, unsigned> inventory;
- map<ArticleNumber, unsigned> layout;
-
- static Application::RegApp<ShoppingList> reg;
+ map<string, unsigned> inventory;
+ map<string, unsigned> layout;
public:
ShoppingList(int, char **);
};
-Application::RegApp<ShoppingList> ShoppingList::reg;
-
ShoppingList::ShoppingList(int argc, char **argv)
{
string inv_fn = "inventory";
int ShoppingList::main()
{
IO::print("// Need to get:\n");
- for(map<ArticleNumber, unsigned>::iterator i=layout.begin(); i!=layout.end(); ++i)
+ for(map<string, unsigned>::iterator i=layout.begin(); i!=layout.end(); ++i)
{
- map<ArticleNumber, unsigned>::iterator j=inventory.find(i->first);
+ map<string, unsigned>::iterator j=inventory.find(i->first);
if(j!=inventory.end())
{
if(j->second<i->second)
- IO::print("track %d %d;\n", i->first, i->second-j->second);
+ IO::print("track \"%s\" %d;\n", i->first, i->second-j->second);
}
else
- IO::print("track %d %d;\n", i->first, i->second);
+ IO::print("track \"%s\" %d;\n", i->first, i->second);
}
IO::print("// Pre-existing:\n");
- for(map<ArticleNumber, unsigned>::iterator i=layout.begin(); i!=layout.end(); ++i)
+ for(map<string, unsigned>::iterator i=layout.begin(); i!=layout.end(); ++i)
{
- map<ArticleNumber, unsigned>::iterator j=inventory.find(i->first);
+ map<string, unsigned>::iterator j=inventory.find(i->first);
if(j!=inventory.end())
- IO::print("track %d %d;\n", i->first, min(i->second, j->second));
+ IO::print("track \"%s\" %d;\n", i->first, min(i->second, j->second));
}
IO::print("// Unused:\n");
- for(map<ArticleNumber, unsigned>::iterator i=inventory.begin(); i!=inventory.end(); ++i)
+ for(map<string, unsigned>::iterator i=inventory.begin(); i!=inventory.end(); ++i)
{
- map<ArticleNumber, unsigned>::iterator j=layout.find(i->first);
+ map<string, unsigned>::iterator j=layout.find(i->first);
if(j!=layout.end())
{
if(j->second<i->second)
- IO::print("track %d %d;\n", i->first, i->second-j->second);
+ IO::print("track \"%s\" %d;\n", i->first, i->second-j->second);
}
else
- IO::print("track %d %d;\n", i->first, i->second);
+ IO::print("track \"%s\" %d;\n", i->first, i->second);
}
return 0;
add("track", &InventoryLoader::track);
}
-void ShoppingList::InventoryLoader::track(ArticleNumber art_nr, int count)
+void ShoppingList::InventoryLoader::track(const string &n, int count)
{
- sl.inventory[art_nr] += count;
+ sl.inventory[n] += count;
}
{
add("track", &LayoutLoader::track);
add("base");
+ add("beamgate");
add("route");
+ add("signal");
+ add("terrain");
add("zone");
}
-void ShoppingList::LayoutLoader::track(ArticleNumber art_nr)
+void ShoppingList::LayoutLoader::track(const string &n)
{
- ++sl.layout[art_nr];
+ ++sl.layout[n];
}