owlcpp  v0.3.3~
C++ library for working with OWL ontologies
 All Classes Namespaces Files Functions Macros Pages
map_node_crtpb.hpp
Go to the documentation of this file.
1 
6 #ifndef MAP_NODE_CRTPB_HPP_
7 #define MAP_NODE_CRTPB_HPP_
8 
9 #include "owlcpp/detail/map_traits.hpp"
10 
11 namespace owlcpp{
12 
16 template<class Super> class Map_node_crtpb {
17  typedef detail::Map_traits<Super> traits;
18  typedef typename traits::map_node_type map_node_type;
19  typedef typename traits::node_type node_type;
20 
21  map_node_type const& _map_node() const {
22  return static_cast<Super const&>(*this).map_node_;
23  }
24 
25  map_node_type& _map_node() {
26  return static_cast<Super&>(*this).map_node_;
27  }
28 
29 public:
30 
31  node_type const& operator[](const Node_id id) const {
32  return _map_node()[id];
33  }
34 
40  node_type const& at(const Node_id id) const {
41  return _map_node().at(id);
42  }
43 
49  Node_id insert_node_iri(const Ns_id nsid, std::string const& name) {
50  BOOST_ASSERT(
51  static_cast<Super const&>(*this).find(nsid) &&
52  "invalid namespace ID"
53  );
54  typedef typename Super::Err Err;
55  if( is_blank(nsid) ) {
56  BOOST_THROW_EXCEPTION(
57  Err()
58  << typename Err::msg_t("blank namespace for IRI node")
59  << typename Err::str1_t(name)
60  );
61  }
62  return _map_node().insert_iri(nsid, name);
63  }
64 
65  Node_id const* find_node_iri(const Ns_id nsid, std::string const& name) const {
66  BOOST_ASSERT(
67  static_cast<Super const&>(*this).find(nsid) &&
68  "invalid namespace ID"
69  );
70  return _map_node().find_iri(nsid, name);
71  }
72 
73 };
74 
75 }//namespace owlcpp
76 #endif /* MAP_NODE_CRTPB_HPP_ */