mathieu@1368: #include "ns3/internet-node.h" mathieu@1368: #include "ns3/ptr.h" mathieu@1368: #include "ns3/trace-resolver.h" mathieu@1368: #include "ns3/node-list.h" mathieu@1368: #include "ns3/point-to-point-net-device.h" mathieu@1376: #include "ns3/csma-net-device.h" mathieu@1368: #include "ns3/queue.h" mathieu@2533: #include "ns3/drop-tail-queue.h" mathieu@1375: #include "ns3/mobility-model-notifier.h" mathieu@1853: #include "ns3/default-value.h" mathieu@2502: #include "ns3/string.h" mathieu@1368: mathieu@1368: using namespace ns3; mathieu@1368: mathieu@1399: void mathieu@1399: PrintSimpleText (const TraceResolver::SourceCollection *sources, std::ostream &os) mathieu@1399: { mathieu@1399: for (TraceResolver::SourceCollection::Iterator i = sources->Begin (); i != sources->End (); i++) mathieu@1399: { mathieu@1399: os << "source=" << i->path << std::endl; mathieu@1399: os << "TraceContext=["; mathieu@1399: i->context.PrintAvailable (os, ","); mathieu@1399: os << "]" << std::endl; mathieu@1399: os << "help=\"" << i->doc.GetHelp () << "\"" << std::endl; mathieu@1399: os << "void TraceSinkCallback (const TraceContext &"; mathieu@1399: for (TraceDoc::Iterator k = i->doc.ArgsBegin (); k != i->doc.ArgsEnd (); k++) mathieu@1399: { mathieu@1399: os << ", " << k->first; mathieu@1399: } mathieu@1399: os << ")" << std::endl; mathieu@1399: os << "argument 1 -- the trace context associated to the connected trace source." << std::endl; mathieu@1399: uint32_t k = 2; mathieu@1399: for (TraceDoc::Iterator j = i->doc.ArgsBegin (); j != i->doc.ArgsEnd (); j++) mathieu@1399: { mathieu@1399: os << "argument " << k << " -- " << j->second << "." << std::endl; mathieu@1399: k++; mathieu@1399: } mathieu@1399: os << std::endl; mathieu@1399: } mathieu@1399: } mathieu@1853: static void mathieu@1399: PrintDoxygenText (const TraceResolver::SourceCollection *sources, std::ostream &os) mathieu@1399: { mathieu@1399: uint32_t z = 0; mathieu@1399: for (TraceResolver::SourceCollection::Iterator i = sources->Begin (); i != sources->End (); i++) mathieu@1399: { mathieu@1399: os << "///" << std::endl; mathieu@1399: os << "/// \\ingroup TraceSourceList" << std::endl; mathieu@1399: os << "/// \\brief " << i->doc.GetHelp () << std::endl; mathieu@1399: os << "/// \\param arg1 the trace context associated to the connected trace source." << std::endl; mathieu@1399: uint32_t j = 2; mathieu@1399: for (TraceDoc::Iterator l = i->doc.ArgsBegin (); l != i->doc.ArgsEnd (); l++) mathieu@1399: { mathieu@1399: os << "/// \\param arg" << j << " " << l->second << "." << std::endl; mathieu@1399: j++; mathieu@1399: } mathieu@1399: os << "///" << std::endl; mathieu@1399: os << "///" << std::endl; gjc@1538: os << "/// The path to this trace source is: \"" << i->path << "\"." << std::endl; mathieu@1399: os << "///" << std::endl; mathieu@1400: if (i->context.Begin ().IsLast ()) mathieu@1399: { mathieu@1399: os << "/// No data can be extracted from \\p arg1 with ns3::TraceContext::GetElement." << std::endl; mathieu@1399: } mathieu@1399: else mathieu@1399: { mathieu@1399: os << "/// The following classes can be extracted from \\p arg1 with " << std::endl; mathieu@1399: os << "/// ns3::TraceContext::GetElement:" << std::endl; mathieu@1400: for (TraceContext::Iterator m = i->context.Begin (); !m.IsLast (); m.Next ()) mathieu@1399: { mathieu@1400: os << "/// - " << m.Get () << std::endl; mathieu@1399: } mathieu@1399: } mathieu@1399: os << "void TraceSinkCallback" << z << " (const TraceContext & arg1" ; mathieu@1399: j = 2; mathieu@1399: for (TraceDoc::Iterator k = i->doc.ArgsBegin (); k != i->doc.ArgsEnd (); k++) mathieu@1399: { mathieu@1399: os << ", " << k->first << " arg" << j; mathieu@1399: j++; mathieu@1399: } mathieu@1399: os << ");" << std::endl; mathieu@1399: os << std::endl; mathieu@1399: z++; mathieu@1399: } mathieu@1399: } mathieu@1399: mathieu@1853: static void mathieu@1853: PrintOneDefaultValue (DefaultValueBase *value, std::ostream &os) mathieu@1853: { mathieu@1853: os << "///
  • \\anchor DefaultValue" << value->GetName () mathieu@1853: << " " << value->GetName () << std::endl; mathieu@1853: os << "/// " << std::endl; mathieu@1853: os << "///
  • " << std::endl; mathieu@1853: } mathieu@1853: mathieu@1853: static void mathieu@1853: PrintDefaultValuesDoxygen (std::ostream &os) mathieu@1853: { mathieu@1853: os << "/// \\page ListOfDefaultValues The list of default values" << std::endl; mathieu@1853: os << "/// \\defgroup ListOfDefaultValuesGroup The list of default values" << std::endl; mathieu@1853: os << "/// " << std::endl; mathieu@1853: } mathieu@1853: mathieu@1399: mathieu@1368: int main (int argc, char *argv[]) mathieu@1368: { mathieu@2230: Ptr node = CreateObject (); mathieu@2258: node->AggregateObject (CreateObject ()); mathieu@1368: mathieu@2502: Ptr p2p = CreateObjectWith ("Node", node, mathieu@2502: "Address", Mac48Address::Allocate ()); mathieu@2470: node->AddDevice (p2p); mathieu@2533: p2p->AddQueue (CreateObject ()); mathieu@2500: Ptr csma = CreateObjectWith ("Node", node, mathieu@2500: "Address", Mac48Address::Allocate (), mathieu@2502: "EncapsulationMode", String ("Llc")); mathieu@2470: node->AddDevice (csma); mathieu@2533: csma->AddQueue (CreateObject ()); mathieu@1368: mathieu@1371: TraceResolver::SourceCollection collection; mathieu@2540: //NodeList::GetTraceResolver ()->CollectSources ("", TraceContext (), &collection); mathieu@1399: PrintDoxygenText (&collection, std::cout); mathieu@1368: mathieu@1853: mathieu@1853: PrintDefaultValuesDoxygen (std::cout); mathieu@1853: mathieu@1368: return 0; mathieu@1368: }