Program Listing for File Namespace.cpp

Return to documentation for file (src/rdf4cpp/Namespace.cpp)

#include "Namespace.hpp"

namespace rdf4cpp {

Namespace::Namespace(std::string_view namespace_iri, storage::DynNodeStoragePtr node_storage)
    : namespace_iri_{namespace_iri}, node_storage_{node_storage} {
}

std::string_view Namespace::name_space() const noexcept {
    return namespace_iri_;
}

storage::DynNodeStoragePtr Namespace::node_storage() const {
    return node_storage_;
}

IRI Namespace::operator+(std::string_view suffix) const {
    if (auto found = cache_.find(suffix); found != cache_.end()) {
        return IRI{storage::identifier::NodeBackendHandle{found->second, node_storage_}};
    } else {
        std::string namespace_iri{namespace_iri_};
        namespace_iri.append(suffix);

        IRI iri{namespace_iri, node_storage_};
        cache_.emplace(suffix, iri.backend_handle().id());
        return iri;
    }
}

void Namespace::clear() const {
    cache_.clear();
    cache_.rehash(0);
}

}  // namespace rdf4cpp