32#ifndef RDKIT_RDVALUE_H
33#define RDKIT_RDVALUE_H
42#include <boost/algorithm/string.hpp>
50 return *v.
ptrCast<std::string>();
52 throw std::bad_any_cast();
58 return *v.
ptrCast<std::string>();
60 throw std::bad_any_cast();
67 return *v.ptrCast<std::vector<double>>();
69 throw std::bad_any_cast();
76 return *v.ptrCast<std::vector<double>>();
78 throw std::bad_any_cast();
84 return *v.ptrCast<std::vector<float>>();
86 throw std::bad_any_cast();
93 return *v.ptrCast<std::vector<float>>();
95 throw std::bad_any_cast();
101 if (
rdvalue_is<std::vector<std::string>>(v)) {
102 return *v.ptrCast<std::vector<std::string>>();
104 throw std::bad_any_cast();
110 if (
rdvalue_is<std::vector<std::string>>(v)) {
111 return *v.ptrCast<std::vector<std::string>>();
113 throw std::bad_any_cast();
119 return *v.ptrCast<std::vector<int>>();
121 throw std::bad_any_cast();
127 return *v.ptrCast<std::vector<int>>();
129 throw std::bad_any_cast();
135 if (
rdvalue_is<std::vector<unsigned int>>(v)) {
136 return *v.ptrCast<std::vector<unsigned int>>();
138 throw std::bad_any_cast();
144 if (
rdvalue_is<std::vector<unsigned int>>(v)) {
145 return *v.ptrCast<std::vector<unsigned int>>();
147 throw std::bad_any_cast();
156 throw std::bad_any_cast();
164 throw std::bad_any_cast();
172 throw std::bad_any_cast();
180 std::ostringstream sstr;
181 sstr.imbue(std::locale(
"C"));
182 sstr << std::setprecision(17);
185 std::copy(tv.begin(), tv.end() - 1, std::ostream_iterator<T>(sstr,
","));
208#ifdef RDVALUE_HASBOOL
241 }
catch (
const std::bad_any_cast &) {
243 if (rdtype ==
typeid(
long)) {
244 res = boost::lexical_cast<std::string>(
246 }
else if (rdtype ==
typeid(int64_t)) {
247 res = boost::lexical_cast<std::string>(
249 }
else if (rdtype ==
typeid(uint64_t)) {
250 res = boost::lexical_cast<std::string>(
252 }
else if (rdtype ==
typeid(
unsigned long)) {
253 res = boost::lexical_cast<std::string>(
270typename boost::enable_if<boost::is_arithmetic<T>, T>::type
from_rdvalue(
277 }
catch (
const std::bad_any_cast &exc) {
282 boost::trim_right(val);
283 res = boost::lexical_cast<T>(val);
295typename boost::disable_if<boost::is_arithmetic<T>, T>::type
from_rdvalue(
static const boost::uint64_t UnsignedIntTag
static const boost::uint64_t StringTag
static const boost::uint64_t VecStringTag
static const boost::uint64_t VecIntTag
static const boost::uint64_t FloatTag
static const boost::uint64_t VecUnsignedIntTag
static const boost::uint64_t DoubleTag
static const boost::uint64_t IntTag
static const boost::uint64_t AnyTag
static const boost::uint64_t VecFloatTag
static const boost::uint64_t VecDoubleTag
static const boost::uint64_t BoolTag
std::string rdvalue_cast< std::string >(RDValue_cast_t v)
bool rdvalue_is(const RDValue_cast_t)
std::string vectToString(RDValue val)
std::any rdvalue_cast< std::any >(RDValue_cast_t v)
bool rdvalue_tostring(RDValue_cast_t val, std::string &res)
const std::any & rdvalue_cast< const std::any & >(RDValue_cast_t v)
std::any & rdvalue_cast< std::any & >(RDValue_cast_t v)
T rdvalue_cast(RDValue_cast_t v)
std::string & rdvalue_cast< std::string & >(RDValue_cast_t v)
boost::enable_if< boost::is_arithmetic< T >, T >::type from_rdvalue(RDValue_cast_t arg)
boost::uint64_t getTag() const