6 #ifndef MAP_STD_NODE_CRTPB_HPP_
7 #define MAP_STD_NODE_CRTPB_HPP_
8 #include "boost/assert.hpp"
9 #include "boost/concept/assert.hpp"
11 #include "owlcpp/detail/map_traits.hpp"
12 #include "owlcpp/terms/detail/max_standard_id.hpp"
21 typedef detail::Map_traits<Super> traits;
22 typedef typename traits::map_std_type map_std_type;
23 typedef typename traits::map_node_type map_node_type;
25 map_std_type
const& _map_std()
const {
26 return static_cast<Super const&
>(*this).map_std_;
29 map_node_type
const& _map_node()
const {
30 return static_cast<Super const&
>(*this).map_node_;
33 map_node_type& _map_node() {
34 return static_cast<Super&
>(*this).map_node_;
38 typedef typename traits::node_type node_type;
40 bool is_standard(
const Node_id nid)
const {
return _map_std().is_standard(nid);}
42 node_type
const& operator[](
const Node_id id)
const {
43 return _map_std().is_standard(
id) ? _map_std()[id] : _map_node()[id];
52 return _map_std().is_standard(
id) ? _map_std().at(
id) : _map_node().at(
id);
60 return _map_std().is_standard(
id) ?
74 static_cast<Super const&>(*this).find(nsid) &&
75 "invalid namespace ID"
77 typedef typename Super::Err Err;
78 if( is_blank(nsid) ) {
79 BOOST_THROW_EXCEPTION(
81 <<
typename Err::msg_t(
"blank namespace for IRI node")
82 <<
typename Err::str1_t(name)
85 if(
Node_id const*
const nid = _map_std().
find(nsid, name) )
return *nid;
87 if( _map_std().is_standard(nsid) ) {
88 BOOST_THROW_EXCEPTION(
90 <<
typename Err::msg_t(
"unknown term in standard namespace")
91 <<
typename Err::str1_t( name )
92 <<
typename Err::str2_t( _map_std().
at(nsid).str() )
95 return _map_node().insert_iri(nsid, name);
98 Node_id const* find_node_iri(
const Ns_id nsid, std::string
const& name)
const {
100 static_cast<Super const&>(*this).find(nsid) &&
101 "invalid namespace ID"
103 if(
Node_id const*
const nid = _map_std().find(nsid, name) )
return nid;
104 return _map_node().find_iri(nsid, name);