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();
61 return *v.ptrCast<std::vector<double>>();
62 throw boost::bad_any_cast();
69 return *v.ptrCast<std::vector<double>>();
70 throw boost::bad_any_cast();
76 return *v.ptrCast<std::vector<float>>();
77 throw boost::bad_any_cast();
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,
","));
178 res = boost::lexical_cast<std::string>(
rdvalue_cast<
int>(val));
181 res = boost::lexical_cast<std::string>(
rdvalue_cast<
double>(val));
184 res = boost::lexical_cast<std::string>(
rdvalue_cast<
unsigned int>(val));
186 #ifdef RDVALUE_HASBOOL 188 res = boost::lexical_cast<std::string>(
rdvalue_cast<
bool>(val));
192 res = boost::lexical_cast<std::string>(
rdvalue_cast<
float>(val));
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(
241 }
catch (
const boost::bad_any_cast &exc) {
243 res = boost::lexical_cast<T>(
rdvalue_cast<std::string>(arg));
255 typename boost::disable_if<boost::is_arithmetic<T>, T>::type
from_rdvalue(
static const boost::uint64_t VecDoubleTag
static const boost::uint64_t UnsignedIntTag
std::string vectToString(RDValue val)
static const boost::uint64_t AnyTag
static const boost::uint64_t DoubleTag
static const boost::uint64_t FloatTag
static const boost::uint64_t StringTag
static const boost::uint64_t VecIntTag
static const boost::uint64_t VecUnsignedIntTag
static const boost::uint64_t VecStringTag
bool rdvalue_is(const RDValue_cast_t)
static const boost::uint64_t IntTag
static const boost::uint64_t BoolTag
boost::uint64_t getTag() const
static const boost::uint64_t VecFloatTag
T rdvalue_cast(RDValue_cast_t v)
boost::enable_if< boost::is_arithmetic< T >, T >::type from_rdvalue(RDValue_cast_t arg)
bool rdvalue_tostring(RDValue_cast_t val, std::string &res)