owlcpp  v0.3.3~
C++ library for working with OWL ontologies
 All Classes Namespaces Files Functions Macros Pages
literal_datatypes.hpp
Go to the documentation of this file.
1 
9 #ifndef LITERAL_DATATYPES_HPP_
10 #define LITERAL_DATATYPES_HPP_
11 #include <string>
12 #include "boost/cstdint.hpp"
13 #include "boost/lexical_cast.hpp"
14 #include "boost/numeric/conversion/cast.hpp"
15 
19 #include "owlcpp/rdf/exception.hpp"
20 
21 namespace owlcpp{ namespace detail{
22 
23 /*
24 *******************************************************************************/
25 struct Datatype_bool {
26  typedef bool value_type;
27  typedef owlcpp::terms::xsd_boolean default_datatype;
28 
29  static value_type convert(std::string const& str, const Node_id dt) {
30  if( str == "true" ) return true;
31  if( str == "false" ) return false;
32  return boost::lexical_cast<value_type>(str);
33  }
34 
35  template<class T> static value_type convert(const T x, const Node_id) {
36  return boost::numeric_cast<value_type>(x);
37  }
38 
39  static std::string const& name_str(const Node_id) {
40  static const std::string name(to_string_pref(default_datatype()));
41  return name;
42  }
43 
44  static std::string to_string(value_type const v, const Node_id) {
45  return v ? "true" : "false";
46  }
47 };
48 
49 /*
50 *******************************************************************************/
51 struct Datatype_int{
52  typedef boost::intmax_t value_type;
53  typedef owlcpp::terms::xsd_int default_datatype;
54 
55  static value_type convert(std::string const& str, const Node_id dt) {
56  return boost::lexical_cast<value_type>(str);
57  }
58 
59  template<class T> static value_type convert(const T x, const Node_id) {
60  return boost::numeric_cast<value_type>(x);
61  }
62 
63  static std::string const& name_str(const Node_id) {
64  static const std::string name(to_string_pref(default_datatype()));
65  return name;
66  }
67 
68  static std::string to_string(value_type const v, const Node_id) {
69  return boost::lexical_cast<std::string>(v);
70  }
71 };
72 
73 /*
74 *******************************************************************************/
76  typedef boost::uintmax_t value_type;
77  typedef owlcpp::terms::xsd_unsignedInt default_datatype;
78 
79  static value_type convert(std::string const& str, const Node_id dt) {
80  return boost::numeric_cast<value_type>(
81  boost::lexical_cast<Datatype_int::value_type>(str)
82  );
83  }
84 
85  template<class T> static value_type convert(const T x, const Node_id) {
86  return boost::numeric_cast<value_type>(x);
87  }
88 
89  static std::string const& name_str(const Node_id) {
90  static const std::string name(to_string_pref(default_datatype()));
91  return name;
92  }
93 
94  static std::string to_string(value_type const v, const Node_id) {
95  return boost::lexical_cast<std::string>(v);
96  }
97 };
98 
99 /*
100 *******************************************************************************/
102  typedef double value_type;
103  typedef owlcpp::terms::xsd_double default_datatype;
104 
105  static value_type convert(std::string const& str, const Node_id dt) {
106  return boost::lexical_cast<value_type>(str);
107  }
108 
109  template<class T> static value_type convert(const T x, const Node_id) {
110  return boost::numeric_cast<value_type>(x);
111  }
112 
113  static std::string const& name_str(const Node_id) {
114  static const std::string name(to_string_pref(default_datatype()));
115  return name;
116  }
117 
118  static std::string to_string(value_type const v, const Node_id) {
119  return boost::lexical_cast<std::string>(v);
120  }
121 };
122 
123 /*
124 *******************************************************************************/
126  typedef std::string value_type;
127  typedef owlcpp::terms::xsd_string default_datatype;
128 
129  static value_type const& convert(std::string const& str, const Node_id dt) {
130  return str;
131  }
132 
133  template<class T> static value_type convert(const T x) {return x;}
134 
135  static std::string const& name_str(const Node_id) {
136  static const std::string name(to_string_pref(default_datatype()));
137  return name;
138  }
139 };
140 
141 }//namespace detail
142 }//namespace owlcpp
143 #endif /* LITERAL_DATATYPES_HPP_ */