6 #ifndef MAP_DOC_CRTPB_HPP_
7 #define MAP_DOC_CRTPB_HPP_
8 #include "boost/assert.hpp"
10 #include "owlcpp/detail/map_traits.hpp"
21 typedef detail::Map_traits<Super> traits;
22 typedef typename traits::map_node_type map_node_t;
23 typedef typename traits::map_doc_type map_doc_type;
24 typedef typename map_doc_type::Err Err;
25 typedef typename traits::doc_type doc_type;
27 map_doc_type
const& _map_doc()
const {
28 return static_cast<Super const&
>(*this).map_doc_;
31 map_doc_type& _map_doc() {
32 return static_cast<Super&
>(*this).map_doc_;
36 typedef typename map_doc_type::iri_range doc_iri_range;
37 typedef typename map_doc_type::version_range doc_version_range;
39 doc_type
const& operator[](
const Doc_id did)
const {
40 return _map_doc()[did];
43 doc_type
const& at(
const Doc_id did)
const {
44 return _map_doc().at(did);
47 doc_type
const* find(
const Doc_id did)
const {
48 return _map_doc().find(did);
51 doc_iri_range find_doc_iri(std::string
const& iri)
const {
52 BOOST_CONCEPT_ASSERT((Ns_iri_node_store<Super>));
53 Super
const& super =
static_cast<Super const&
>(*this);
54 Node_id const*
const nid = super.find_node_iri(iri);
55 if( nid )
return _map_doc().find_iri(*nid);
56 return doc_iri_range(_map_doc().end_iri(), _map_doc().end_iri());
59 doc_version_range find_doc_version(std::string
const& version)
const {
60 BOOST_CONCEPT_ASSERT((Ns_iri_node_store<Super>));
61 Super
const& super =
static_cast<Super const&
>(*this);
62 Node_id const*
const nid = super.find_node_iri(version);
63 if( nid )
return _map_doc().find_version(*nid);
64 return doc_version_range(
65 _map_doc().end_version(),
66 _map_doc().end_version()
94 std::string
const& path =
"",
95 const Node_id vers_id = terms::empty_::id()
97 BOOST_CONCEPT_ASSERT((Iri_node_store<Super>));
99 static_cast<Super const&>(*this).find(iri_id) &&
100 "invalid ontology IRI ID"
104 static_cast<Super const&>(*this).find(vers_id) &&
105 "invalid version IRI ID"
108 return _map_doc().insert(iri_id, path, vers_id);
112 std::string
const& iri,
113 std::string
const& path =
"",
114 std::string
const& vers =
""
116 BOOST_CONCEPT_ASSERT((Ns_iri_node_store<Super>));
117 const Node_id iri_id =
static_cast<Super&
>(*this).insert_node_iri(iri);
118 const Node_id vers_id =
static_cast<Super&
>(*this).insert_node_iri(vers);
121 }
catch(Err
const& ) {
122 BOOST_THROW_EXCEPTION(
124 <<
typename Err::msg_t(
"error adding document")
125 <<
typename Err::str1_t(iri)
126 <<
typename Err::str2_t(path)
127 <<
typename Err::str3_t(vers)
128 <<
typename Err::nested_t(boost::current_exception())
std::pair< Doc_id, bool > insert_doc(const Node_id iri_id, std::string const &path="", const Node_id vers_id=terms::empty_::id())
Add document info: location, ontologyIRI, and versionIRI.
Definition: map_doc_crtpb.hpp:92
Document identifier.
Definition: doc_id.hpp:15
Term identifier.
Definition: node_id.hpp:15
Definition: map_doc_crtpb.hpp:20