From 8da3d277c73987331989c035dfeda5460b493d74 Mon Sep 17 00:00:00 2001 From: Aaron Gokaslan Date: Thu, 3 Nov 2022 12:35:10 -0400 Subject: [PATCH 1/6] add missing std moves --- code/AssetLib/3MF/XmlSerializer.cpp | 4 +++- code/AssetLib/Blender/BlenderLoader.cpp | 3 ++- code/AssetLib/Collada/ColladaParser.cpp | 3 ++- code/AssetLib/DXF/DXFLoader.cpp | 3 ++- code/AssetLib/FBX/FBXDocument.cpp | 2 +- code/AssetLib/FBX/FBXExportNode.h | 13 +++++++------ code/AssetLib/FBX/FBXExporter.cpp | 19 ++++++++++--------- code/AssetLib/IFC/IFCBoolean.cpp | 3 ++- code/AssetLib/IFC/IFCGeometry.cpp | 7 ++++--- code/AssetLib/IFC/IFCLoader.cpp | 3 ++- code/AssetLib/IFC/IFCOpenings.cpp | 7 ++++--- code/AssetLib/Ply/PlyParser.cpp | 5 +++-- code/AssetLib/Ply/PlyParser.h | 2 +- code/AssetLib/XGL/XGLLoader.cpp | 4 +++- include/assimp/XmlParser.h | 3 ++- 15 files changed, 48 insertions(+), 33 deletions(-) diff --git a/code/AssetLib/3MF/XmlSerializer.cpp b/code/AssetLib/3MF/XmlSerializer.cpp index 043ac84cc..efeaec954 100644 --- a/code/AssetLib/3MF/XmlSerializer.cpp +++ b/code/AssetLib/3MF/XmlSerializer.cpp @@ -44,6 +44,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "3MFTypes.h" #include +#include + namespace Assimp { namespace D3MF { @@ -582,7 +584,7 @@ aiMaterial *XmlSerializer::readMaterialDef(XmlNode &node, unsigned int basemater stdMaterialName += strId; stdMaterialName += "_"; if (hasName) { - stdMaterialName += std::string(name); + stdMaterialName += std::string(std::move(name)); } else { stdMaterialName += "basemat_"; stdMaterialName += ai_to_string(mMaterials.size()); diff --git a/code/AssetLib/Blender/BlenderLoader.cpp b/code/AssetLib/Blender/BlenderLoader.cpp index 9322369eb..870554700 100644 --- a/code/AssetLib/Blender/BlenderLoader.cpp +++ b/code/AssetLib/Blender/BlenderLoader.cpp @@ -63,6 +63,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include // zlib is needed for compressed blend files #ifndef ASSIMP_BUILD_NO_COMPRESSED_BLEND @@ -201,7 +202,7 @@ void BlenderImporter::InternReadFile(const std::string &pFile, " (64bit: ", file.i64bit ? "true" : "false", ", little endian: ", file.little ? "true" : "false", ")"); - ParseBlendFile(file, stream); + ParseBlendFile(file, std::move(stream)); Scene scene; ExtractScene(scene, file); diff --git a/code/AssetLib/Collada/ColladaParser.cpp b/code/AssetLib/Collada/ColladaParser.cpp index 7398bdf05..944adedaa 100644 --- a/code/AssetLib/Collada/ColladaParser.cpp +++ b/code/AssetLib/Collada/ColladaParser.cpp @@ -55,6 +55,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include using namespace Assimp; using namespace Assimp::Collada; @@ -2305,7 +2306,7 @@ void ColladaParser::ReadScene(XmlNode &node) { // find the referred scene, skip the leading # NodeLibrary::const_iterator sit = mNodeLibrary.find(url.c_str() + 1); if (sit == mNodeLibrary.end()) { - throw DeadlyImportError("Unable to resolve visual_scene reference \"", std::string(url), "\" in element."); + throw DeadlyImportError("Unable to resolve visual_scene reference \"", std::string(std::move(url)), "\" in element."); } mRootNode = sit->second; } diff --git a/code/AssetLib/DXF/DXFLoader.cpp b/code/AssetLib/DXF/DXFLoader.cpp index f0091f01e..9d0246903 100644 --- a/code/AssetLib/DXF/DXFLoader.cpp +++ b/code/AssetLib/DXF/DXFLoader.cpp @@ -57,6 +57,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include using namespace Assimp; @@ -150,7 +151,7 @@ void DXFImporter::InternReadFile( const std::string& filename, aiScene* pScene, // DXF files can grow very large, so read them via the StreamReader, // which will choose a suitable strategy. file->Seek(0,aiOrigin_SET); - StreamReaderLE stream( file ); + StreamReaderLE stream( std::move(file) ); DXF::LineReader reader (stream); DXF::FileData output; diff --git a/code/AssetLib/FBX/FBXDocument.cpp b/code/AssetLib/FBX/FBXDocument.cpp index 79a7509f4..d5e17d3e6 100644 --- a/code/AssetLib/FBX/FBXDocument.cpp +++ b/code/AssetLib/FBX/FBXDocument.cpp @@ -336,7 +336,7 @@ void Document::ReadGlobalSettings() { DOMError("GlobalSettings dictionary contains no property table"); } - globals.reset(new FileGlobalSettings(*this, props)); + globals.reset(new FileGlobalSettings(*this, std::move(props))); } // ------------------------------------------------------------------------------------------------ diff --git a/code/AssetLib/FBX/FBXExportNode.h b/code/AssetLib/FBX/FBXExportNode.h index c6c4549d5..e0ace002f 100644 --- a/code/AssetLib/FBX/FBXExportNode.h +++ b/code/AssetLib/FBX/FBXExportNode.h @@ -52,6 +52,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include // StreamWriterLE #include +#include #include namespace Assimp { @@ -96,14 +97,14 @@ public: // functions to add properties or children // add a single property to the node template void AddProperty(T value) { - properties.emplace_back(value); + properties.emplace_back(std::forward(value)); } // convenience function to add multiple properties at once template void AddProperties(T value, More... more) { - properties.emplace_back(value); - AddProperties(more...); + properties.emplace_back(std::forward(value)); + AddProperties(std::forward(more)...); } void AddProperties() {} @@ -117,7 +118,7 @@ public: // functions to add properties or children More... more ) { FBX::Node c(name); - c.AddProperties(more...); + c.AddProperties(std::forward(more)...); children.push_back(c); } @@ -149,7 +150,7 @@ public: // support specifically for dealing with Properties70 nodes More... more ) { Node n("P"); - n.AddProperties(name, type, type2, flags, more...); + n.AddProperties(name, type, type2, flags, std::forward(more)...); AddChild(n); } @@ -214,7 +215,7 @@ public: // static member functions bool binary, int indent ) { FBX::FBXExportProperty p(value); - FBX::Node node(name, p); + FBX::Node node(name, std::move(p)); node.Dump(s, binary, indent); } diff --git a/code/AssetLib/FBX/FBXExporter.cpp b/code/AssetLib/FBX/FBXExporter.cpp index fb130a6f4..b7f182262 100644 --- a/code/AssetLib/FBX/FBXExporter.cpp +++ b/code/AssetLib/FBX/FBXExporter.cpp @@ -58,16 +58,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include // Header files, standard library. -#include // shared_ptr -#include -#include // stringstream +#include #include // localtime, tm_* #include -#include -#include -#include -#include +#include // shared_ptr #include +#include +#include // stringstream +#include +#include +#include +#include // RESOURCES: // https://code.blender.org/2013/08/fbx-binary-file-format-specification/ @@ -390,7 +391,7 @@ void FBXExporter::WriteHeaderExtension () raw[i] = uint8_t(GENERIC_FILEID[i]); } FBX::Node::WritePropertyNode( - "FileId", raw, outstream, binary, indent + "FileId", std::move(raw), outstream, binary, indent ); FBX::Node::WritePropertyNode( "CreationTime", GENERIC_CTIME, outstream, binary, indent @@ -2497,7 +2498,7 @@ void FBXExporter::WriteModelNode( const aiVector3D one = {1, 1, 1}; FBX::Node m("Model"); std::string name = node->mName.C_Str() + FBX::SEPARATOR + "Model"; - m.AddProperties(node_uid, name, type); + m.AddProperties(node_uid, std::move(name), type); m.AddChild("Version", int32_t(232)); FBX::Node p("Properties70"); p.AddP70bool("RotationActive", 1); diff --git a/code/AssetLib/IFC/IFCBoolean.cpp b/code/AssetLib/IFC/IFCBoolean.cpp index 2a8456719..64248b037 100644 --- a/code/AssetLib/IFC/IFCBoolean.cpp +++ b/code/AssetLib/IFC/IFCBoolean.cpp @@ -51,6 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include namespace Assimp { namespace IFC { @@ -674,7 +675,7 @@ void ProcessBooleanExtrudedAreaSolidDifference(const Schema_2x3::IfcExtrudedArea std::shared_ptr meshtmp = std::shared_ptr(new TempMesh()); ProcessExtrudedAreaSolid(*as, *meshtmp, conv, false); - std::vector openings(1, TempOpening(as, IfcVector3(0, 0, 0), meshtmp, std::shared_ptr())); + std::vector openings(1, TempOpening(as, IfcVector3(0, 0, 0), std::move(meshtmp), std::shared_ptr())); result = first_operand; diff --git a/code/AssetLib/IFC/IFCGeometry.cpp b/code/AssetLib/IFC/IFCGeometry.cpp index b3620fe81..4b6fbfff2 100644 --- a/code/AssetLib/IFC/IFCGeometry.cpp +++ b/code/AssetLib/IFC/IFCGeometry.cpp @@ -57,8 +57,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # include "../contrib/clipper/clipper.hpp" #endif -#include #include +#include +#include namespace Assimp { namespace IFC { @@ -713,7 +714,7 @@ void ProcessExtrudedArea(const Schema_2x3::IfcExtrudedAreaSolid& solid, const Te std::shared_ptr profile2D = std::shared_ptr(new TempMesh()); profile2D->mVerts.insert(profile2D->mVerts.end(), in.begin(), in.end()); profile2D->mVertcnt.push_back(static_cast(in.size())); - conv.collect_openings->push_back(TempOpening(&solid, dir, profile, profile2D)); + conv.collect_openings->push_back(TempOpening(&solid, dir, std::move(profile), std::move(profile2D))); ai_assert(result.IsEmpty()); } @@ -839,7 +840,7 @@ bool ProcessGeometricItem(const Schema_2x3::IfcRepresentationItem& geo, unsigned if (!meshtmp->IsEmpty()) { conv.collect_openings->push_back(TempOpening(geo.ToPtr(), IfcVector3(0,0,0), - meshtmp, + std::move(meshtmp), std::shared_ptr())); } return true; diff --git a/code/AssetLib/IFC/IFCLoader.cpp b/code/AssetLib/IFC/IFCLoader.cpp index 90b627df8..599f08ee3 100644 --- a/code/AssetLib/IFC/IFCLoader.cpp +++ b/code/AssetLib/IFC/IFCLoader.cpp @@ -67,6 +67,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include namespace Assimp { template <> @@ -227,7 +228,7 @@ void IFCImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSy #endif } - std::unique_ptr db(STEP::ReadFileHeader(stream)); + std::unique_ptr db(STEP::ReadFileHeader(std::move(stream))); const STEP::HeaderInfo &head = static_cast(*db).GetHeader(); if (!head.fileSchema.size() || head.fileSchema.substr(0, 3) != "IFC") { diff --git a/code/AssetLib/IFC/IFCOpenings.cpp b/code/AssetLib/IFC/IFCOpenings.cpp index b8b9b8e05..312a49b78 100644 --- a/code/AssetLib/IFC/IFCOpenings.cpp +++ b/code/AssetLib/IFC/IFCOpenings.cpp @@ -57,9 +57,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # include "../contrib/clipper/clipper.hpp" #endif -#include -#include #include +#include +#include +#include namespace Assimp { namespace IFC { @@ -1699,7 +1700,7 @@ std::vector> GetContoursInPlane(const std::shared_ptr> {contour}; + return std::vector> {std::move(contour)}; else return std::vector> {}; } diff --git a/code/AssetLib/Ply/PlyParser.cpp b/code/AssetLib/Ply/PlyParser.cpp index 57028d758..c2b264b21 100644 --- a/code/AssetLib/Ply/PlyParser.cpp +++ b/code/AssetLib/Ply/PlyParser.cpp @@ -48,6 +48,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include using namespace Assimp; @@ -381,10 +382,10 @@ bool PLY::DOM::SkipSpacesAndLineEnd(std::vector &buffer) { return ret; } -bool PLY::DOM::SkipComments(std::vector &buffer) { +bool PLY::DOM::SkipComments(std::vector buffer) { ai_assert(!buffer.empty()); - std::vector nbuffer = buffer; + std::vector nbuffer = std::move(buffer); // skip spaces if (!SkipSpaces(nbuffer)) { return false; diff --git a/code/AssetLib/Ply/PlyParser.h b/code/AssetLib/Ply/PlyParser.h index 86349294e..4e486f011 100644 --- a/code/AssetLib/Ply/PlyParser.h +++ b/code/AssetLib/Ply/PlyParser.h @@ -431,7 +431,7 @@ public: static bool ParseInstanceBinary(IOStreamBuffer &streamBuffer, DOM* p_pcOut, PLYImporter* loader, bool p_bBE); //! Skip all comment lines after this - static bool SkipComments(std::vector &buffer); + static bool SkipComments(std::vector buffer); static bool SkipSpaces(std::vector &buffer); diff --git a/code/AssetLib/XGL/XGLLoader.cpp b/code/AssetLib/XGL/XGLLoader.cpp index 154af9854..5ea11a3b6 100644 --- a/code/AssetLib/XGL/XGLLoader.cpp +++ b/code/AssetLib/XGL/XGLLoader.cpp @@ -53,6 +53,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include + +#include //#include //#include @@ -224,7 +226,7 @@ aiLight *XGLImporter::ReadDirectionalLight(XmlNode &node) { std::unique_ptr l(new aiLight()); l->mType = aiLightSource_DIRECTIONAL; find_node_by_name_predicate predicate("directionallight"); - XmlNode child = node.find_child(predicate); + XmlNode child = node.find_child(std::move(predicate)); if (child.empty()) { return nullptr; } diff --git a/include/assimp/XmlParser.h b/include/assimp/XmlParser.h index a625f82fb..1874af3d0 100644 --- a/include/assimp/XmlParser.h +++ b/include/assimp/XmlParser.h @@ -49,6 +49,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "IOStream.hpp" #include +#include #include namespace Assimp { @@ -267,7 +268,7 @@ inline TNodeType *TXmlParser::findNode(const std::string &name) { } find_node_by_name_predicate predicate(name); - mCurrent = mDoc->find_node(predicate); + mCurrent = mDoc->find_node(std::move(predicate)); if (mCurrent.empty()) { return nullptr; } From 02378b5e709dc744a0c231b556a665b019e6b58f Mon Sep 17 00:00:00 2001 From: Aaron Gokaslan Date: Thu, 3 Nov 2022 12:36:58 -0400 Subject: [PATCH 2/6] Add one more missing move --- code/AssetLib/FBX/FBXExportNode.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/AssetLib/FBX/FBXExportNode.h b/code/AssetLib/FBX/FBXExportNode.h index e0ace002f..bad3c9e4d 100644 --- a/code/AssetLib/FBX/FBXExportNode.h +++ b/code/AssetLib/FBX/FBXExportNode.h @@ -119,7 +119,7 @@ public: // functions to add properties or children ) { FBX::Node c(name); c.AddProperties(std::forward(more)...); - children.push_back(c); + children.push_back(std::move(c)); } public: // support specifically for dealing with Properties70 nodes From 899f8e1d17d27d4d37401aea8a9893b2dd2ca6b4 Mon Sep 17 00:00:00 2001 From: Aaron Gokaslan Date: Thu, 3 Nov 2022 12:46:40 -0400 Subject: [PATCH 3/6] Remove redundant ctor --- code/AssetLib/3MF/XmlSerializer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/AssetLib/3MF/XmlSerializer.cpp b/code/AssetLib/3MF/XmlSerializer.cpp index efeaec954..674c6b916 100644 --- a/code/AssetLib/3MF/XmlSerializer.cpp +++ b/code/AssetLib/3MF/XmlSerializer.cpp @@ -584,7 +584,7 @@ aiMaterial *XmlSerializer::readMaterialDef(XmlNode &node, unsigned int basemater stdMaterialName += strId; stdMaterialName += "_"; if (hasName) { - stdMaterialName += std::string(std::move(name)); + stdMaterialName += name; } else { stdMaterialName += "basemat_"; stdMaterialName += ai_to_string(mMaterials.size()); From 5a0df03d2ba9a1a02bbdf0cfd12f47d29323fad1 Mon Sep 17 00:00:00 2001 From: Aaron Gokaslan Date: Mon, 7 Nov 2022 09:34:00 -0500 Subject: [PATCH 4/6] Fix another missing move in glTFCommon.h --- code/AssetLib/glTF/glTFCommon.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/AssetLib/glTF/glTFCommon.h b/code/AssetLib/glTF/glTFCommon.h index edc3c7e03..db25e2172 100644 --- a/code/AssetLib/glTF/glTFCommon.h +++ b/code/AssetLib/glTF/glTFCommon.h @@ -245,9 +245,12 @@ struct Nullable { Nullable() : isPresent(false) {} - Nullable(T &val) : + Nullable(const T &val) : value(val), isPresent(true) {} + Nullable(T &&val) : + value(std::move(val)), + isPresent(true) {} }; //! A reference to one top-level object, which is valid From 97cb1c6b15523121ff730cef8b712044718f09d1 Mon Sep 17 00:00:00 2001 From: Aaron Gokaslan Date: Mon, 7 Nov 2022 10:58:28 -0500 Subject: [PATCH 5/6] Fix perfect fowards --- code/AssetLib/FBX/FBXExportNode.h | 12 ++++++------ code/AssetLib/glTF/glTFCommon.h | 5 +---- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/code/AssetLib/FBX/FBXExportNode.h b/code/AssetLib/FBX/FBXExportNode.h index bad3c9e4d..62c06e16b 100644 --- a/code/AssetLib/FBX/FBXExportNode.h +++ b/code/AssetLib/FBX/FBXExportNode.h @@ -85,24 +85,24 @@ public: // constructors // convenience template to construct with properties directly template - Node(const std::string& n, const More... more) + Node(const std::string& n, More&&... more) : name(n) , properties() , children() , force_has_children(false) { - AddProperties(more...); + AddProperties(std::forward(more)...); } public: // functions to add properties or children // add a single property to the node template - void AddProperty(T value) { + void AddProperty(T&& value) { properties.emplace_back(std::forward(value)); } // convenience function to add multiple properties at once template - void AddProperties(T value, More... more) { + void AddProperties(T&& value, More&&... more) { properties.emplace_back(std::forward(value)); AddProperties(std::forward(more)...); } @@ -115,7 +115,7 @@ public: // functions to add properties or children template void AddChild( const std::string& name, - More... more + More&&... more ) { FBX::Node c(name); c.AddProperties(std::forward(more)...); @@ -147,7 +147,7 @@ public: // support specifically for dealing with Properties70 nodes const std::string& type, const std::string& type2, const std::string& flags, - More... more + More&&... more ) { Node n("P"); n.AddProperties(name, type, type2, flags, std::forward(more)...); diff --git a/code/AssetLib/glTF/glTFCommon.h b/code/AssetLib/glTF/glTFCommon.h index db25e2172..edc3c7e03 100644 --- a/code/AssetLib/glTF/glTFCommon.h +++ b/code/AssetLib/glTF/glTFCommon.h @@ -245,12 +245,9 @@ struct Nullable { Nullable() : isPresent(false) {} - Nullable(const T &val) : + Nullable(T &val) : value(val), isPresent(true) {} - Nullable(T &&val) : - value(std::move(val)), - isPresent(true) {} }; //! A reference to one top-level object, which is valid From b717b1cd3eb18bd36f83f636f7b9010ea4065b6b Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 8 Nov 2022 13:39:56 +0100 Subject: [PATCH 6/6] Retrigger the build Fix review findings --- include/assimp/XmlParser.h | 80 ++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/include/assimp/XmlParser.h b/include/assimp/XmlParser.h index 1874af3d0..2b850e6c2 100644 --- a/include/assimp/XmlParser.h +++ b/include/assimp/XmlParser.h @@ -56,7 +56,11 @@ namespace Assimp { /// @brief Will find a node by its name. struct find_node_by_name_predicate { - std::string mName; + /// @brief The default constructor. + find_node_by_name_predicate() = default; + + + std::string mName; ///< The name to find. find_node_by_name_predicate(const std::string &name) : mName(name) { // empty @@ -68,7 +72,7 @@ struct find_node_by_name_predicate { }; /// @brief Will convert an attribute to its int value. -/// @tparam TNodeType The node type. +/// @tparam[in] TNodeType The node type. template struct NodeConverter { public: @@ -109,17 +113,17 @@ public: void clear(); /// @brief Will search for a child-node by its name - /// @param name [in] The name of the child-node. + /// @param[in] name The name of the child-node. /// @return The node instance or nullptr, if nothing was found. TNodeType *findNode(const std::string &name); /// @brief Will return true, if the node is a child-node. - /// @param name [in] The name of the child node to look for. + /// @param[in] name The name of the child node to look for. /// @return true, if the node is a child-node or false if not. bool hasNode(const std::string &name); /// @brief Will parse an xml-file from a given stream. - /// @param stream The input stream. + /// @param[in] stream The input stream. /// @return true, if the parsing was successful, false if not. bool parse(IOStream *stream); @@ -140,87 +144,87 @@ public: TNodeType getRootNode(); /// @brief Will check if a node with the given name is in. - /// @param node [in] The node to look in. - /// @param name [in] The name of the child-node. + /// @param[in] node The node to look in. + /// @param[in] name The name of the child-node. /// @return true, if node was found, false if not. static inline bool hasNode(XmlNode &node, const char *name); /// @brief Will check if an attribute is part of the XmlNode. - /// @param xmlNode [in] The node to search in. - /// @param name [in} The attribute name to look for. + /// @param[in] xmlNode The node to search in. + /// @param[in] name The attribute name to look for. /// @return true, if the was found, false if not. static inline bool hasAttribute(XmlNode &xmlNode, const char *name); /// @brief Will try to get an unsigned int attribute value. - /// @param xmlNode [in] The node to search in. - /// @param name [in] The attribute name to look for. - /// @param val [out] The unsigned int value from the attribute. + /// @param[in] xmlNode The node to search in. + /// @param[in] name The attribute name to look for. + /// @param[out] val The unsigned int value from the attribute. /// @return true, if the node contains an attribute with the given name and if the value is an unsigned int. static inline bool getUIntAttribute(XmlNode &xmlNode, const char *name, unsigned int &val); /// @brief Will try to get an int attribute value. - /// @param xmlNode [in] The node to search in. - /// @param name [in] The attribute name to look for. - /// @param val [out] The int value from the attribute. + /// @param[in] xmlNode The node to search in. + /// @param[in] name The attribute name to look for. + /// @param[out] val The int value from the attribute. /// @return true, if the node contains an attribute with the given name and if the value is an int. static inline bool getIntAttribute(XmlNode &xmlNode, const char *name, int &val); /// @brief Will try to get a real attribute value. - /// @param xmlNode [in] The node to search in. - /// @param name [in] The attribute name to look for. - /// @param val [out] The real value from the attribute. + /// @param[in] xmlNode The node to search in. + /// @param[in] name The attribute name to look for. + /// @param[out] val The real value from the attribute. /// @return true, if the node contains an attribute with the given name and if the value is a real. static inline bool getRealAttribute(XmlNode &xmlNode, const char *name, ai_real &val); /// @brief Will try to get a float attribute value. - /// @param xmlNode [in] The node to search in. - /// @param name [in] The attribute name to look for. - /// @param val [out] The float value from the attribute. + /// @param[in] xmlNode The node to search in. + /// @param[in] name The attribute name to look for. + /// @param[out] val The float value from the attribute. /// @return true, if the node contains an attribute with the given name and if the value is a float. static inline bool getFloatAttribute(XmlNode &xmlNode, const char *name, float &val); /// @brief Will try to get a double attribute value. - /// @param xmlNode [in] The node to search in. - /// @param name [in] The attribute name to look for. - /// @param val [out] The double value from the attribute. + /// @param[in] xmlNode The node to search in. + /// @param[in] name The attribute name to look for. + /// @param[out] val The double value from the attribute. /// @return true, if the node contains an attribute with the given name and if the value is a double. static inline bool getDoubleAttribute(XmlNode &xmlNode, const char *name, double &val); /// @brief Will try to get a std::string attribute value. - /// @param xmlNode [in] The node to search in. - /// @param name [in] The attribute name to look for. - /// @param val [out] The std::string value from the attribute. + /// @param[in] xmlNode The node to search in. + /// @param[in] name The attribute name to look for. + /// @param[out] val The std::string value from the attribute. /// @return true, if the node contains an attribute with the given name and if the value is a std::string. static inline bool getStdStrAttribute(XmlNode &xmlNode, const char *name, std::string &val); /// @brief Will try to get a bool attribute value. - /// @param xmlNode [in] The node to search in. - /// @param name [in] The attribute name to look for. - /// @param val [out] The bool value from the attribute. + /// @param[in] xmlNode The node to search in. + /// @param[in] name The attribute name to look for. + /// @param[out] val The bool value from the attribute. /// @return true, if the node contains an attribute with the given name and if the value is a bool. static inline bool getBoolAttribute(XmlNode &xmlNode, const char *name, bool &val); /// @brief Will try to get the value of the node as a string. - /// @param node [in] The node to search in. - /// @param text [out] The value as a text. + /// @param[in] node The node to search in. + /// @param[out] text The value as a text. /// @return true, if the value can be read out. static inline bool getValueAsString(XmlNode &node, std::string &text); /// @brief Will try to get the value of the node as a float. - /// @param node [in] The node to search in. - /// @param text [out] The value as a float. + /// @param[in] node The node to search in. + /// @param[out] text The value as a float. /// @return true, if the value can be read out. static inline bool getValueAsFloat(XmlNode &node, ai_real &v); /// @brief Will try to get the value of the node as an integer. - /// @param node [in] The node to search in. - /// @param text [out] The value as a int. + /// @param[in] node The node to search in. + /// @param[out] text The value as a int. /// @return true, if the value can be read out. static inline bool getValueAsInt(XmlNode &node, int &v); /// @brief Will try to get the value of the node as an bool. - /// @param node [in] The node to search in. - /// @param text [out] The value as a bool. + /// @param[in] node The node to search in. + /// @param[out] text The value as a bool. /// @return true, if the value can be read out. static inline bool getValueAsBool(XmlNode &node, bool &v);