# HG changeset patch # User František Kučera # Date 1549193717 -3600 # Node ID 61fc569b77e6bb5b136e97cd5768b0f5a8808bd4 # Parent 4062b8436838891bfb863364891926c72d1fe92f RelationalWriter dependency injection diff -r 4062b8436838 -r 61fc569b77e6 src/GuileHandler.h --- a/src/GuileHandler.h Sun Feb 03 01:44:07 2019 +0100 +++ b/src/GuileHandler.h Sun Feb 03 12:35:17 2019 +0100 @@ -54,7 +54,7 @@ std::wstring_convert> convertor; // TODO: support also other encodings or use always UTF-8 between C++ and Guile Configuration configuration; - shared_ptr relationalWriter; + writer::RelationalWriter* relationalWriter; wregex relationNameRegEx; @@ -146,8 +146,7 @@ public: - GuileHandler(ostream& output, Configuration& configuration, const vector& arguments) : configuration(configuration) { - relationalWriter.reset(writer::Factory::create(output)); + GuileHandler(writer::RelationalWriter* relationalWriter, Configuration& configuration, const vector& arguments) : relationalWriter(relationalWriter), configuration(configuration) { // FIXME: remove and work directly with configuration in startRelation() and attribute() // i.e. support multiple relationConfigurations @@ -182,6 +181,7 @@ currentAttributeIndex++; + // TODO: > 0 ?: if (currentAttributeIndex > 0 && currentAttributeIndex % currentReaderMetadata.size() == 0) { includeCurrentRecord = scm_to_bool(evalGuileCode(guileCodeWhereCondition)); if (includeCurrentRecord) for (auto attribute : currentWriterMetadata) writeGuileValueToAttribute(attribute); diff -r 4062b8436838 -r 61fc569b77e6 src/relpipe-tr-guile.cpp --- a/src/relpipe-tr-guile.cpp Sun Feb 03 01:44:07 2019 +0100 +++ b/src/relpipe-tr-guile.cpp Sun Feb 03 12:35:17 2019 +0100 @@ -36,7 +36,6 @@ #include "CLIParser.h" using namespace relpipe::cli; -using namespace relpipe::reader; using namespace relpipe::tr::guile; static void relpipeMain(void *closure, int argc, char **argv) { @@ -49,8 +48,9 @@ try { CLIParser cliParser; Configuration configuration = cliParser.parse(cli.arguments()); - std::shared_ptr reader(Factory::create(std::cin)); - GuileHandler handler(std::cout, configuration, cli.arguments()); + std::shared_ptr reader(reader::Factory::create(std::cin)); + std::shared_ptr writer(writer::Factory::create(std::cout)); + GuileHandler handler(writer.get(), configuration, cli.arguments()); reader->addHandler(&handler); reader->process();