Beispiel #1
0
 static const char *extract_value(const value& val) { return val.string_value().c_str(); }
Beispiel #2
0
    static type_name extract_value(const value& val) { return extract; } \
    static value create_value(const type_name& x) { return construct; } \
};
#define DEFINE_VALUE_TYPE_REF(type_name, req_type,  extract, construct) \
template <> struct value_type_info<type_name> { \
    static bool can_convert_from(const value& val) { return val.type() == req_type; } \
    static const type_name& extract_value(const value& val) { return extract; } \
    static value create_value(const type_name& x) { return construct; } \
};


DEFINE_VALUE_TYPE    (double,            value_type::number_type, val.number_value(),   value(x))
DEFINE_VALUE_TYPE    (int,               value_type::number_type, val.number_value(),   value((double)x))
DEFINE_VALUE_TYPE    (float,             value_type::number_type, val.number_value(),   value((double)x))
DEFINE_VALUE_TYPE    (bool,              value_type::bool_type,   val.bool_value(),     value(x))
DEFINE_VALUE_TYPE_REF(std::string,       value_type::string_type, val.string_value(),   value(x))
DEFINE_VALUE_TYPE_REF(value_vector_type, value_type::vector_type, val.vector_value(),   value(x))
DEFINE_VALUE_TYPE_REF(group,             value_type::group_type,  val.group_value(),    value(x))

#undef DEFINE_VALUE_TYPE
#undef DEFINE_VALUE_TYPE_REF

#define LIGHTCONF_BEGIN_ENUM(enumname) \
template <> struct value_type_info<enumname> { \
    static const std::map<enumname, std::string> names; \
    static bool can_convert_from(const value& val) { \
        if (val.type() != value_type::string_type) return false; \
        for (auto kv : names) { if (kv.second == val.string_value()) return true; } \
        return false; \
    } \
    static enumname extract_value(const value& val) { \