diff --git a/libcorpus2/io/xcesreader.cpp b/libcorpus2/io/xcesreader.cpp index cb7ec43dc4f3e704ac939bf074d3b0773d9d6718..010c81bf3044fe4ecf75dde159213be8ad20948d 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 457a8aadcda20560a3a1886a9b71cd07edf7b5e8..0fb11078f6ae58a1e7bb075b6f21f5182c785158 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_; };