Support PointerValue::DeserializeFromString()

This commit is contained in:
Mathieu Lacage
2012-04-18 09:35:58 -07:00
parent f32be2eb6f
commit 8ed4a31c7f
2 changed files with 17 additions and 4 deletions

View File

@@ -41,13 +41,13 @@ GlobalValue::GlobalValue (std::string name, std::string help,
{
if (m_checker == 0)
{
NS_FATAL_ERROR ("Checker should not be zero.");
NS_FATAL_ERROR ("Checker should not be zero on " << name );
}
m_initialValue = m_checker->CreateValidValue (initialValue);
m_currentValue = m_initialValue;
if (m_initialValue == 0)
{
NS_FATAL_ERROR ("Value set by user is invalid.");
NS_FATAL_ERROR ("Value set by user on " << name << " is invalid.");
}
GetVector ()->push_back (this);
InitializeFromEnv ();

View File

@@ -18,6 +18,8 @@
* Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
*/
#include "pointer.h"
#include "object-factory.h"
#include <sstream>
namespace ns3 {
@@ -59,8 +61,19 @@ PointerValue::SerializeToString (Ptr<const AttributeChecker> checker) const
bool
PointerValue::DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker)
{
NS_FATAL_ERROR ("It is not possible to deserialize a pointer.");
return false;
// We assume that the string you want to deserialize contains
// a description for an ObjectFactory to create an object and then assign it to the
// member variable.
ObjectFactory factory;
std::istringstream iss;
iss.str(value);
iss >> factory;
if (iss.fail())
{
return false;
}
m_value = factory.Create<Object> ();
return true;
}
} // namespace ns3