.. _program_listing_file_src_rdf4cpp_query_QuadPattern.cpp: Program Listing for File QuadPattern.cpp ======================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/rdf4cpp/query/QuadPattern.cpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "QuadPattern.hpp" #include namespace rdf4cpp::query { QuadPattern::QuadPattern(Node graph, Node subject, Node predicate, Node object) noexcept : entries_{graph, subject, predicate, object} { } bool QuadPattern::valid() const noexcept { return (graph().is_iri() || graph().is_variable()) && !subject().is_literal() && (predicate().is_iri() || predicate().is_variable()) && !object().null(); } QuadPattern::operator std::string() const { auto s = writer::StringWriter::oneshot([this](auto &w) { return writer::write_quad(*this, w, nullptr); }); s.pop_back(); // remove newline return s; } std::ostream &operator<<(std::ostream &os, const QuadPattern &pattern) { os << static_cast(pattern); return os; } QuadPattern QuadPattern::to_node_storage(storage::DynNodeStoragePtr node_storage) const { QuadPattern qp; auto it = qp.begin(); for (const auto &item : *this) { *(it++) = item.to_node_storage(node_storage); } return qp; } QuadPattern QuadPattern::try_get_in_node_storage(storage::DynNodeStoragePtr node_storage) const noexcept { QuadPattern qp; auto it = qp.begin(); for (const auto &item : *this) { *(it++) = item.try_get_in_node_storage(node_storage); } return qp; } TriplePattern const &QuadPattern::without_graph() const noexcept { static_assert(sizeof(QuadPattern) == 4 * sizeof(Node)); static_assert(sizeof(TriplePattern) == 3 * sizeof(Node)); return *reinterpret_cast(entries_.data() + 1); } } // namespace rdf4cpp::query