From cca8c8993f578704f152ac6e2645ebd86ebb9c37 Mon Sep 17 00:00:00 2001
From: rk <rk@wojtek-desktop.(none)>
Date: Fri, 15 Oct 2010 16:33:28 +0200
Subject: [PATCH] Added constructor with filename

---
 libcorpus2/io/xcesreader.cpp | 21 +++++++++++++++++++--
 libcorpus2/io/xcesreader.h   |  9 +++++++--
 2 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/libcorpus2/io/xcesreader.cpp b/libcorpus2/io/xcesreader.cpp
index cb7ec43..010c81b 100644
--- a/libcorpus2/io/xcesreader.cpp
+++ b/libcorpus2/io/xcesreader.cpp
@@ -3,6 +3,8 @@
 #include <libpwrutils/foreach.h>
 #include <libxml++/libxml++.h>
 
+#include <fstream>
+
 namespace Corpus2 {
 
 class XcesReaderImpl : public BasicSaxParser
@@ -45,9 +47,24 @@ protected:
 
 XcesReader::XcesReader(const Tagset& tagset, std::istream& is,
 		bool disamb_only, bool disamb_sh)
-	: BufferedChunkReader(tagset), is_(is)
-	, impl_(new XcesReaderImpl(tagset, chunk_buf_, disamb_only, disamb_sh))
+	: BufferedChunkReader(tagset),
+	impl_(new XcesReaderImpl(tagset, chunk_buf_, disamb_only, disamb_sh))
+{
+	this->is_ = &is;
+}
+
+XcesReader::XcesReader(const Tagset& tagset, std::string& filename, bool disamb_only, bool disamb_sh)
+	: BufferedChunkReader(tagset),
+	impl_(new XcesReaderImpl(tagset, chunk_buf_, disamb_only, disamb_sh))
 {
+	this->is_owned_.reset(new std::ifstream(filename.c_str(), std::ifstream::in));
+
+	if (this->is_owned_->bad()) {
+		throw new Corpus2Error("File not found!");
+	}
+	else {
+		this->is_ = is_owned_.get();
+	}
 }
 
 XcesReader::~XcesReader()
diff --git a/libcorpus2/io/xcesreader.h b/libcorpus2/io/xcesreader.h
index 457a8aa..0fb1107 100644
--- a/libcorpus2/io/xcesreader.h
+++ b/libcorpus2/io/xcesreader.h
@@ -17,16 +17,21 @@ public:
 	XcesReader(const Tagset& tagset, std::istream& is,
 			bool disamb_only = false, bool disamb_sh = false);
 
+	XcesReader(const Tagset& tagset, std::string& filename,
+			bool disamb_only = false, bool disamb_sh = false);
+
 	~XcesReader();
 
 	std::istream& is() {
-		return is_;
+		return *is_;
 	}
 
 protected:
 	void ensure_more();
 
-	std::istream& is_;
+	// std::istream& is_;
+	std::istream* is_;
+	boost::scoped_ptr<std::istream> is_owned_;
 
 	boost::scoped_ptr<XcesReaderImpl> impl_;
 };
-- 
GitLab