# HG changeset patch # User Mathieu Lacage # Date 1204144894 -3600 # Node ID 50d0da37f02f80090d3fbffeba02eb2559b252f9 # Parent 3eaeac1dd5ed0017fc6c77982916d504a0d2d52c introduce the ns3::String class, get rid of the string -> Attribute implicit conversion, and get rid of MakeDataRate, port PointToPointNetDevice to Attributes diff -r 3eaeac1dd5ed -r 50d0da37f02f examples/csma-multicast.cc --- a/examples/csma-multicast.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/examples/csma-multicast.cc Wed Feb 27 21:41:34 2008 +0100 @@ -289,7 +289,7 @@ "Protocol", TypeId::LookupByName ("Udp"), "OnTime", ConstantVariable(1), "OffTime", ConstantVariable(0), - "DataRate", MakeDataRate ("255b/s"), + "DataRate", DataRate ("255b/s"), "PacketSize", Uinteger (128)); n0->AddApplication (ooff); // diff -r 3eaeac1dd5ed -r 50d0da37f02f examples/csma-packet-socket.cc --- a/examples/csma-packet-socket.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/examples/csma-packet-socket.cc Wed Feb 27 21:41:34 2008 +0100 @@ -38,6 +38,7 @@ #include "ns3/ptr.h" #include "ns3/random-variable.h" #include "ns3/log.h" +#include "ns3/string.h" #include "ns3/simulator.h" #include "ns3/nstime.h" @@ -63,7 +64,7 @@ { Ptr device = CreateObjectWith ("Node", node, "Address", Mac48Address::Allocate (), - "EncapsulationMode", "Llc"); + "EncapsulationMode", String ("Llc")); node->AddDevice (device); device->Attach (channel); Ptr queue = Queue::CreateDefault (); diff -r 3eaeac1dd5ed -r 50d0da37f02f examples/mixed-global-routing.cc --- a/examples/mixed-global-routing.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/examples/mixed-global-routing.cc Wed Feb 27 21:41:34 2008 +0100 @@ -113,7 +113,7 @@ DefaultValue::Bind ("Queue", "DropTailQueue"); Config::SetDefault ("OnOffApplication::PacketSize", Uinteger (210)); - Config::SetDefault ("OnOffApplication::DataRate", MakeDataRate ("448kb/s")); + Config::SetDefault ("OnOffApplication::DataRate", DataRate ("448kb/s")); // Allow the user to override any of the defaults and the above // Bind ()s at run-time, via command-line arguments @@ -198,7 +198,7 @@ "Protocol", TypeId::LookupByName ("Udp"), "OnTime", ConstantVariable (1), "OffTime", ConstantVariable (0), - "DataRate", MakeDataRate("300bps"), + "DataRate", DataRate("300bps"), "PacketSize", Uinteger (50)); n0->AddApplication (ooff); // Start the application diff -r 3eaeac1dd5ed -r 50d0da37f02f examples/simple-alternate-routing.cc --- a/examples/simple-alternate-routing.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/examples/simple-alternate-routing.cc Wed Feb 27 21:41:34 2008 +0100 @@ -108,7 +108,7 @@ DefaultValue::Bind ("Queue", "DropTailQueue"); Config::SetDefault ("OnOffApplication::PacketSize", Uinteger (210)); - Config::SetDefault ("OnOffApplication::DataRate", MakeDataRate ("300b/s")); + Config::SetDefault ("OnOffApplication::DataRate", DataRate ("300b/s")); // The below metric, if set to 3 or higher, will cause packets between // n1 and n3 to take the 2-hop route through n2 diff -r 3eaeac1dd5ed -r 50d0da37f02f examples/simple-error-model.cc --- a/examples/simple-error-model.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/examples/simple-error-model.cc Wed Feb 27 21:41:34 2008 +0100 @@ -45,6 +45,7 @@ #include "ns3/ptr.h" #include "ns3/config.h" #include "ns3/uinteger.h" +#include "ns3/string.h" #include "ns3/simulator.h" #include "ns3/nstime.h" @@ -83,10 +84,10 @@ // Set a few parameters Config::SetDefault ("RateErrorModel::ErrorRate", Double (0.01)); - Config::SetDefault ("RateErrorModel::ErrorUnit", "EU_PKT"); + Config::SetDefault ("RateErrorModel::ErrorUnit", String ("EU_PKT")); Config::SetDefault ("OnOffApplication::PacketSize", Uinteger (210)); - Config::SetDefault ("OnOffApplication::DataRate", MakeDataRate ("448kb/s")); + Config::SetDefault ("OnOffApplication::DataRate", DataRate ("448kb/s")); // Allow the user to override any of the defaults and the above diff -r 3eaeac1dd5ed -r 50d0da37f02f examples/simple-global-routing.cc --- a/examples/simple-global-routing.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/examples/simple-global-routing.cc Wed Feb 27 21:41:34 2008 +0100 @@ -113,7 +113,7 @@ DefaultValue::Bind ("Queue", "DropTailQueue"); Config::SetDefault ("OnOffApplication::PacketSize", Uinteger (210)); - Config::SetDefault ("OnOffApplication::DataRate", MakeDataRate ("448kb/s")); + Config::SetDefault ("OnOffApplication::DataRate", DataRate ("448kb/s")); //DefaultValue::Bind ("DropTailQueue::m_maxPackets", 30); diff -r 3eaeac1dd5ed -r 50d0da37f02f examples/simple-point-to-point-olsr.cc --- a/examples/simple-point-to-point-olsr.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/examples/simple-point-to-point-olsr.cc Wed Feb 27 21:41:34 2008 +0100 @@ -44,6 +44,7 @@ #include "ns3/ptr.h" #include "ns3/random-variable.h" #include "ns3/config.h" +#include "ns3/string.h" #include "ns3/simulator.h" #include "ns3/nstime.h" @@ -101,8 +102,8 @@ // Set up some default values for the simulation. - Config::SetDefault ("OnOffApplication::PacketSize", "210"); - Config::SetDefault ("OnOffApplication::DataRate", "448kb/s"); + Config::SetDefault ("OnOffApplication::PacketSize", String ("210")); + Config::SetDefault ("OnOffApplication::DataRate", String ("448kb/s")); //DefaultValue::Bind ("DropTailQueue::m_maxPackets", 30); diff -r 3eaeac1dd5ed -r 50d0da37f02f examples/simple-point-to-point.cc --- a/examples/simple-point-to-point.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/examples/simple-point-to-point.cc Wed Feb 27 21:41:34 2008 +0100 @@ -44,6 +44,7 @@ #include "ns3/ptr.h" #include "ns3/random-variable.h" #include "ns3/config.h" +#include "ns3/string.h" #include "ns3/simulator.h" #include "ns3/nstime.h" @@ -78,8 +79,8 @@ // Set up some default values for the simulation. - Config::SetDefault ("OnOffApplication::PacketSize", "210"); - Config::SetDefault ("OnOffApplication::DataRate", "448kb/s"); + Config::SetDefault ("OnOffApplication::PacketSize", String ("210")); + Config::SetDefault ("OnOffApplication::DataRate", String ("448kb/s")); // Allow the user to override any of the defaults and the above // Bind()s at run-time, via command-line arguments diff -r 3eaeac1dd5ed -r 50d0da37f02f samples/main-grid-topology.cc --- a/samples/main-grid-topology.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/samples/main-grid-topology.cc Wed Feb 27 21:41:34 2008 +0100 @@ -7,6 +7,7 @@ #include "ns3/mobility-helper.h" #include "ns3/uinteger.h" #include "ns3/double.h" +#include "ns3/string.h" using namespace ns3; @@ -33,7 +34,7 @@ "DeltaX", Double (5.0), "DeltaY", Double (20.0), "GridWidth", Uinteger (20), - "LayoutType", "RowFirst"); + "LayoutType", String ("RowFirst")); // each object will be attached a static position. // i.e., once set by the "position allocator", the // position will never change. diff -r 3eaeac1dd5ed -r 50d0da37f02f samples/main-random-topology.cc --- a/samples/main-random-topology.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/samples/main-random-topology.cc Wed Feb 27 21:41:34 2008 +0100 @@ -11,6 +11,7 @@ #include "ns3/node.h" #include "ns3/mobility-helper.h" #include "ns3/node-list.h" +#include "ns3/string.h" using namespace ns3; @@ -37,9 +38,9 @@ MobilityHelper mobility; mobility.EnableNotifier (); mobility.SetPositionAllocator ("RandomDiscPositionAllocator", - "X", "100.0", - "Y", "100.0", - "Rho", "Uniform:0:30"); + "X", String ("100.0"), + "Y", String ("100.0"), + "Rho", String ("Uniform:0:30")); mobility.SetMobilityModel ("StaticMobilityModel"); mobility.Layout (objects.begin (), objects.end ()); diff -r 3eaeac1dd5ed -r 50d0da37f02f samples/main-random-walk.cc --- a/samples/main-random-walk.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/samples/main-random-walk.cc Wed Feb 27 21:41:34 2008 +0100 @@ -12,6 +12,7 @@ #include "ns3/node.h" #include "ns3/node-list.h" #include "ns3/mobility-helper.h" +#include "ns3/string.h" using namespace ns3; @@ -44,14 +45,14 @@ MobilityHelper mobility; mobility.EnableNotifier (); mobility.SetPositionAllocator ("RandomDiscPositionAllocator", - "X", "100.0", - "Y", "100.0", - "Rho", "Uniform:0:30"); + "X", String ("100.0"), + "Y", String ("100.0"), + "Rho", String ("Uniform:0:30")); mobility.SetMobilityModel ("RandomWalk2dMobilityModel", - "Mode", "Time", - "Time", "2s", - "Speed", "Constant:1.0", - "Bounds", "0:200:0:100"); + "Mode", String ("Time"), + "Time", String ("2s"), + "Speed", String ("Constant:1.0"), + "Bounds", String ("0:200:0:100")); mobility.Layout (NodeList::Begin (), NodeList::End ()); NodeList::Connect ("/nodes/*/$MobilityModelNotifier/course-change", MakeCallback (&CourseChange)); diff -r 3eaeac1dd5ed -r 50d0da37f02f src/applications/onoff/onoff-application.cc --- a/src/applications/onoff/onoff-application.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/src/applications/onoff/onoff-application.cc Wed Feb 27 21:41:34 2008 +0100 @@ -52,7 +52,7 @@ .SetParent () .AddConstructor () .AddAttribute ("DataRate", "The data rate in on state.", - MakeDataRate ("500kb/s"), + DataRate ("500kb/s"), MakeDataRateAccessor (&OnOffApplication::m_cbrRate), MakeDataRateChecker ()) .AddAttribute ("PacketSize", "The size of packets sent in on state", diff -r 3eaeac1dd5ed -r 50d0da37f02f src/common/data-rate.cc --- a/src/common/data-rate.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/src/common/data-rate.cc Wed Feb 27 21:41:34 2008 +0100 @@ -175,15 +175,13 @@ return m_bps; } -DataRate MakeDataRate (std::string rate) +DataRate::DataRate (std::string rate) { - uint64_t bps; - bool ok = DoParse (rate, &bps); + bool ok = DoParse (rate, &m_bps); if (!ok) { - NS_FATAL_ERROR ("Could not parse rate."); + NS_FATAL_ERROR ("Could not parse rate: "<> (std::istream &is, DataRate &rate); diff -r 3eaeac1dd5ed -r 50d0da37f02f src/core/attribute-helper.h --- a/src/core/attribute-helper.h Wed Feb 27 20:48:43 2008 +0100 +++ b/src/core/attribute-helper.h Wed Feb 27 21:41:34 2008 +0100 @@ -1,6 +1,8 @@ #ifndef VALUE_HELPER_H #define VALUE_HELPER_H +#include "attribute.h" +#include "object-base.h" #include "attribute-accessor-helper.h" #include #include "fatal-error.h" diff -r 3eaeac1dd5ed -r 50d0da37f02f src/core/attribute-test.cc --- a/src/core/attribute-test.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/src/core/attribute-test.cc Wed Feb 27 21:41:34 2008 +0100 @@ -5,6 +5,7 @@ #include "integer.h" #include "uinteger.h" #include "enum.h" +#include "string.h" #include "random-variable.h" #include "double.h" #include "object-vector.h" @@ -239,12 +240,12 @@ AttributeList params; Ptr p; - NS_TEST_ASSERT (params.Set ("AttributeObjectTest::TestBoolName", "false")); + NS_TEST_ASSERT (params.Set ("AttributeObjectTest::TestBoolName", String ("false"))); p = CreateObject (params); CHECK_GET_STR (p, "TestBoolName", "false"); CHECK_GET_PARAM (p, "TestBoolName", Boolean, false); - NS_TEST_ASSERT (p->SetAttribute("TestBoolName", "true")); + NS_TEST_ASSERT (p->SetAttribute("TestBoolName", String ("true"))); CHECK_GET_STR (p, "TestBoolName", "true"); CHECK_GET_PARAM (p, "TestBoolName", Boolean, true); @@ -252,7 +253,7 @@ CHECK_GET_STR (p, "TestBoolName", "false"); CHECK_GET_PARAM (p, "TestBoolName", Boolean, false); - p = CreateObjectWith ("TestBoolName", "true"); + p = CreateObjectWith ("TestBoolName", String ("true")); CHECK_GET_STR (p, "TestBoolName", "true"); CHECK_GET_PARAM (p, "TestBoolName", Boolean, true); @@ -260,11 +261,11 @@ CHECK_GET_STR (p, "TestBoolName", "true"); CHECK_GET_PARAM (p, "TestBoolName", Boolean, true); - NS_TEST_ASSERT (p->SetAttribute("TestBoolA", "false")); + NS_TEST_ASSERT (p->SetAttribute("TestBoolA", String ("false"))); CHECK_GET_STR (p, "TestBoolA", "false"); CHECK_GET_PARAM (p, "TestBoolA", Boolean, false); - NS_TEST_ASSERT (p->SetAttribute("TestBoolA", "true")); + NS_TEST_ASSERT (p->SetAttribute("TestBoolA", String ("true"))); CHECK_GET_STR (p, "TestBoolA", "true"); CHECK_GET_PARAM (p, "TestBoolA", Boolean, true); @@ -289,7 +290,7 @@ CHECK_GET_STR (p, "TestInt16", "-2"); CHECK_GET_PARAM (p, "TestInt16", Integer, -2); - NS_TEST_ASSERT (p->SetAttribute("TestInt16", "-5")); + NS_TEST_ASSERT (p->SetAttribute("TestInt16", String ("-5"))); CHECK_GET_STR (p, "TestInt16", "-5"); CHECK_GET_PARAM (p, "TestInt16", Integer, -5); @@ -341,13 +342,13 @@ NS_TEST_ASSERT (p->SetAttribute("TestUint8", Uinteger (255))); CHECK_GET_STR (p, "TestUint8", "255"); CHECK_GET_PARAM (p, "TestUint8", Uinteger, 255); - NS_TEST_ASSERT (p->SetAttribute("TestUint8", "255")); + NS_TEST_ASSERT (p->SetAttribute("TestUint8", String ("255"))); CHECK_GET_STR (p, "TestUint8", "255"); CHECK_GET_PARAM (p, "TestUint8", Uinteger, 255); - NS_TEST_ASSERT (!p->SetAttribute("TestUint8", "256")); + NS_TEST_ASSERT (!p->SetAttribute("TestUint8", String ("256"))); CHECK_GET_STR (p, "TestUint8", "255"); CHECK_GET_PARAM (p, "TestUint8", Uinteger, 255); - NS_TEST_ASSERT (!p->SetAttribute("TestUint8", "-1")); + NS_TEST_ASSERT (!p->SetAttribute("TestUint8", String ("-1"))); CHECK_GET_STR (p, "TestUint8", "255"); CHECK_GET_PARAM (p, "TestUint8", Uinteger, 255); NS_TEST_ASSERT (!p->SetAttribute("TestUint8", Uinteger ((uint64_t)-1))); @@ -363,10 +364,10 @@ NS_TEST_ASSERT (p->SetAttribute("TestEnum", Enum (AttributeObjectTest::TEST_C))); CHECK_GET_STR (p, "TestEnum", "TestC"); CHECK_GET_PARAM (p, "TestEnum", Enum, AttributeObjectTest::TEST_C); - NS_TEST_ASSERT (p->SetAttribute("TestEnum", "TestB")); + NS_TEST_ASSERT (p->SetAttribute("TestEnum", String ("TestB"))); CHECK_GET_STR (p, "TestEnum", "TestB"); CHECK_GET_PARAM (p, "TestEnum", Enum, AttributeObjectTest::TEST_B); - NS_TEST_ASSERT (!p->SetAttribute("TestEnum", "TestD")); + NS_TEST_ASSERT (!p->SetAttribute("TestEnum", String ("TestD"))); CHECK_GET_STR (p, "TestEnum", "TestB"); CHECK_GET_PARAM (p, "TestEnum", Enum, AttributeObjectTest::TEST_B); NS_TEST_ASSERT (!p->SetAttribute("TestEnum", Enum (5))); @@ -407,12 +408,12 @@ NS_TEST_ASSERT_EQUAL (vector.GetN (), 2); } - NS_TEST_ASSERT (AttributeList::GetGlobal ()->Set ("AttributeObjectTest::TestBoolName", "true")); + NS_TEST_ASSERT (AttributeList::GetGlobal ()->Set ("AttributeObjectTest::TestBoolName", String ("true"))); p = CreateObjectWith (); Boolean boolV = p->GetAttribute ("TestBoolName"); NS_TEST_ASSERT_EQUAL (boolV, Boolean (true)); - NS_TEST_ASSERT (AttributeList::GetGlobal ()->Set ("AttributeObjectTest::TestBoolName", "false")); + NS_TEST_ASSERT (AttributeList::GetGlobal ()->Set ("AttributeObjectTest::TestBoolName", String ("false"))); p = CreateObjectWith (); boolV = p->GetAttribute ("TestBoolName"); NS_TEST_ASSERT_EQUAL (boolV, Boolean (false)); diff -r 3eaeac1dd5ed -r 50d0da37f02f src/core/attribute.cc --- a/src/core/attribute.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/src/core/attribute.cc Wed Feb 27 21:41:34 2008 +0100 @@ -113,14 +113,6 @@ return m_value->DeserializeFromString (value, checker); } -Attribute::Attribute (const char *value) - : m_value (new StringValue (value)) -{} -Attribute::Attribute (std::string value) - : m_value (new StringValue (value)) -{} - - AttributeAccessor::AttributeAccessor () : m_count (1) {} @@ -161,53 +153,6 @@ AttributeChecker::~AttributeChecker () {} -StringValue::StringValue (const char *value) - : m_value (value) -{} -StringValue::StringValue (std::string value) - : m_value (value) -{} -void -StringValue::Set (std::string value) -{ - m_value = value; -} -std::string -StringValue::Get (void) const -{ - return m_value; -} -Attribute -StringValue::Copy (void) const -{ - return Attribute::Create (*this); -} -std::string -StringValue::SerializeToString (Ptr checker) const -{ - return m_value; -} -bool -StringValue::DeserializeFromString (std::string value, Ptr checker) -{ - m_value = value; - return true; -} -StringValue::StringValue (Attribute value) -{ - const StringValue *v = value.DynCast (); - if (v == 0) - { - NS_FATAL_ERROR ("Expected value of type String."); - } - m_value = v->Get (); -} -StringValue::operator Attribute () const -{ - return Attribute::Create (*this); -} - - std::string PtrValueBase::SerializeToString (Ptr checker) const { diff -r 3eaeac1dd5ed -r 50d0da37f02f src/core/attribute.h --- a/src/core/attribute.h Wed Feb 27 20:48:43 2008 +0100 +++ b/src/core/attribute.h Wed Feb 27 21:41:34 2008 +0100 @@ -53,8 +53,6 @@ template operator Ptr (); - Attribute (const char *value); - Attribute (std::string value); private: Attribute (AttributeValue *value); AttributeValue *m_value; @@ -120,29 +118,6 @@ namespace ns3 { /******************************************************** - * A class used to hold std::string values. - ********************************************************/ - -class StringValue : public AttributeValue -{ -public: - StringValue (const char *value); - StringValue (std::string value); - void Set (std::string value); - std::string Get (void) const; - - virtual Attribute Copy (void) const; - virtual std::string SerializeToString (Ptr checker) const; - virtual bool DeserializeFromString (std::string value, Ptr checker); - - StringValue (Attribute value); - operator Attribute () const; -private: - std::string m_value; -}; - - -/******************************************************** * The class used to access the pointer stored in a * PtrValue AttributeValue instance. ********************************************************/ diff -r 3eaeac1dd5ed -r 50d0da37f02f src/core/object-factory.cc --- a/src/core/object-factory.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/src/core/object-factory.cc Wed Feb 27 21:41:34 2008 +0100 @@ -27,12 +27,6 @@ m_parameters.SetWithTid (m_tid, name, value); } -void -ObjectFactory::Set (std::string name, std::string value) -{ - m_parameters.SetWithTid (m_tid, name, value); -} - TypeId ObjectFactory::GetTypeId (void) const { diff -r 3eaeac1dd5ed -r 50d0da37f02f src/core/object-factory.h --- a/src/core/object-factory.h Wed Feb 27 20:48:43 2008 +0100 +++ b/src/core/object-factory.h Wed Feb 27 21:41:34 2008 +0100 @@ -15,7 +15,6 @@ void SetTypeId (std::string tid); void SetTypeId (const char *tid); void Set (std::string name, Attribute value); - void Set (std::string name, std::string value); TypeId GetTypeId (void) const; diff -r 3eaeac1dd5ed -r 50d0da37f02f src/core/object.cc --- a/src/core/object.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/src/core/object.cc Wed Feb 27 21:41:34 2008 +0100 @@ -25,6 +25,7 @@ #include "attribute.h" #include "trace-source-accessor.h" #include "log.h" +#include "string.h" #include #include @@ -860,7 +861,7 @@ } // attempt to convert back to value. Attribute v = info->initialValue.Copy (); - ok = v.DeserializeFromString (str->Get (), info->checker); + ok = v.DeserializeFromString (str->Get ().Get (), info->checker); if (!ok) { return false; @@ -1087,7 +1088,7 @@ } // attempt to convert back from string. Attribute v = initialValue.Copy (); - ok = v.DeserializeFromString (str->Get (), checker); + ok = v.DeserializeFromString (str->Get ().Get (), checker); if (!ok) { return false; diff -r 3eaeac1dd5ed -r 50d0da37f02f src/core/string.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/core/string.cc Wed Feb 27 21:41:34 2008 +0100 @@ -0,0 +1,45 @@ +#include "string.h" + +namespace ns3 { + +String::String () + : m_value () +{} +String::String (const char *value) + : m_value (value) +{} +String::String (std::string value) + : m_value (value) +{} +void +String::Set (std::string value) +{ + m_value = value; +} +void +String::Set (const char *value) +{ + m_value = value; +} +std::string +String::Get (void) const +{ + return m_value; +} + +std::ostream & operator << (std::ostream &os, const String &value) +{ + os << value.Get (); + return os; +} +std::istream &operator >> (std::istream &is, String &value) +{ + std::string str; + is >> str; + value = String (str); + return is; +} + +VALUE_HELPER_CPP (String); + +} // namespace ns3 diff -r 3eaeac1dd5ed -r 50d0da37f02f src/core/string.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/core/string.h Wed Feb 27 21:41:34 2008 +0100 @@ -0,0 +1,32 @@ +#ifndef NS3_STRING_H +#define NS3_STRING_H + +#include +#include "attribute-helper.h" + +namespace ns3 { + +class String +{ +public: + String (); + String (const char *value); + String (std::string value); + void Set (std::string value); + void Set (const char *value); + std::string Get (void) const; + + VALUE_HELPER_HEADER_1 (String); +private: + std::string m_value; +}; + +std::ostream & operator << (std::ostream &os, const String &value); +std::istream &operator >> (std::istream &is, String &value); + +VALUE_HELPER_HEADER_2 (String); + +} // namespace ns3 + + +#endif /* NS3_STRING_H */ diff -r 3eaeac1dd5ed -r 50d0da37f02f src/core/wscript --- a/src/core/wscript Wed Feb 27 20:48:43 2008 +0100 +++ b/src/core/wscript Wed Feb 27 21:41:34 2008 +0100 @@ -60,6 +60,7 @@ 'uinteger.cc', 'enum.cc', 'double.cc', + 'string.cc', 'object-factory.cc', 'object-vector.cc', 'global-value.cc', @@ -117,6 +118,7 @@ 'uinteger.h', 'double.h', 'enum.h', + 'string.h', 'object-factory.h', 'attribute-helper.h', 'global-value.h', diff -r 3eaeac1dd5ed -r 50d0da37f02f src/devices/csma/csma-ipv4-topology.cc --- a/src/devices/csma/csma-ipv4-topology.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/src/devices/csma/csma-ipv4-topology.cc Wed Feb 27 21:41:34 2008 +0100 @@ -26,6 +26,7 @@ #include "ns3/ipv4-address.h" #include "ns3/ipv4.h" #include "ns3/queue.h" +#include "ns3/string.h" #include "csma-channel.h" #include "csma-net-device.h" @@ -44,7 +45,7 @@ // assume full-duplex Ptr nd = CreateObjectWith ("Node", node, "Address", addr, - "EncapsulationMode", "IpArp"); + "EncapsulationMode", String ("IpArp")); node->AddDevice (nd); nd->AddQueue(q); @@ -62,7 +63,7 @@ Ptr nd0 = CreateObjectWith ("Node", n1, "Address", addr, - "EncapsulationMode", "Llc"); + "EncapsulationMode", String ("Llc")); n1->AddDevice (nd0); nd0->SetSendEnable (true); nd0->SetReceiveEnable (false); @@ -71,7 +72,7 @@ Ptr nd1 = CreateObjectWith ("Node", n1, "Address", addr, - "EncapsulationMode", "Llc"); + "EncapsulationMode", String ("Llc")); n1->AddDevice (nd1); nd1->SetSendEnable (false); nd1->SetReceiveEnable (true); @@ -88,7 +89,7 @@ Ptr nd0 = CreateObjectWith ("Node", n1, "Address", addr, - "EncapsulationMode", "Raw"); + "EncapsulationMode", String ("Raw")); n1->AddDevice (nd0); nd0->SetSendEnable (true); nd0->SetReceiveEnable (false); @@ -97,7 +98,7 @@ Ptr nd1 = CreateObjectWith ("Node", n1, "Address", addr, - "EncapsulationMode", "Raw"); + "EncapsulationMode", String ("Raw")); n1->AddDevice (nd1); nd1->SetSendEnable (false); nd1->SetReceiveEnable (true); diff -r 3eaeac1dd5ed -r 50d0da37f02f src/devices/point-to-point/point-to-point-net-device.cc --- a/src/devices/point-to-point/point-to-point-net-device.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/src/devices/point-to-point/point-to-point-net-device.cc Wed Feb 27 21:41:34 2008 +0100 @@ -23,10 +23,10 @@ #include "ns3/log.h" #include "ns3/queue.h" #include "ns3/simulator.h" -#include "ns3/composite-trace-resolver.h" #include "ns3/mac48-address.h" #include "ns3/llc-snap-header.h" #include "ns3/error-model.h" +#include "ns3/trace-source-accessor.h" #include "point-to-point-net-device.h" #include "point-to-point-channel.h" @@ -34,77 +34,59 @@ namespace ns3 { -DataRateDefaultValue PointToPointNetDevice::g_defaultRate( - "PointToPointLinkDataRate", - "The default data rate for point to point links", - MakeDataRate ("10Mb/s")); +NS_OBJECT_ENSURE_REGISTERED (PointToPointNetDevice); -PointToPointTraceType::PointToPointTraceType (enum Type type) - : m_type (type) -{ - NS_LOG_FUNCTION; -} -PointToPointTraceType::PointToPointTraceType () - : m_type (RX) +TypeId +PointToPointNetDevice::GetTypeId (void) { - NS_LOG_FUNCTION; -} + static TypeId tid = TypeId ("PointToPointNetDevice") + .SetParent () + .AddConstructor () + .AddAttribute ("Node", "The node with which this device is associated", + TypeId::ATTR_GET | TypeId::ATTR_CONSTRUCT, + Ptr (0), + MakePtrAccessor (&PointToPointNetDevice::m_node), + MakePtrChecker ()) + .AddAttribute ("Address", "The address of this device.", + Mac48Address ("ff:ff:ff:ff:ff:ff"), + MakeMac48AddressAccessor (&PointToPointNetDevice::m_address), + MakeMac48AddressChecker ()) + .AddAttribute ("DataRate", "The default data rate for point to point links", + DataRate ("10Mb/s"), + MakeDataRateAccessor (&PointToPointNetDevice::m_bps), + MakeDataRateChecker ()) + .AddAttribute ("RxErrorModel", "XXX", + Ptr (0), + MakePtrAccessor (&PointToPointNetDevice::m_receiveErrorModel), + MakePtrChecker ()) + .AddAttribute ("TxQueue", "XXX", + Ptr (0), + MakePtrAccessor (&PointToPointNetDevice::m_queue), + MakePtrChecker ()) + .AddAttribute ("InterframeGap", "XXX", + Seconds (0.0), + MakeTimeAccessor (&PointToPointNetDevice::m_tInterframeGap), + MakeTimeChecker ()) + .AddTraceSource ("Rx", "Receive MAC packet.", + MakeTraceSourceAccessor (&PointToPointNetDevice::m_rxTrace)) + .AddTraceSource ("Drop", "Drop MAC packet.", + MakeTraceSourceAccessor (&PointToPointNetDevice::m_dropTrace)) -void -PointToPointTraceType::Print (std::ostream &os) const -{ - switch (m_type) { - case RX: - os << "dev-rx"; - break; - case DROP: - os << "dev-drop"; - break; - } + ; + return tid; } -uint16_t -PointToPointTraceType::GetUid (void) -{ - NS_LOG_FUNCTION; - static uint16_t uid = AllocateUid ("PointToPointTraceType"); - return uid; -} -std::string -PointToPointTraceType::GetTypeName (void) const -{ - NS_LOG_FUNCTION; - return "ns3::PointToPointTraceType"; -} - -enum PointToPointTraceType::Type -PointToPointTraceType::Get (void) const -{ - NS_LOG_FUNCTION; - return m_type; -} - -PointToPointNetDevice::PointToPointNetDevice (Ptr node, - Mac48Address address, - const DataRate& rate) +PointToPointNetDevice::PointToPointNetDevice () : m_txMachineState (READY), - m_bps (rate), - m_tInterframeGap (Seconds(0)), m_channel (0), - m_queue (0), - m_rxTrace (), - m_dropTrace (), - m_receiveErrorModel (0), - m_node (node), - m_address (address), m_name (""), m_linkUp (false), m_mtu (0xffff) { NS_LOG_FUNCTION; - NS_LOG_PARAMS (this << node); + NS_LOG_PARAMS (this); } PointToPointNetDevice::~PointToPointNetDevice () @@ -199,26 +181,6 @@ TransmitStart(p); } -Ptr -PointToPointNetDevice::GetTraceResolver (void) const -{ - NS_LOG_FUNCTION; - Ptr resolver = Create (); - resolver->AddComposite ("queue", m_queue); - resolver->AddSource ("rx", - TraceDoc ("receive MAC packet", - "Ptr", "packet received"), - m_rxTrace, - PointToPointTraceType (PointToPointTraceType::RX)); - resolver->AddSource ("drop", - TraceDoc ("drop MAC packet", - "Ptr", "packet dropped"), - m_dropTrace, - PointToPointTraceType (PointToPointTraceType::DROP)); - resolver->SetParentResolver (NetDevice::GetTraceResolver ()); - return resolver; -} - bool PointToPointNetDevice::Attach (Ptr ch) { diff -r 3eaeac1dd5ed -r 50d0da37f02f src/devices/point-to-point/point-to-point-net-device.h --- a/src/devices/point-to-point/point-to-point-net-device.h Wed Feb 27 20:48:43 2008 +0100 +++ b/src/devices/point-to-point/point-to-point-net-device.h Wed Feb 27 21:41:34 2008 +0100 @@ -27,10 +27,9 @@ #include "ns3/net-device.h" #include "ns3/callback.h" #include "ns3/packet.h" -#include "ns3/callback-trace-source.h" +#include "ns3/traced-callback.h" #include "ns3/nstime.h" #include "ns3/data-rate.h" -#include "ns3/default-value.h" #include "ns3/ptr.h" #include "ns3/mac48-address.h" @@ -41,29 +40,6 @@ class ErrorModel; /** - * \brief hold in a TraceContext the type of trace source from a PointToPointNetDevice - */ -class PointToPointTraceType : public TraceContextElement -{ -public: - enum Type { - RX, - DROP - }; - PointToPointTraceType (enum Type type); - PointToPointTraceType (); - void Print (std::ostream &os) const; - static uint16_t GetUid (void); - std::string GetTypeName (void) const; - /** - * \returns the type of the trace source which generated an event. - */ - enum Type Get (void) const; -private: - enum Type m_type; -}; - -/** * \class PointToPointNetDevice * \brief A Device for a Point to Point Network Link. * @@ -78,6 +54,8 @@ class PointToPointNetDevice : public NetDevice { public: + static TypeId GetTypeId (void); + /** * Construct a PointToPointNetDevice * @@ -86,12 +64,8 @@ * as well as an optional DataRate object. * * @see PointToPointTopology::AddPointToPointLink () - * @param node the Node to which this device is connected. - * @param rate (optional) DataRate object */ - PointToPointNetDevice (Ptr node, - Mac48Address address, - const DataRate& rate = g_defaultRate.GetValue()); + PointToPointNetDevice (); /** * Destroy a PointToPointNetDevice * @@ -194,12 +168,6 @@ virtual void SetReceiveCallback (NetDevice::ReceiveCallback cb); private: - /** - * Create a Trace Resolver for events in the net device. - * - * @see class TraceResolver - */ - virtual Ptr GetTraceResolver (void) const; virtual void DoDispose (void); /** @@ -213,18 +181,6 @@ */ Ptr GetQueue(void) const; - - /** - * Set a new default data rate - */ - static void SetDefaultRate(const DataRate&); - - /** - * Get the current default rate. - * @returns a const reference to current default - */ - static const DataRate& GetDefaultRate(); - private: /** * Adds the necessary headers and trailers to a packet of data in order to @@ -310,7 +266,7 @@ * @see class CallBackTraceSource * @see class TraceResolver */ - CallbackTraceSource > m_rxTrace; + TracedCallback > m_rxTrace; /** * The trace source for the packet drop events that the device can * fire. @@ -318,11 +274,7 @@ * @see class CallBackTraceSource * @see class TraceResolver */ - CallbackTraceSource > m_dropTrace; - /** - * Default data rate. Used for all newly created p2p net devices - */ - static DataRateDefaultValue g_defaultRate; + TracedCallback > m_dropTrace; /** * Error model for receive packet events @@ -339,7 +291,7 @@ uint16_t m_mtu; }; -}; // namespace ns3 +} // namespace ns3 #endif // POINT_TO_POINT_NET_DEVICE_H diff -r 3eaeac1dd5ed -r 50d0da37f02f src/devices/point-to-point/point-to-point-topology.cc --- a/src/devices/point-to-point/point-to-point-topology.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/src/devices/point-to-point/point-to-point-topology.cc Wed Feb 27 21:41:34 2008 +0100 @@ -47,14 +47,16 @@ { Ptr channel = CreateObject (bps, delay); - Ptr net1 = CreateObject (n1, Mac48Address::Allocate ()); + Ptr net1 = CreateObjectWith ("Node", n1, + "Address", Mac48Address::Allocate ()); n1->AddDevice (net1); Ptr q = Queue::CreateDefault (); net1->AddQueue(q); net1->Attach (channel); - Ptr net2 = CreateObject (n2, Mac48Address::Allocate ()); + Ptr net2 = CreateObjectWith ("Node", n2, + "Address", Mac48Address::Allocate ()); n2->AddDevice (net2); q = Queue::CreateDefault (); diff -r 3eaeac1dd5ed -r 50d0da37f02f src/node/ipv4-address.cc --- a/src/node/ipv4-address.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/src/node/ipv4-address.cc Wed Feb 27 21:41:34 2008 +0100 @@ -305,14 +305,14 @@ { std::string str; is >> str; - address = Ipv4Address (str); + address = Ipv4Address (str.c_str ()); return is; } std::istream & operator >> (std::istream &is, Ipv4Mask &mask) { std::string str; is >> str; - mask = Ipv4Mask (str); + mask = Ipv4Mask (str.c_str ()); return is; } diff -r 3eaeac1dd5ed -r 50d0da37f02f tutorial/point-to-point-ipv4-topology.cc --- a/tutorial/point-to-point-ipv4-topology.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/tutorial/point-to-point-ipv4-topology.cc Wed Feb 27 21:41:34 2008 +0100 @@ -43,7 +43,9 @@ { NS_ASSERT (channel->GetNDevices () <= 1); - Ptr nd = CreateObject (node, Mac48Address::Allocate ()); + Ptr nd = + CreateObjectWith ("Node", node, + "Address", Mac48Address::Allocate ()); node->AddDevice (nd); Ptr q = Queue::CreateDefault (); nd->AddQueue(q); diff -r 3eaeac1dd5ed -r 50d0da37f02f utils/print-introspected-doxygen.cc --- a/utils/print-introspected-doxygen.cc Wed Feb 27 20:48:43 2008 +0100 +++ b/utils/print-introspected-doxygen.cc Wed Feb 27 21:41:34 2008 +0100 @@ -7,6 +7,7 @@ #include "ns3/queue.h" #include "ns3/mobility-model-notifier.h" #include "ns3/default-value.h" +#include "ns3/string.h" using namespace ns3; @@ -119,12 +120,13 @@ Ptr node = CreateObject (); node->AggregateObject (CreateObject ()); - Ptr p2p = CreateObject (node, Mac48Address::Allocate ()); + Ptr p2p = CreateObjectWith ("Node", node, + "Address", Mac48Address::Allocate ()); node->AddDevice (p2p); p2p->AddQueue (Queue::CreateDefault ()); Ptr csma = CreateObjectWith ("Node", node, "Address", Mac48Address::Allocate (), - "EncapsulationMode", "Llc"); + "EncapsulationMode", String ("Llc")); node->AddDevice (csma); csma->AddQueue (Queue::CreateDefault ());