| 1 | = LoadParam = |
| 2 | A functor that enables us to (very) easy load many different Types of data onto all objects in orxonox. |
| 3 | LoadParam can be found source:trunk/src/lib/util/loading/load_param.h#HEAD |
| 4 | |
| 5 | == Usage == |
| 6 | this loads from class className the parameter from the XML file parameterName, and sends the output to paramFunction. |
| 7 | * using the __Lumberjack-Method__: |
| 8 | {{{ |
| 9 | #!cpp |
| 10 | LoadParam(XMLROOT, PARAMNAME, OBJECT, CLASS, FUNCTIONNAME) |
| 11 | }}} |
| 12 | * XMLROOT: normaly the root, where a given parameter is located under |
| 13 | * PARAMNAME: the Parameter in the XML file |
| 14 | * OBJECT: The Object to which we would load the Information (normally this) |
| 15 | * CLASS: the class we want to load it to |
| 16 | * FUNCTIONNAME: The name of the function we want to load |
| 17 | |
| 18 | Actually the two Function up there do exactly the same Thing. (only with the second one, you can do more elaborate things.) |
| 19 | |
| 20 | At the end you could also specify some default Values, by just adding them, as you would as parameters of the selected Function. |
| 21 | |
| 22 | == Document what you do == |
| 23 | There is also the possibility to document what you are doing. |
| 24 | Just use a trailing |
| 25 | {{{ |
| 26 | #!cpp |
| 27 | .describe("what this does"). |
| 28 | }}} |
| 29 | and we can easily write a full featured documentation. |
| 30 | |
| 31 | == what is cool about it == |
| 32 | Because LoadParam is a Functor with multiple input methoids it is comprehends (normally) what arguments must be given to the Function, and will split your input (in the XML-file) into what it needs. |
| 33 | |
| 34 | == Example == |
| 35 | {{{ |
| 36 | #!cpp |
| 37 | /** |
| 38 | \brief loads the Parameters of a Campaign |
| 39 | \param root: The XML-element to load from |
| 40 | */ |
| 41 | void Campaign::loadParams(const TiXmlElement* root) |
| 42 | { |
| 43 | static_cast<BaseObject*>(this)->loadParams(root); |
| 44 | |
| 45 | LoadParam(root, "identifier", this, Campaign, setStoryID, false) |
| 46 | .describe("A Unique Identifier for this Campaign") |
| 47 | ->defaultValues(1, 0); |
| 48 | |
| 49 | LoadParam(root, "WorldList", this, Campaign, loadWorldListParams) |
| 50 | .describe("A List of Worlds to be loaded in this Campaign"); |
| 51 | } |
| 52 | }}} |
| 53 | |
| 54 | Loads the following: |
| 55 | {{{ |
| 56 | #!xml |
| 57 | <Campaign> |
| 58 | <name>string</name> -- the name of the Object at hand (Default: "") |
| 59 | <identifier>int</identifier> -- A Unique Identifier for this Campaign (Default: 0) |
| 60 | <WorldList>XML-Element</WorldList> -- A List of Worlds to be loaded in this Campaign |
| 61 | </Campaign> |
| 62 | }}} |
| 63 | as you can see also <name> gets loaded, this is because Campaign is derived from BaseObject, and as you can see in the loadParams function, its loadParams also gets called. |
| 64 | |
| 65 | also you may have noticed the Default arguments of <identifier>, because you specified 0 as default |
| 66 | |
| 67 | (output may differ, from the above) |