Program Listing for File Quad.cpp

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

#include "Quad.hpp"

#include <rdf4cpp/writer/WriteQuad.hpp>

namespace rdf4cpp {

Quad::Quad(Node subject, Node predicate, Node object) noexcept : QuadPattern(IRI::default_graph(), subject, predicate, object) {}
Quad::Quad(Node graph, Node subject, Node predicate, Node object) noexcept : QuadPattern(graph, subject, predicate, object) {}

bool Quad::valid() const noexcept {
    return (graph().is_iri() || graph().is_blank_node())
            && (subject().is_iri() || subject().is_blank_node())
            && (predicate().is_iri())
            && (object().is_iri() || object().is_literal() || object().is_blank_node());
}

std::optional<Quad> Quad::create_validated(Node graph, Node subject, Node predicate, Node object) noexcept {
    Quad quad{graph, subject, predicate, object};
    if (quad.valid()) {
        return quad;
    } else {
        return std::nullopt;
    }
}

std::optional<Quad> Quad::create_validated(Node subject, Node predicate, Node object) noexcept {
    Quad quad{subject, predicate, object};
    if (quad.valid()) {
        return quad;
    } else {
        return std::nullopt;
    }
}

Statement const &Quad::without_graph() const noexcept {
    static_assert(sizeof(Quad) == 4 * sizeof(Node));
    static_assert(sizeof(Statement) == 3 * sizeof(Node));

    return *reinterpret_cast<Statement const *>(entries_.data() + 1);
}

Quad Quad::to_node_storage(storage::DynNodeStoragePtr node_storage) const {
    Quad qu;
    auto it = qu.begin();
    for (auto const item : *this) {
        *(it++) = item.to_node_storage(node_storage);
    }
    return qu;
}

Quad Quad::try_get_in_node_storage(storage::DynNodeStoragePtr node_storage) const noexcept {
    Quad qu;
    auto it = qu.begin();
    for (auto const item : *this) {
        *(it++) = item.try_get_in_node_storage(node_storage);
    }
    return qu;
}

bool Quad::serialize_ntriples(writer::BufWriterParts const writer) const noexcept {
    return writer::write_quad<writer::OutputFormat::NTriples>(*this, writer, nullptr);
}

bool Quad::serialize_nquads(writer::BufWriterParts const writer) const noexcept {
    return writer::write_quad<writer::OutputFormat::NQuads>(*this, writer, nullptr);
}

bool Quad::serialize_turtle(writer::SerializationState &state, writer::BufWriterParts const writer) const noexcept {
    return writer::write_quad<writer::OutputFormat::Turtle>(*this, writer, &state);
}

bool Quad::serialize_trig(writer::SerializationState &state, writer::BufWriterParts const writer) const noexcept {
    return writer::write_quad<writer::OutputFormat::TriG>(*this, writer, &state);
}

}  // namespace rdf4cpp