# HG changeset patch # User Mathieu Lacage # Date 1235467628 -3600 # Node ID 621e2ef9e7b885129b06c347a191cf5945710625 # Parent 4be8f8fc7756a88a461898eb763075baecbfce6a add support for NS_ATTRIBUTE_DEFAULT diff -r 4be8f8fc7756 -r 621e2ef9e7b8 src/core/object-base.cc --- a/src/core/object-base.cc Tue Feb 24 10:26:57 2009 +0100 +++ b/src/core/object-base.cc Tue Feb 24 10:27:08 2009 +0100 @@ -22,6 +22,10 @@ #include "trace-source-accessor.h" #include "attribute-list.h" #include "string.h" +#include "ns3/core-config.h" +#ifdef HAVE_STDLIB_H +#include +#endif NS_LOG_COMPONENT_DEFINE ("ObjectBase"); @@ -76,25 +80,10 @@ if (j->checker == checker) { // We have a matching attribute value. - DoSet (accessor, checker, *j->value); - NS_LOG_DEBUG ("construct \""<< tid.GetName ()<<"::"<< - tid.GetAttributeName (i)<<"\""); - found = true; - break; - } - } - if (!found) - { - // is this attribute stored in the global instance instance ? - for (AttributeList::Attrs::const_iterator j = AttributeList::GetGlobal ()->m_attributes.begin (); - j != AttributeList::GetGlobal ()->m_attributes.end (); j++) - { - if (j->checker == checker) + if (DoSet (accessor, checker, *j->value)) { - // We have a matching attribute value. - DoSet (accessor, checker, *j->value); NS_LOG_DEBUG ("construct \""<< tid.GetName ()<<"::"<< - tid.GetAttributeName (i)<<"\" from global"); + tid.GetAttributeName (i)<<"\""); found = true; break; } @@ -102,7 +91,61 @@ } if (!found) { - // No matching attribute value so we set the default value. + // is this attribute stored in the global instance ? + for (AttributeList::Attrs::const_iterator j = AttributeList::GetGlobal ()->m_attributes.begin (); + j != AttributeList::GetGlobal ()->m_attributes.end (); j++) + { + if (j->checker == checker) + { + // We have a matching attribute value. + if (DoSet (accessor, checker, *j->value)) + { + NS_LOG_DEBUG ("construct \""<< tid.GetName ()<<"::"<< + tid.GetAttributeName (i)<<"\" from global"); + found = true; + break; + } + } + } + } + if (!found) + { + // No matching attribute value so we try to look at the env var. +#ifdef HAVE_GETENV + char *envVar = getenv ("NS_ATTRIBUTE_DEFAULT"); + if (envVar != 0) + { + std::string env = std::string (envVar); + std::string::size_type cur = 0; + std::string::size_type next = 0; + while (next != std::string::npos) + { + next = env.find (";", cur); + std::string tmp = std::string (env, cur, next-cur); + std::string::size_type equal = tmp.find ("="); + if (equal != std::string::npos) + { + std::string name = tmp.substr (0, equal); + std::string value = tmp.substr (equal+1, tmp.size () - equal - 1); + if (name == tid.GetAttributeFullName (i)) + { + if (DoSet (accessor, checker, StringValue (value))) + { + NS_LOG_DEBUG ("construct \""<< tid.GetName ()<<"::"<< + tid.GetAttributeName (i)<<"\" from env var"); + found = true; + break; + } + } + } + cur = next + 1; + } + } +#endif /* HAVE_GETENV */ + } + if (!found) + { + // No matching attribute value so we try to set the default value. DoSet (accessor, checker, *initial); NS_LOG_DEBUG ("construct \""<< tid.GetName ()<<"::"<< tid.GetAttributeName (i)<<"\" from initial value.");