15#include "ns3/command-line.h"
16#include "ns3/config.h"
17#include "ns3/global-value.h"
19#include "ns3/node-container.h"
20#include "ns3/object-vector.h"
21#include "ns3/object.h"
22#include "ns3/pointer.h"
23#include "ns3/simple-channel.h"
24#include "ns3/string.h"
25#include "ns3/system-path.h"
97std::map<std::string, ns3::TypeId::AttributeInformation>
100 std::map<std::string, ns3::TypeId::AttributeInformation> index;
104 index[info.
name] = info;
115std::map<std::string, ns3::TypeId::TraceSourceInformation>
118 std::map<std::string, ns3::TypeId::TraceSourceInformation> index;
122 index[info.
name] = info;
149 commentStart =
"===============================================================\n";
152 file =
"File: introspected-doxygen.txt";
255 void Print(std::ostream& os)
const;
262 std::vector<std::string>
Get(
TypeId tid)
const;
295 std::vector<std::pair<TypeId, std::string>>
m_output;
346 os <<
item.first.GetName() <<
" -> " <<
item.second << std::endl;
354 std::ostringstream
oss;
383std::vector<std::string>
387 std::vector<std::string>
paths;
390 if (
item.first == tid)
417 std::sort(
t.begin(),
t.end());
418 t.erase(std::unique(
t.begin(),
t.end()),
t.end());
421std::vector<std::string>
490 if (
child.IsChildOf(tid))
502 if (
item.first == tid ||
item.second == tid)
505 if (
item.first == tid)
509 if (
item.second == tid)
533 static bool mapped =
false;
587typedef std::map<std::string, int32_t>
NameMap;
602 static bool mapped =
false;
656 static bool mapped =
false;
720 os <<
"Introspection did not find any typical Config paths." <<
breakBoth << std::endl;
726 os << tid.
GetName() <<
" is accessible through the following paths"
727 <<
" with Config::Set and Config::Connect:" << std::endl;
729 for (
const auto& path :
paths)
754 for (
const auto& [
name, info] : index)
759 << info.checker->GetValueTypeName() <<
listLineStop << std::endl;
762 if (info.checker->HasUnderlyingTypeInformation())
766 std::string
valType = info.checker->GetValueTypeName();
767 underType = info.checker->GetUnderlyingTypeInformation();
772 if (
valType ==
"ns3::PointerValue")
783 else if (
valType ==
"ns3::ObjectPtrContainerValue")
797 return uType.rfind(s, 0) == 0;
816 std::string
value = info.initialValue->SerializeToString(info.checker);
830 std::string
msg) ->
void {
865 os <<
"No Attributes are defined for this type." <<
breakBoth << std::endl;
875 while (
tmp.GetParent() !=
tmp)
877 if (
tmp.GetAttributeN() != 0)
904 for (
const auto& [
name, info] : index)
914 os <<
"Callback signature: " << info.callback << std::endl;
939 os <<
"No TraceSources are defined for this type." <<
breakBoth << std::endl;
949 while (
tmp.GetParent() !=
tmp)
951 if (
tmp.GetTraceSourceN() != 0)
974 std::size_t arch = (
sizeof(
void*) *
CHAR_BIT);
977 << arch <<
"-bit architecture)." << std::endl;
1030 if (
item.second < 0)
1054 os <<
commentStart <<
page <<
"TypeIdList All ns3::TypeId's\n" << std::endl;
1055 os <<
"This is a list of all" <<
reference <<
"ns3::TypeId's.\n"
1056 <<
"For more information see the" <<
reference <<
"ns3::TypeId "
1057 <<
"section of this API documentation and the" <<
referenceNo <<
"TypeId section "
1058 <<
"in the Configuration and " <<
referenceNo <<
"Attributes chapter of the Manual.\n"
1069 if (
item.second < 0)
1096 os <<
commentStart <<
page <<
"AttributeList All Attributes\n" << std::endl;
1097 os <<
"This is a list of all" <<
reference <<
"attributes classes. "
1098 <<
"For more information see the" <<
reference <<
"attributes "
1099 <<
"section of this API documentation and the Attributes sections "
1100 <<
"in the Tutorial and Manual.\n"
1109 if (
item.second < 0)
1125 for (
const auto& [
name, info] : index)
1145 os <<
commentStart <<
page <<
"GlobalValueList All GlobalValues\n" << std::endl;
1146 os <<
"This is a list of all" <<
reference <<
"ns3::GlobalValue instances.\n"
1147 <<
"See ns3::GlobalValue for how to set these." << std::endl;
1153 (*i)->GetValue(
val);
1173 os <<
commentStart <<
page <<
"GroupsList All Object Groups\n" << std::endl;
1174 os <<
"This is a list of all Object Groups.\n"
1175 <<
"Objects are added to groups by " <<
hrefStart <<
"ns3::TypeId::SetGroupName()" <<
hrefMid
1176 <<
"ns3::TypeId::SetGroupName" <<
hrefStop <<
"\n"
1181 for (
const auto& g :
groups)
1186 for (
const auto& tid : g.second)
1205 os <<
commentStart <<
page <<
"LogComponentList All LogComponents\n" << std::endl;
1206 os <<
"This is a list of all" <<
reference <<
"ns3::LogComponent instances.\n" << std::endl;
1214 std::size_t
widthL = std::string(
"Log Component").size();
1215 std::size_t
widthR = std::string(
"file").size();
1216 for (
const auto&
it : (*logs))
1219 std::string
file =
it.second->File();
1222 while (
file.find(
"../") == 0)
1228 const std::string
tLeft(
"| ");
1229 const std::string
tMid(
" | ");
1230 const std::string
tRight(
" |");
1234 << std::left <<
"File" <<
tRight << std::endl;
1236 << std::string(
widthR - 1,
'-') <<
tRight << std::endl;
1238 for (
const auto&
it : (*logs))
1240 std::string
file =
it.second->File();
1243 while (
file.find(
"../") == 0)
1251 os << std::right << std::endl;
1267 os <<
commentStart <<
page <<
"TraceSourceList All TraceSources\n" << std::endl;
1268 os <<
"This is a list of all" <<
reference <<
"tracing sources. "
1269 <<
"For more information see the " <<
reference <<
"tracing "
1270 <<
"section of this API documentation and the Tracing sections "
1271 <<
"in the Tutorial and Manual.\n"
1281 if (
item.second < 0)
1298 for (
const auto& [
name, info] : index)
1336 <<
"AttributeValue implementation for " <<
name <<
"\n";
1357 const std::string&
name,
1358 const std::string& type,
1359 const std::string& header)
1371 os <<
"AttributeValue implementation for " <<
name <<
"." << std::endl;
1372 os <<
seeAlso <<
"AttributeValue" << std::endl;
1378 os <<
"(const " << type <<
" & value)\n"
1380 <<
argument <<
"[in] value The " <<
name <<
" value to use.\n";
1390 <<
"Access the " <<
name <<
" value as type " <<
codeWord <<
"T.\n"
1397 if (type !=
"Callback")
1401 <<
"Set the value.\n"
1402 <<
argument <<
"[in] value The value to adopt.\n"
1408 <<
"The stored " <<
name <<
" instance.\n"
1426 std::string
make =
"ns3::Make" +
name +
"Accessor ";
1431 <<
make <<
"(T1 a1)\n"
1432 <<
copyDoc <<
"ns3::MakeAccessorHelper(T1)\n"
1433 <<
seeAlso <<
"AttributeAccessor\n"
1439 <<
make <<
"(T1 a1, T2 a2)\n"
1440 <<
copyDoc <<
"ns3::MakeAccessorHelper(T1,T2)\n"
1441 <<
seeAlso <<
"AttributeAccessor\n"
1459 std::string
make =
"ns3::Make" +
name +
"Checker ";
1465 <<
" \"" << header <<
"\"" << std::endl;
1466 os <<
"AttributeChecker implementation for " <<
name <<
"Value." << std::endl;
1467 os <<
seeAlso <<
"AttributeChecker" << std::endl;
1474 <<
returns <<
"The AttributeChecker.\n"
1475 <<
seeAlso <<
"AttributeChecker\n"
1521 {
"Address",
"Address",
true,
"address.h" },
1522 {
"Box",
"Box",
true,
"box.h" },
1523 {
"DataRate",
"DataRate",
true,
"data-rate.h" },
1524 {
"Length",
"Length",
true,
"length.h" },
1525 {
"Ipv4Address",
"Ipv4Address",
true,
"ipv4-address.h" },
1526 {
"Ipv4Mask",
"Ipv4Mask",
true,
"ipv4-address.h" },
1527 {
"Ipv6Address",
"Ipv6Address",
true,
"ipv6-address.h" },
1528 {
"Ipv6Prefix",
"Ipv6Prefix",
true,
"ipv6-address.h" },
1529 {
"Mac16Address",
"Mac16Address",
true,
"mac16-address.h" },
1530 {
"Mac48Address",
"Mac48Address",
true,
"mac48-address.h" },
1531 {
"Mac64Address",
"Mac64Address",
true,
"mac64-address.h" },
1532 {
"ObjectFactory",
"ObjectFactory",
true,
"object-factory.h" },
1533 {
"Priomap",
"Priomap",
true,
"prio-queue-disc.h" },
1534 {
"QueueSize",
"QueueSize",
true,
"queue-size.h" },
1535 {
"Rectangle",
"Rectangle",
true,
"rectangle.h" },
1536 {
"Ssid",
"Ssid",
true,
"ssid.h" },
1537 {
"TypeId",
"TypeId",
true,
"type-id.h" },
1538 {
"UanModesList",
"UanModesList",
true,
"uan-tx-mode.h" },
1539 {
"ValueClassTest",
"ValueClassTest",
false,
"attribute-test-suite.cc" },
1540 {
"Vector2D",
"Vector2D",
true,
"vector.h" },
1541 {
"Vector3D",
"Vector3D",
true,
"vector.h" },
1542 {
"Waypoint",
"Waypoint",
true,
"waypoint.h" },
1543 {
"WifiMode",
"WifiMode",
true,
"wifi-mode.h" },
1546 {
"Boolean",
"bool",
false,
"boolean.h" },
1547 {
"Callback",
"CallbackBase",
true,
"callback.h" },
1548 {
"Double",
"double",
false,
"double.h" },
1549 {
"Enum",
"T",
false,
"enum.h" },
1550 {
"Integer",
"int64_t",
false,
"integer.h" },
1551 {
"String",
"std::string",
false,
"string.h" },
1552 {
"Time",
"Time",
true,
"nstime.h" },
1553 {
"Uinteger",
"uint64_t",
false,
"uinteger.h" },
1554 {
"",
"",
false,
"last placeholder" }
1559 while (!attributes[
i].m_name.empty())
1587 cmd.Usage(
"Generate documentation for all ns-3 registered types, "
1588 "trace sources, attributes and global variables.");
1589 cmd.AddValue(
"output-text",
"format output as plain text",
outputText);
1590 cmd.AddValue(
"TypeId",
"Print docs for just the given TypeId",
typeId);
1607 std::cout <<
"\nFound fully qualified name " <<
fqTypeId <<
"\n\n";
1617 std::cerr <<
"Invalid TypeId name: " <<
typeId <<
"\n" << std::endl;
1629 std::cout << std::endl;
1632 <<
"Doxygen docs generated from the TypeId database.\n"
1633 <<
note <<
"This file is automatically generated by " <<
codeWord
1634 <<
"print-introspected-doxygen.cc. Do not edit this file! "
1635 <<
"Edit that file instead.\n"
Parse command-line arguments.
static Iterator Begin()
The Begin iterator.
static Iterator End()
The End iterator.
static ComponentList * GetComponentList()
Get the list of LogComponents.
std::unordered_map< std::string, LogComponent * > ComponentList
LogComponent name map.
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
static TypeId GetTypeId()
Register this type.
AttributeChecker implementation for ObjectPtrContainerValue.
virtual TypeId GetItemTypeId() const =0
Get the TypeId of the container class type.
AttributeChecker implementation for PointerValue.
virtual TypeId GetPointeeTypeId() const =0
Get the TypeId of the base type.
Smart pointer class similar to boost::intrusive_ptr.
Hold variables of type string.
a unique identifier for an interface.
std::size_t GetTraceSourceN() const
Get the number of Trace sources.
bool MustHideFromDocumentation() const
Check if this TypeId should not be listed in documentation.
AttributeFlag
Flags describing when a given attribute can be read or written.
@ ATTR_GET
The attribute can be read.
@ ATTR_SET
The attribute can be written.
@ ATTR_CONSTRUCT
The attribute can be written at construction-time.
TypeId::TraceSourceInformation GetTraceSource(std::size_t i) const
Get the trace source by index.
std::string GetGroupName() const
Get the group name.
static uint16_t GetRegisteredN()
Get the number of registered TypeIds.
std::size_t GetAttributeN() const
Get the number of attributes.
TypeId GetParent() const
Get the parent of this TypeId.
static TypeId GetRegistered(uint16_t i)
Get a TypeId by index.
std::size_t GetSize() const
Get the size of this object.
TypeId::AttributeInformation GetAttribute(std::size_t i) const
Get Attribute information by index.
static bool LookupByNameFailSafe(std::string name, TypeId *tid)
Get a TypeId by name.
SupportLevel
The level of support or deprecation for attributes or trace sources.
std::string GetName() const
Get the name.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Ptr< Object > GetRootNamespaceObject(uint32_t i)
std::size_t GetRootNamespaceObjectN()
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
std::string functionStart
start of a method/function
std::string hrefStop
end of a link
std::string referenceNo
block automatic references
std::string anchor
Markup tokens.
std::string argument
function argument
std::string functionStop
end of a method/function
std::string headingStart
start of section heading (h3)
std::string headingStop
end of section heading (h3)
std::string copyDoc
copy (or refer) to docs elsewhere
std::string breakBoth
linebreak
std::string listLineStart
start unordered list item
std::map< std::string, ns3::TypeId::TraceSourceInformation > SortedTraceSourceInfo(const TypeId tid)
Alphabetize the TraceSourceInformation for a TypeId by the TraceSource name.
std::string templateArgument
template argument
std::string returns
the return value
std::string breakHtmlOnly
linebreak for html output only
std::string templArgExplicit
template argument required
std::string hrefStart
start of a link
std::string subSectionStart
start a new subsection
std::string hrefMid
middle part of a link
std::string commentStart
start of code comment
std::map< std::string, ns3::TypeId::AttributeInformation > SortedAttributeInfo(const TypeId tid)
Alphabetize the AttributeInformation for a TypeId by the Attribute name.
bool outputText
Are we generating text or Doxygen?
std::string page
start a separate page
std::string seeAlso
Reference to other docs.
std::string commentStop
end of code comment
std::string indentHtmlOnly
small indent
std::string codeWord
format next word as source code
std::string note
start a note section
std::string listLineStop
end unordered list item
std::string listStop
end unordered list
std::string classStop
end of a class
std::string breakTextOnly
linebreak for text output only
std::string brief
brief tag
std::string reference
reference tag
std::string flagSpanStop
end of Attribute flag value
std::string variable
variable or class member
std::string boldStart
start of bold span
std::string boldStop
end of bold span
std::string classStart
start of a class
std::string sectionStart
start of a section or group
std::string listStart
start unordered list
std::string flagSpanStart
start of Attribute flag value
std::string templArgDeduced
template argument deduced from function
Every class exported by the ns3 library is enclosed in the ns3 namespace.
U * PeekPointer(const Ptr< U > &p)
static unsigned int value(char c)
StaticInformation GetTypicalAggregations()
Register aggregation relationships that are not automatically detected by this introspection program.
void PrintTraceSourcesTid(std::ostream &os, const TypeId tid)
Print direct Trace sources for this TypeId.
std::set< TypeId > GroupList_t
List of TypeIds for a group.
std::map< std::string, int32_t > NameMap
Map from TypeId name to tid.
void PrintMakeAccessors(std::ostream &os, const std::string &name)
Print the AttributeValue MakeAccessor documentation for a class.
void PrintAllTraceSources(std::ostream &os)
Print the list of all Trace sources.
void PrintAllLogComponents(std::ostream &os)
Print the list of all LogComponents.
void PrintAttributeHelper(std::ostream &os, const AttributeDescriptor &attr)
Print documentation corresponding to use of the ATTRIBUTE_HELPER_HEADER macro or ATTRIBUTE_VALUE_DEFI...
void PrintTypeIdBlock(std::ostream &os, const TypeId tid)
Print the doxy block for a single TypeId.
void PrintTypeIdBlocks(std::ostream &os)
Print the doxy block for each TypeId.
std::map< std::string, GroupList_t > GroupsList_t
Collection of group names with associated TypeIds.
void PrintAllAttributes(std::ostream &os)
Print the list of all Attributes.
void PrintAttributeValueWithName(std::ostream &os, const std::string &name, const std::string &type, const std::string &header)
Print the AttributeValue documentation for a class.
GroupsList_t GetGroupsList()
Get a sorted list of TypeId groups.
void PrintSupportLevel(std::ostream &os, TypeId::SupportLevel supportLevel, std::string supportMsg)
Print the support level for an Attribute or TraceSource.
void PrintSize(std::ostream &os, const TypeId tid)
Print the size of the type represented by this tid.
void Uniquefy(T t)
Helper to keep only the unique items in a container.
void PrintAttributeImplementations(std::ostream &os)
Print documentation for Attribute implementations.
NameMap GetNameMap()
Create a map from the class names to their index in the vector of TypeId's so that the names will end...
void PrintTraceSources(std::ostream &os, const TypeId tid)
Print the Trace sources block for tid, including Trace sources declared in base classes.
void SetMarkup()
Initialize the markup strings, for either doxygen or text.
NameMap::const_iterator NameMapIterator
NameMap iterator.
void PrintConfigPaths(std::ostream &os, const TypeId tid)
Print config paths.
void PrintAllTypeIds(std::ostream &os)
Print the list of all TypeIds.
void PrintAttributes(std::ostream &os, const TypeId tid)
Print the Attributes block for tid, including Attributes declared in base classes.
void PrintAllGroups(std::ostream &os)
Print the list of all groups.
void PrintAllGlobals(std::ostream &os)
Print the list of all global variables.
void PrintMakeChecker(std::ostream &os, const std::string &name, const std::string &header)
Print the AttributeValue MakeChecker documentation for a class.
void PrintAttributeValueSection(std::ostream &os, const std::string &name, const bool seeBase=true)
Print the section definition for an AttributeValue.
void PrintAttributesTid(std::ostream &os, const TypeId tid)
Print direct Attributes for this TypeId.
Descriptor for an AttributeValue.
const std::string m_header
The header file name.
const std::string m_type
The name of the underlying type.
const std::string m_name
The base name of the resulting AttributeValue type.
const bool m_seeBase
Print a "see also" pointing to the base class.