25 #ifndef INCLUDED_GetOptionalParameter_h_GUID_F4FA55E0_C946_4AAE_6741_57C269C56D24 26 #define INCLUDED_GetOptionalParameter_h_GUID_F4FA55E0_C946_4AAE_6741_57C269C56D24 32 #include <json/value.h> 41 #define OSVR_DECLARE_JSON_TYPE_GETTER(TYPENAME, METHOD) \ 42 template <> struct JsonTypeGetter<TYPENAME> { \ 43 static TYPENAME apply(Json::Value const &val) { return val.METHOD(); } \ 45 OSVR_DECLARE_JSON_TYPE_GETTER(
bool, asBool)
46 OSVR_DECLARE_JSON_TYPE_GETTER(
float, asFloat)
47 OSVR_DECLARE_JSON_TYPE_GETTER(
double, asDouble)
48 OSVR_DECLARE_JSON_TYPE_GETTER(
int, asInt)
49 OSVR_DECLARE_JSON_TYPE_GETTER(
std::
string, asString)
51 #undef OSVR_DECLARE_JSON_TYPE_GETTER 53 template <
typename T>
inline T json_cast(Json::Value
const &val) {
62 dest = json_cast<
T>(obj.get(key, dest));
66 template <
typename T, Json::Value::ArrayIndex N>
69 Json::Value
const &node = obj[key];
70 if (!node.isArray()) {
73 if (node.size() != N) {
76 for (Json::Value::ArrayIndex i = 0; i < N; ++i) {
77 dest[i] = json_cast<
T>(node[i]);
82 #endif // INCLUDED_GetOptionalParameter_h_GUID_F4FA55E0_C946_4AAE_6741_57C269C56D24 Definition: GetOptionalParameter.h:40
The main namespace for all C++ elements of the framework, internal and external.
Definition: namespace_osvr.dox:3
Definition: TypeSafeIdHash.h:44
typename F::template apply< Args... > apply
Apply an alias class.
Definition: Apply.h:44
Definition: newuoa.h:1888
void getOptionalParameter(T &dest, Json::Value const &obj, const char *key)
Gets an optional parameter from a JSON object: if it's not present, the existing value is left there...
Definition: GetOptionalParameter.h:60