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();
68 return *v.ptrCast<std::vector<double> >();
69 throw boost::bad_any_cast();
75 return *v.ptrCast<std::vector<float> >();
76 throw boost::bad_any_cast();
82 return *v.ptrCast<std::vector<float> >();
83 throw boost::bad_any_cast();
89 return *v.ptrCast<std::vector<std::string> >();
90 throw boost::bad_any_cast();
96 return *v.ptrCast<std::vector<std::string> >();
97 throw boost::bad_any_cast();
103 return *v.ptrCast<std::vector<int> >();
104 throw boost::bad_any_cast();
110 return *v.ptrCast<std::vector<int> >();
111 throw boost::bad_any_cast();
117 return *v.ptrCast<std::vector<unsigned int> >();
118 throw boost::bad_any_cast();
124 return *v.ptrCast<std::vector<unsigned int> >();
125 throw boost::bad_any_cast();
131 if (rdvalue_is<boost::any>(v)) {
132 return *v.ptrCast<boost::any>();
134 throw boost::bad_any_cast();
139 if (rdvalue_is<boost::any>(v)) {
140 return *v.ptrCast<boost::any>();
142 throw boost::bad_any_cast();
147 if (rdvalue_is<boost::any>(v)) {
148 return *v.ptrCast<boost::any>();
150 throw boost::bad_any_cast();
157 const std::vector<T> &tv =
rdvalue_cast<std::vector<T>&>(val);
158 std::ostringstream sstr;
159 sstr.imbue(std::locale(
"C"));
160 sstr << std::setprecision(17);
162 std::copy(tv.begin(), tv.end(), std::ostream_iterator<T>(sstr,
","));
174 res = boost::lexical_cast<std::string>(
rdvalue_cast<
int>(val));
177 res = boost::lexical_cast<std::string>(
rdvalue_cast<
double>(val));
180 res = boost::lexical_cast<std::string>(
rdvalue_cast<
unsigned int>(val));
182 #ifdef RDVALUE_HASBOOL 184 res = boost::lexical_cast<std::string>(
rdvalue_cast<
bool>(val));
188 res = boost::lexical_cast<std::string>(
rdvalue_cast<
float>(val));
191 res = vectToString<double>(val);
194 res = vectToString<float>(val);
197 res = vectToString<int>(val);
200 res = vectToString<unsigned int>(val);
203 res = vectToString<std::string>(val);
207 res = boost::any_cast<std::string>(
rdvalue_cast<boost::any&>(val));
208 }
catch (
const boost::bad_any_cast &) {
209 if (rdvalue_cast<boost::any&>(val).type() ==
typeid(
long)) {
210 res = boost::lexical_cast<std::string>(boost::any_cast<
long>(
212 }
else if (rdvalue_cast<boost::any&>(val).type() ==
typeid(
unsigned long)) {
214 boost::lexical_cast<std::string>(
215 boost::any_cast<
unsigned long>(
rdvalue_cast<boost::any&>(val)));
230 typename boost::enable_if<boost::is_arithmetic<T>, T>::type
from_rdvalue(
237 }
catch (
const boost::bad_any_cast &exc) {
239 res = boost::lexical_cast<T>(
rdvalue_cast<std::string>(arg));
251 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)