1 #ifndef CommonTools_Utils_AnyMethodArgument_h 2 #define CommonTools_Utils_AnyMethodArgument_h 12 #include <boost/variant.hpp> 13 #include <boost/type_traits/is_same.hpp> 14 #include <boost/type_traits/is_integral.hpp> 15 #include <boost/type_traits/is_floating_point.hpp> 16 #include <boost/utility/enable_if.hpp> 17 #include <boost/mpl/if.hpp> 37 typedef boost::mpl::if_<matches_another_integral_type<unsigned long>,
38 boost::variant<int8_t, uint8_t,
44 boost::variant<int8_t, uint8_t,
55 template<
typename From,
typename To>
56 std::pair<AnyMethodArgument, int>
retOk_(
const From &
f,
int cast)
const {
57 return std::pair<AnyMethodArgument,int>(
AnyMethodArgument(static_cast<To>(f)), cast);
61 std::pair<AnyMethodArgument,int>
doInt(
int t)
const {
62 if (dataType_ ==
typeid(int8_t)) {
return retOk_<int,int8_t> (
t,0); }
63 if (dataType_ ==
typeid(uint8_t)) {
return retOk_<int,uint8_t> (
t,0); }
64 if (dataType_ ==
typeid(int16_t)) {
return retOk_<int,int16_t> (
t,0); }
65 if (dataType_ ==
typeid(uint16_t)) {
return retOk_<int,uint16_t>(
t,0); }
66 if (dataType_ ==
typeid(int32_t)) {
return retOk_<int,int32_t> (
t,0); }
67 if (dataType_ ==
typeid(uint32_t)) {
return retOk_<int,uint32_t>(
t,0); }
68 if (dataType_ ==
typeid(int64_t)) {
return retOk_<int,int64_t> (
t,0); }
69 if (dataType_ ==
typeid(uint64_t)) {
return retOk_<int,uint64_t>(
t,0); }
70 if (dataType_ ==
typeid(
unsigned long)) {
return retOk_<int,unsigned long> (
t,0); }
71 if (dataType_ ==
typeid(
double)) {
return retOk_<int,double> (
t,1); }
72 if (dataType_ ==
typeid(
float)) {
return retOk_<int,float> (
t,1); }
73 return std::pair<AnyMethodArgument,int>(
t,-1);
83 typename boost::enable_if<boost::is_integral<I>, std::pair<AnyMethodArgument,int> >
::type 87 typename boost::enable_if<boost::is_floating_point<F>, std::pair<AnyMethodArgument,int> >
::type 89 if (dataType_ ==
typeid(
double)) {
return retOk_<F,double>(
t,0); }
90 if (dataType_ ==
typeid(
float)) {
return retOk_<F,float> (
t,0); }
91 return std::pair<AnyMethodArgument,int>(
t,-1);
94 std::pair<AnyMethodArgument,int>
operator()(
const std::string &
t)
const {
97 throw parser::Exception(t.c_str()) <<
"Enumerator '" << dataType_.
name() <<
"' has no keys.\nPerhaps the dictionary is missing?\n";
101 return std::pair<AnyMethodArgument,int>(ival,1);
103 if (dataType_ ==
typeid(std::string)) {
return std::pair<AnyMethodArgument,int>(
t,0); }
104 return std::pair<AnyMethodArgument,int>(
t,-1);
112 void *
operator()(
const T &
t)
const {
return const_cast<void*
>(
static_cast<const void *
>(&
t)); }
void * operator()(const T &t) const
boost::enable_if< boost::is_integral< I >, std::pair< AnyMethodArgument, int > >::type operator()(const I &t) const
edm::TypeWithDict dataType_
std::pair< AnyMethodArgument, int > operator()(const std::string &t) const
size_t dataMemberSize() const
std::pair< AnyMethodArgument, int > retOk_(const From &f, int cast) const
const std::complex< double > I
std::pair< AnyMethodArgument, int > doInt(int t) const
AnyMethodArgumentFixup(const edm::TypeWithDict &type)
int stringToEnumValue(std::string const &) const
boost::mpl::if_< matches_another_integral_type< unsigned long >, boost::variant< int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t, double, float, std::string >, boost::variant< int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t, unsigned long, double, float, std::string > >::type AnyMethodArgument
unsigned long long uint64_t
boost::enable_if< boost::is_floating_point< F >, std::pair< AnyMethodArgument, int > >::type operator()(const F &t) const
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)