From f1a538f39ca73bae5cd55ba1c8c6f5065dce0c92 Mon Sep 17 00:00:00 2001
From: Bartosz Broda <bartosz.broda@gmail.com>
Date: Thu, 9 Jun 2011 08:12:41 +0200
Subject: [PATCH] implementataion of inner reader functionality

---
 libmwereader/mwereader.cpp | 40 +++++++++++++++++++++++++-------------
 libmwereader/mwereader.h   |  9 +++++++++
 2 files changed, 35 insertions(+), 14 deletions(-)

diff --git a/libmwereader/mwereader.cpp b/libmwereader/mwereader.cpp
index 95d5ede..101ea1d 100644
--- a/libmwereader/mwereader.cpp
+++ b/libmwereader/mwereader.cpp
@@ -1,15 +1,15 @@
 #include "mwereader.h"
+#include <boost/algorithm/string.hpp>
 
 namespace Corpus2{
 
 bool MWEReader::registered = TokenReader::register_path_reader<MWEReader>(
-	"mwereader","token,chunk,sentence"); // TODO wiecej helpa
+	"mwereader","token,chunk,sentence"); // TODO more help?
 
 	MWEReader::MWEReader(const Tagset &tagset, const std::string &filename)
-		: TokenReader(tagset)
+		: TokenReader(tagset), inner_filename_(filename)
 	{
 		// TODO implementataion
-		std::cerr << "Jestem sobie MWE Readerkiem" << std::endl;
 	}
 
 	MWEReader::~MWEReader()
@@ -19,37 +19,49 @@ bool MWEReader::registered = TokenReader::register_path_reader<MWEReader>(
 
 	Token* MWEReader::get_next_token()
 	{
-		// TODO implementation
-		return 0;
+		// TODO MWE stuff
+		return inner_reader_->get_next_token();
 	}
 
 	Sentence::Ptr MWEReader::get_next_sentence()
 	{
-		// TODO implementataion
-		return Sentence::Ptr();
+		// TODO MWE stuff
+		return inner_reader_->get_next_sentence();
 	}
 
 	boost::shared_ptr<Chunk> MWEReader::get_next_chunk()
 	{
-		// TODO implementataion
-		return boost::shared_ptr<Chunk>();
+		// TODO MWE stuff
+		return inner_reader_->get_next_chunk();
 	}
 
 	void MWEReader::set_option(const std::string& option)
 	{
-		// TODO implementataion
+
+		if(boost::algorithm::starts_with(option, "inner:"))
+		{
+			std::string inner = option.substr(6);
+			inner_reader_ = create_path_reader(inner, this->tagset(),
+											   inner_filename_);
+		}
+
+		// TODO MWE stuff
 	}
 
 	void MWEReader::validate()
 	{
-		// TODO implementataion
+		if(inner_reader_ == NULL)
+			throw Corpus2Error("Inner reader not initialised.");
+		// TODO MWE stuff
 	}
 
 	std::string MWEReader::get_option(const std::string& option) const
 	{
-		// TODO implementataion
-		std::string s;
-		return s;
+		if(boost::algorithm::starts_with(option, "inner:")
+			&& inner_reader_ != NULL)
+			return option;
+		// TODO options for MWE
+		return inner_reader_->get_option(option);
 	}
 
 
diff --git a/libmwereader/mwereader.h b/libmwereader/mwereader.h
index 71466e5..7df2170 100644
--- a/libmwereader/mwereader.h
+++ b/libmwereader/mwereader.h
@@ -9,6 +9,9 @@ namespace Corpus2 {
 class MWEReader: public TokenReader
 {
 public:
+	/**
+	  * \param filename corpus filename (MWE file is given in options)
+	  */
 	MWEReader(const Tagset& tagset, const std::string& filename);
 
 	~MWEReader();
@@ -34,6 +37,12 @@ public:
 	virtual void validate();
 
 	static bool registered;
+private:
+	/// ptr to inner reader doing the real work of reading a corpus
+	TokenReaderPtr inner_reader_;
+	/// path for inner reader
+	std::string inner_filename_;
+	/// inner reader option
 };
 
 } // ns Corpus2
-- 
GitLab