Program Listing for File RDFFileParser.cpp¶
↰ Return to documentation for file (src/rdf4cpp/parser/RDFFileParser.cpp)
#include "RDFFileParser.hpp"
#include <rdf4cpp/parser/IStreamQuadIteratorSerdImpl.hpp>
namespace rdf4cpp::parser {
RDFFileParser::RDFFileParser(const std::string &file_path, flags_type flags, state_type *state)
: file_path_(file_path), flags_(flags), state_(state) {
}
RDFFileParser::RDFFileParser(std::string &&file_path, flags_type flags, state_type *state)
: file_path_(std::move(file_path)), flags_(flags), state_(state) {
}
RDFFileParser::iterator RDFFileParser::begin() const {
FILE *stream = fopen_fastseq(file_path_.c_str(), "r");
if (stream == nullptr) {
throw std::system_error{errno, std::system_category()};
}
return {std::move(stream), flags_, state_};
}
std::default_sentinel_t RDFFileParser::end() const noexcept {
return {};
}
RDFFileParser::iterator::iterator()
: stream_(nullptr), iter_(nullptr) {
}
RDFFileParser::iterator::iterator(FILE *&&stream,
flags_type flags,
state_type *state)
: stream_(stream),
iter_(std::make_unique<IStreamQuadIterator>(stream_, reinterpret_cast<ReadFunc>(&fread), reinterpret_cast<ErrorFunc>(&ferror),
reinterpret_cast<EOFFunc>(feof), flags, state)) {
}
RDFFileParser::iterator::~iterator() noexcept {
fclose(stream_);
}
RDFFileParser::iterator::reference RDFFileParser::iterator::operator*() const noexcept {
return (*iter_).operator*();
}
RDFFileParser::iterator::pointer RDFFileParser::iterator::operator->() const noexcept {
return (*iter_).operator->();
}
RDFFileParser::iterator &RDFFileParser::iterator::operator++() {
++(*iter_);
return *this;
}
bool RDFFileParser::iterator::operator==(const RDFFileParser::iterator &other) const noexcept {
return iter_ == other.iter_;
}
bool operator==(const RDFFileParser::iterator &iter, std::default_sentinel_t s) noexcept {
return (*iter.iter_) == s;
}
bool operator==(std::default_sentinel_t s, const RDFFileParser::iterator &iter) noexcept {
return iter == s;
}
} // namespace rdf4cpp::parser