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