diff --git a/src/core/model/command-line.cc b/src/core/model/command-line.cc index bd84cc91c..79effd240 100644 --- a/src/core/model/command-line.cc +++ b/src/core/model/command-line.cc @@ -200,7 +200,7 @@ CommandLine::Parse (std::vector args) { args.erase (args.begin ()); // discard the program name - for (auto param : args) + for (const auto & param : args) { if (HandleOption (param)) { @@ -494,9 +494,7 @@ CommandLine::PrintGlobals (std::ostream &os) const // Sort output std::vector globals; - for (GlobalValue::Iterator i = GlobalValue::Begin (); - i != GlobalValue::End (); - ++i) + for (auto i = GlobalValue::Begin(); i != GlobalValue::End(); ++i) { std::stringstream ss; ss << " --" << (*i)->GetName () << "=["; @@ -508,11 +506,38 @@ CommandLine::PrintGlobals (std::ostream &os) const globals.push_back (ss.str ()); } std::sort (globals.begin (), globals.end ()); - for (std::vector::const_iterator it = globals.begin (); - it < globals.end (); - ++it) + for (const auto & s : globals) { - os << *it; + os << s; + } +} + +void +CommandLine::PrintAttributeList (std::ostream &os, const TypeId tid, std::stringstream & header) const +{ + NS_LOG_FUNCTION (this); + + if (!tid.GetAttributeN ()) + { + return; + } + os << header.str() << "\n"; + // To sort output + std::vector attributes; + + for (uint32_t i = 0; i < tid.GetAttributeN (); ++i) + { + std::stringstream ss; + ss << " --" << tid.GetAttributeFullName (i) << "=["; + struct TypeId::AttributeInformation info = tid.GetAttribute (i); + ss << info.initialValue->SerializeToString (info.checker) << "]\n" + << " " << info.help << "\n"; + attributes.push_back (ss.str ()); + } + std::sort (attributes.begin (), attributes.end ()); + for (const auto & s : attributes) + { + os << s; } } @@ -527,27 +552,22 @@ CommandLine::PrintAttributes (std::ostream &os, const std::string &type) const NS_FATAL_ERROR ("Unknown type=" << type << " in --PrintAttributes"); } - os << "Attributes for TypeId " << tid.GetName () << std::endl; + std::stringstream header; + header << "Attributes for TypeId " << tid.GetName (); + PrintAttributeList (os, tid, header); + header.str(""); - // Sort output - std::vector attributes; - - for (uint32_t i = 0; i < tid.GetAttributeN (); ++i) + //Parent Attributes + if (tid.GetParent () != tid) { - std::stringstream ss; - ss << " --" << tid.GetAttributeFullName (i) << "=["; - struct TypeId::AttributeInformation info = tid.GetAttribute (i); - ss << info.initialValue->SerializeToString (info.checker) << "]" - << std::endl; - ss << " " << info.help << std::endl; - attributes.push_back (ss.str ()); - } - std::sort (attributes.begin (), attributes.end ()); - for (std::vector::const_iterator it = attributes.begin (); - it < attributes.end (); - ++it) - { - os << *it; + TypeId tmp = tid.GetParent (); + while (tmp.GetParent () != tmp) + { + header << "Attributes defined in parent class " << tmp.GetName (); + PrintAttributeList (os, tmp, header); + header.str(""); + tmp = tmp.GetParent (); + } } } @@ -573,11 +593,9 @@ CommandLine::PrintGroup (std::ostream &os, const std::string &group) const groupTypes.push_back (ss.str ()); } std::sort (groupTypes.begin (), groupTypes.end ()); - for (std::vector::const_iterator it = groupTypes.begin (); - it < groupTypes.end (); - ++it) + for (const auto & s : groupTypes) { - os << *it; + os << s; } } @@ -598,11 +616,9 @@ CommandLine::PrintTypeIds (std::ostream &os) const types.push_back (ss.str ()); } std::sort (types.begin (), types.end ()); - for (std::vector::const_iterator it = types.begin (); - it < types.end (); - ++it) + for (const auto & s : types) { - os << *it; + os << s; } } @@ -620,11 +636,9 @@ CommandLine::PrintGroups (std::ostream &os) const os << "Registered TypeId groups:" << std::endl; // Sets are already sorted - for (std::set::const_iterator k = groups.begin (); - k != groups.end (); - ++k) + for (const auto & s : groups) { - os << " " << *k << std::endl; + os << " " << s << std::endl; } } diff --git a/src/core/model/command-line.h b/src/core/model/command-line.h index e24ae8f16..57998205b 100644 --- a/src/core/model/command-line.h +++ b/src/core/model/command-line.h @@ -26,6 +26,7 @@ #include "callback.h" #include "nstime.h" +#include "type-id.h" /** * \file @@ -538,12 +539,21 @@ private: */ void PrintGlobals (std::ostream &os) const; /** - * Handler for \c \--PrintAttributes: print the attributes for a given type. + * Handler for \c \--PrintAttributes: print the attributes for a given type + * as well as its parents. * * \param [in,out] os the output stream. - * \param [in] type The TypeId whose Attributes should be displayed + * \param [in] type The type name whose Attributes should be displayed, */ void PrintAttributes (std::ostream &os, const std::string &type) const; + /** + * Print the Attributes for a single type. + * + * \param [in,out] os the output stream. + * \param [in] tid The TypeId whose Attributes should be displayed, + * \param [in] header A header line to print if \c tid has Attributes + */ + void PrintAttributeList (std::ostream &os, const TypeId tid, std::stringstream & header) const; /** * Handler for \c \--PrintGroup: print all types belonging to a given group. *