31 #ifndef RDKIT_RDVALUE_H 32 #define RDKIT_RDVALUE_H 46 if (rdvalue_is<std::string>(v))
return *v.ptrCast<std::string>();
47 throw boost::bad_any_cast();
52 if (rdvalue_is<std::string>(v))
return *v.ptrCast<std::string>();
53 throw boost::bad_any_cast();
60 return *v.ptrCast<std::vector<double> >();
61 throw boost::bad_any_cast();
67 return *v.ptrCast<std::vector<double> >();
68 throw boost::bad_any_cast();
74 return *v.ptrCast<std::vector<float> >();
75 throw boost::bad_any_cast();
81 return *v.ptrCast<std::vector<float> >();
82 throw boost::bad_any_cast();
88 return *v.ptrCast<std::vector<std::string> >();
89 throw boost::bad_any_cast();
95 return *v.ptrCast<std::vector<std::string> >();
96 throw boost::bad_any_cast();
102 return *v.ptrCast<std::vector<int> >();
103 throw boost::bad_any_cast();
109 return *v.ptrCast<std::vector<int> >();
110 throw boost::bad_any_cast();
116 return *v.ptrCast<std::vector<unsigned int> >();
117 throw boost::bad_any_cast();
123 return *v.ptrCast<std::vector<unsigned int> >();
124 throw boost::bad_any_cast();
130 if (rdvalue_is<boost::any>(v)) {
131 return *v.ptrCast<boost::any>();
133 throw boost::bad_any_cast();
138 if (rdvalue_is<boost::any>(v)) {
139 return *v.ptrCast<boost::any>();
141 throw boost::bad_any_cast();
146 if (rdvalue_is<boost::any>(v)) {
147 return *v.ptrCast<boost::any>();
149 throw boost::bad_any_cast();
156 const std::vector<T> &tv =
rdvalue_cast<std::vector<T>&>(val);
157 std::ostringstream sstr;
158 sstr.imbue(std::locale(
"C"));
159 sstr << std::setprecision(17);
161 std::copy(tv.begin(), tv.end(), std::ostream_iterator<T>(sstr,
","));
173 res = boost::lexical_cast<std::string>(
rdvalue_cast<
int>(val));
176 res = boost::lexical_cast<std::string>(
rdvalue_cast<
double>(val));
179 res = boost::lexical_cast<std::string>(
rdvalue_cast<
unsigned int>(val));
181 #ifdef RDVALUE_HASBOOL 183 res = boost::lexical_cast<std::string>(
rdvalue_cast<
bool>(val));
187 res = boost::lexical_cast<std::string>(
rdvalue_cast<
float>(val));
190 res = vectToString<double>(val);
193 res = vectToString<float>(val);
196 res = vectToString<int>(val);
199 res = vectToString<unsigned int>(val);
202 res = vectToString<std::string>(val);
206 res = boost::any_cast<std::string>(
rdvalue_cast<boost::any&>(val));
207 }
catch (
const boost::bad_any_cast &) {
208 if (rdvalue_cast<boost::any&>(val).type() ==
typeid(
long)) {
209 res = boost::lexical_cast<std::string>(boost::any_cast<
long>(
211 }
else if (rdvalue_cast<boost::any&>(val).type() ==
typeid(
unsigned long)) {
213 boost::lexical_cast<std::string>(
214 boost::any_cast<
unsigned long>(
rdvalue_cast<boost::any&>(val)));
229 typename boost::enable_if<boost::is_arithmetic<T>, T>::type
from_rdvalue(
236 }
catch (
const boost::bad_any_cast &exc) {
238 res = boost::lexical_cast<T>(
rdvalue_cast<std::string>(arg));
250 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)
T rdvalue_cast(RDValue v)
static const boost::uint64_t AnyTag
static const boost::uint64_t DoubleTag
static const boost::uint64_t FloatTag
static const boost::uint64_t StringTag
bool rdvalue_is(RDValue v)
static const boost::uint64_t VecIntTag
static const boost::uint64_t VecUnsignedIntTag
static const boost::uint64_t VecStringTag
static const boost::uint64_t IntTag
static const boost::uint64_t BoolTag
boost::uint64_t getTag() const
static const boost::uint64_t VecFloatTag
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)