X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Ffg_props.hxx;h=0b52d0c947c1bc3b9a6d950481e0052d4c205ad4;hb=c4b2e54551a0c3384f6c041ffe89187942993f16;hp=904174dddfa41bf50bd415c3242d36acaf0b2a21;hpb=5ef00ab621d118b0695f0c167cf3369d49f206da;p=flightgear.git diff --git a/src/Main/fg_props.hxx b/src/Main/fg_props.hxx index 904174ddd..0b52d0c94 100644 --- a/src/Main/fg_props.hxx +++ b/src/Main/fg_props.hxx @@ -14,6 +14,78 @@ extern bool fgSaveFlight (ostream &output); extern bool fgLoadFlight (istream &input); + +//////////////////////////////////////////////////////////////////////// +// Convenience functions for getting property values. +//////////////////////////////////////////////////////////////////////// + +/** + * Get an SGValue pointer that can be queried repeatedly. + * + * If the property value is going to be accessed within the loop, + * it is best to use this method for maximum efficiency. + */ +inline SGValue * fgGetValue (const string &name, bool create = false) +{ + return globals->get_props()->getValue(name, create); +} + +inline bool fgHasValue (const string &name) +{ + return globals->get_props()->hasValue(name); +} + +inline bool fgGetBool (const string &name, bool defaultValue = false) +{ + return globals->get_props()->getBoolValue(name, defaultValue); +} + +inline int fgGetInt (const string &name, int defaultValue = 0) +{ + return globals->get_props()->getIntValue(name, defaultValue); +} + +inline float fgGetFloat (const string &name, float defaultValue = 0.0) +{ + return globals->get_props()->getFloatValue(name, defaultValue); +} + +inline double fgGetDouble (const string &name, double defaultValue = 0.0) +{ + return globals->get_props()->getDoubleValue(name, defaultValue); +} + +inline string fgGetString (const string &name, string defaultValue = "") +{ + return globals->get_props()->getStringValue(name, defaultValue); +} + +inline bool fgSetBool (const string &name, bool val) +{ + return globals->get_props()->setBoolValue(name, val); +} + +inline bool fgSetInt (const string &name, int val) +{ + return globals->get_props()->setIntValue(name, val); +} + +inline bool fgSetFloat (const string &name, float val) +{ + return globals->get_props()->setFloatValue(name, val); +} + +inline bool fgSetDouble (const string &name, double val) +{ + return globals->get_props()->setDoubleValue(name, val); +} + +inline bool fgSetString (const string &name, const string &val) +{ + return globals->get_props()->setStringValue(name, val); +} + + //////////////////////////////////////////////////////////////////////// // Convenience functions for tying properties, with logging. @@ -23,95 +95,106 @@ inline void fgUntie (const string &name) { if (!globals->get_props()->untie(name)) - FG_LOG(FG_GENERAL, FG_WARN, "Failed to untie property " << name); + SG_LOG(SG_GENERAL, SG_WARN, "Failed to untie property " << name); } // Templates cause ambiguity here inline void -fgTie (const string &name, bool *pointer) +fgTie (const string &name, bool *pointer, bool useDefault = true) { - if (!globals->get_props()->tie(name, SGRawValuePointer(pointer))) - FG_LOG(FG_GENERAL, FG_WARN, + if (!globals->get_props()->tie(name, SGRawValuePointer(pointer), + useDefault)) + SG_LOG(SG_GENERAL, SG_WARN, "Failed to tie property " << name << " to a pointer"); } inline void -fgTie (const string &name, int *pointer) +fgTie (const string &name, int *pointer, bool useDefault = true) { - if (!globals->get_props()->tie(name, SGRawValuePointer(pointer))) - FG_LOG(FG_GENERAL, FG_WARN, + if (!globals->get_props()->tie(name, SGRawValuePointer(pointer), + useDefault)) + SG_LOG(SG_GENERAL, SG_WARN, "Failed to tie property " << name << " to a pointer"); } inline void -fgTie (const string &name, float *pointer) +fgTie (const string &name, float *pointer, bool useDefault = true) { - if (!globals->get_props()->tie(name, SGRawValuePointer(pointer))) - FG_LOG(FG_GENERAL, FG_WARN, + if (!globals->get_props()->tie(name, SGRawValuePointer(pointer), + useDefault)) + SG_LOG(SG_GENERAL, SG_WARN, "Failed to tie property " << name << " to a pointer"); } inline void -fgTie (const string &name, double *pointer) +fgTie (const string &name, double *pointer, bool useDefault = true) { - if (!globals->get_props()->tie(name, SGRawValuePointer(pointer))) - FG_LOG(FG_GENERAL, FG_WARN, + if (!globals->get_props()->tie(name, SGRawValuePointer(pointer), + useDefault)) + SG_LOG(SG_GENERAL, SG_WARN, "Failed to tie property " << name << " to a pointer"); } inline void -fgTie (const string &name, string *pointer) +fgTie (const string &name, string *pointer, bool useDefault = true) { - if (!globals->get_props()->tie(name, SGRawValuePointer(pointer))) - FG_LOG(FG_GENERAL, FG_WARN, + if (!globals->get_props()->tie(name, SGRawValuePointer(pointer), + useDefault)) + SG_LOG(SG_GENERAL, SG_WARN, "Failed to tie property " << name << " to a pointer"); } template inline void -fgTie (const string &name, V (*getter)(), void (*setter)(V) = 0) +fgTie (const string &name, V (*getter)(), void (*setter)(V) = 0, + bool useDefault = true) { - if (!globals->get_props()->tie(name, SGRawValueFunctions(getter, setter))) - FG_LOG(FG_GENERAL, FG_WARN, + if (!globals->get_props()->tie(name, SGRawValueFunctions(getter, setter), + useDefault)) + SG_LOG(SG_GENERAL, SG_WARN, "Failed to tie property " << name << " to functions"); } template inline void fgTie (const string &name, int index, V (*getter)(int), - void (*setter)(int, V) = 0) + void (*setter)(int, V) = 0, bool useDefault = true) { if (!globals->get_props()->tie(name, SGRawValueFunctionsIndexed(index, getter, - setter))) - FG_LOG(FG_GENERAL, FG_WARN, + setter), + useDefault)) + SG_LOG(SG_GENERAL, SG_WARN, "Failed to tie property " << name << " to indexed functions"); } template inline void fgTie (const string &name, T * obj, V (T::*getter)() const, - void (T::*setter)(V) = 0) + void (T::*setter)(V) = 0, bool useDefault = true) { if (!globals->get_props()->tie(name, - SGRawValueMethods(*obj, getter, setter))) - FG_LOG(FG_GENERAL, FG_WARN, + SGRawValueMethods(*obj, getter, setter), + useDefault)) + SG_LOG(SG_GENERAL, SG_WARN, "Failed to tie property " << name << " to object methods"); } template inline void fgTie (const string &name, T * obj, int index, - V (T::*getter)(int) const, void (T::*setter)(int, V) = 0) + V (T::*getter)(int) const, void (T::*setter)(int, V) = 0, + bool useDefault = true) { if (!globals->get_props()->tie(name, SGRawValueMethodsIndexed(*obj, index, getter, - setter))) - FG_LOG(FG_GENERAL, FG_WARN, + setter), + useDefault)) + SG_LOG(SG_GENERAL, SG_WARN, "Failed to tie property " << name << " to indexed object methods"); }