32 #ifndef RDKIT_RDVALUE_H
33 #define RDKIT_RDVALUE_H
47 if (rdvalue_is<std::string>(v))
return *v.
ptrCast<std::string>();
48 throw boost::bad_any_cast();
53 if (rdvalue_is<std::string>(v))
return *v.
ptrCast<std::string>();
54 throw boost::bad_any_cast();
59 inline std::vector<double> rdvalue_cast<std::vector<double>>(
RDValue_cast_t v) {
61 return *v.ptrCast<std::vector<double>>();
62 throw boost::bad_any_cast();
66 inline std::vector<double> &rdvalue_cast<std::vector<double> &>(
69 return *v.ptrCast<std::vector<double>>();
70 throw boost::bad_any_cast();
74 inline std::vector<float> rdvalue_cast<std::vector<float>>(
RDValue_cast_t v) {
76 return *v.ptrCast<std::vector<float>>();
77 throw boost::bad_any_cast();
81 inline std::vector<float> &rdvalue_cast<std::vector<float> &>(
84 return *v.ptrCast<std::vector<float>>();
85 throw boost::bad_any_cast();
89 inline std::vector<std::string> rdvalue_cast<std::vector<std::string>>(
92 return *v.ptrCast<std::vector<std::string>>();
93 throw boost::bad_any_cast();
97 inline std::vector<std::string> &rdvalue_cast<std::vector<std::string> &>(
100 return *v.ptrCast<std::vector<std::string>>();
101 throw boost::bad_any_cast();
106 if (
rdvalue_is<std::vector<int>>(v))
return *v.ptrCast<std::vector<int>>();
107 throw boost::bad_any_cast();
112 if (
rdvalue_is<std::vector<int>>(v))
return *v.ptrCast<std::vector<int>>();
113 throw boost::bad_any_cast();
117 inline std::vector<unsigned int> rdvalue_cast<std::vector<unsigned int>>(
120 return *v.ptrCast<std::vector<unsigned int>>();
121 throw boost::bad_any_cast();
125 inline std::vector<unsigned int> &rdvalue_cast<std::vector<unsigned int> &>(
128 return *v.ptrCast<std::vector<unsigned int>>();
129 throw boost::bad_any_cast();
135 if (rdvalue_is<boost::any>(v)) {
136 return *v.
ptrCast<boost::any>();
138 throw boost::bad_any_cast();
143 if (rdvalue_is<boost::any>(v)) {
144 return *v.
ptrCast<boost::any>();
146 throw boost::bad_any_cast();
151 if (rdvalue_is<boost::any>(v)) {
152 return *v.
ptrCast<boost::any>();
154 throw boost::bad_any_cast();
161 const std::vector<T> &tv = rdvalue_cast<std::vector<T> &>(val);
162 std::ostringstream sstr;
163 sstr.imbue(std::locale(
"C"));
164 sstr << std::setprecision(17);
166 std::copy(tv.begin(), tv.end(), std::ostream_iterator<T>(sstr,
","));
175 res = rdvalue_cast<std::string>(val);
186 #ifdef RDVALUE_HASBOOL
195 res = vectToString<double>(val);
198 res = vectToString<float>(val);
201 res = vectToString<int>(val);
204 res = vectToString<unsigned int>(val);
207 res = vectToString<std::string>(val);
211 res = boost::any_cast<std::string>(rdvalue_cast<boost::any &>(val));
212 }
catch (
const boost::bad_any_cast &) {
213 if (rdvalue_cast<boost::any &>(val).type() ==
typeid(
long)) {
214 res = boost::lexical_cast<std::string>(
215 boost::any_cast<long>(rdvalue_cast<boost::any &>(val)));
216 }
else if (rdvalue_cast<boost::any &>(val).type() ==
217 typeid(
unsigned long)) {
218 res = boost::lexical_cast<std::string>(
219 boost::any_cast<unsigned long>(rdvalue_cast<boost::any &>(val)));
234 typename boost::enable_if<boost::is_arithmetic<T>, T>::type
from_rdvalue(
240 res = rdvalue_cast<T>(arg);
241 }
catch (
const boost::bad_any_cast &exc) {
243 res = boost::lexical_cast<T>(rdvalue_cast<std::string>(arg));
249 res = rdvalue_cast<T>(arg);
255 typename boost::disable_if<boost::is_arithmetic<T>, T>::type
from_rdvalue(
257 return rdvalue_cast<T>(arg);