X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fshoppinglist%2Fmain.cpp;h=4ebd956d824e7a73976fb3000e7c63094d44c7cb;hb=f86223ef906cad5c492c95d069550f262f5b3dff;hp=a87e2f8cab7a817db5d78ed36b6ae0bade96fe00;hpb=6c61179fe09af2f5366d50f10aadbf5f83438087;p=r2c2.git diff --git a/source/shoppinglist/main.cpp b/source/shoppinglist/main.cpp index a87e2f8..4ebd956 100644 --- a/source/shoppinglist/main.cpp +++ b/source/shoppinglist/main.cpp @@ -1,138 +1,142 @@ -#include -#include #include +#include #include -#include -#include +#include +#include +#include +#include "libr2c2/articlenumber.h" using namespace std; using namespace Msp; +using namespace R2C2; -class ShoppingList +class ShoppingList: public RegisteredApplication { -public: - ShoppingList(int, char **); - void print(ostream &); private: - class InventoryLoader: public Parser::Loader + class InventoryLoader: public DataFile::Loader { public: InventoryLoader(ShoppingList &); private: ShoppingList &sl; - void track(unsigned, unsigned); + void track(ArticleNumber, int); }; - class LayoutLoader: public Parser::Loader + class LayoutLoader: public DataFile::Loader { public: LayoutLoader(ShoppingList &); private: ShoppingList &sl; - void track(unsigned); + void track(ArticleNumber); }; - typedef map TrackMap; - - TrackMap inventory; - TrackMap layout; + map inventory; + map layout; +public: + ShoppingList(int, char **); + int main(); +private: void load_inventory(const string &); void load_layout(const string &); }; -int main(int argc, char **argv) -{ - ShoppingList sl(argc, argv); - sl.print(cout); - return 0; -} ShoppingList::ShoppingList(int argc, char **argv) { - string inv_fn="inventory"; + string inv_fn = "inventory"; GetOpt getopt; getopt.add_option('i', "inventory", inv_fn, GetOpt::REQUIRED_ARG); - getopt(argc,argv); + getopt(argc, argv); load_inventory(inv_fn); load_layout(getopt.get_args().front()); } -void ShoppingList::load_inventory(const string &fn) +int ShoppingList::main() { - ifstream in(fn.c_str()); - Parser::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); - LayoutLoader ll(*this); - ll.load(parser); -} - -void ShoppingList::print(ostream &out) -{ - out<<"// Need to get:\n"; - for(TrackMap::iterator i=layout.begin(); i!=layout.end(); ++i) + IO::print("// Need to get:\n"); + for(map::iterator i=layout.begin(); i!=layout.end(); ++i) { - TrackMap::iterator j=inventory.find(i->first); + map::iterator j=inventory.find(i->first); if(j!=inventory.end()) { if(j->secondsecond) - out<<"track "<first<<' '<second-j->second<<";\n"; + IO::print("track \\%d %d;\n", i->first, i->second-j->second); } else - out<<"track "<first<<' '<second<<";\n"; + IO::print("track \\%d %d;\n", i->first, i->second); } - out<<"// Pre-existing:\n"; - for(TrackMap::iterator i=layout.begin(); i!=layout.end(); ++i) + IO::print("// Pre-existing:\n"); + for(map::iterator i=layout.begin(); i!=layout.end(); ++i) { - TrackMap::iterator j=inventory.find(i->first); + map::iterator j=inventory.find(i->first); if(j!=inventory.end()) - out<<"track "<first<<' '<second,j->second)<<";\n"; + IO::print("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("// Unused:\n"); + for(map::iterator i=inventory.begin(); i!=inventory.end(); ++i) { - TrackMap::iterator j=layout.find(i->first); + map::iterator j=layout.find(i->first); if(j!=layout.end()) { if(j->secondsecond) - out<<"track "<first<<' '<second-j->second<<";\n"; + IO::print("track \\%d %d;\n", i->first, i->second-j->second); } else - out<<"track "<first<<' '<second<<";\n"; + IO::print("track \\%d %d;\n", i->first, i->second); } + + return 0; +} + +void ShoppingList::load_inventory(const string &fn) +{ + IO::File in(fn); + DataFile::Parser parser(in, fn); + InventoryLoader il(*this); + il.load(parser); } +void ShoppingList::load_layout(const string &fn) +{ + IO::File in(fn); + DataFile::Parser parser(in, fn); + LayoutLoader ll(*this); + ll.load(parser); +} + + ShoppingList::InventoryLoader::InventoryLoader(ShoppingList &s): sl(s) { add("track", &InventoryLoader::track); } -void ShoppingList::InventoryLoader::track(unsigned part, unsigned count) +void ShoppingList::InventoryLoader::track(ArticleNumber art_nr, int count) { - sl.inventory[part]+=count; + sl.inventory[art_nr] += count; } + ShoppingList::LayoutLoader::LayoutLoader(ShoppingList &s): sl(s) { add("track", &LayoutLoader::track); add("base"); + add("beamgate"); + add("route"); + add("signal"); + add("terrain"); + add("zone"); } -void ShoppingList::LayoutLoader::track(unsigned part) +void ShoppingList::LayoutLoader::track(ArticleNumber art_nr) { - ++sl.layout[part]; + ++sl.layout[art_nr]; }