src/config-store/model/raw-text-config.cc
changeset 6941 9d2c79c992d7
parent 6320 06d80fe1d3b0
child 7168 7c724be8f9a6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/config-store/model/raw-text-config.cc	Thu Mar 24 09:23:44 2011 -0700
@@ -0,0 +1,166 @@
+#include "raw-text-config.h"
+#include "attribute-iterator.h"
+#include "attribute-default-iterator.h"
+#include "ns3/global-value.h"
+#include "ns3/string.h"
+#include "ns3/log.h"
+#include "ns3/config.h"
+
+NS_LOG_COMPONENT_DEFINE ("RawTextConfig");
+
+namespace ns3 {
+
+RawTextConfigSave::RawTextConfigSave ()
+  : m_os (0)
+{}
+RawTextConfigSave::~RawTextConfigSave ()
+{
+  if (m_os != 0)
+    {
+      m_os->close ();
+    }
+  delete m_os;
+  m_os = 0;
+}
+void 
+RawTextConfigSave::SetFilename (std::string filename)
+{
+  m_os = new std::ofstream ();
+  m_os->open (filename.c_str (), std::ios::out);
+}
+void 
+RawTextConfigSave::Default (void)
+{
+  class RawTextDefaultIterator : public AttributeDefaultIterator
+  {
+  public:
+    RawTextDefaultIterator (std::ostream *os) {
+      m_os = os;
+    }
+  private:
+    virtual void StartVisitTypeId (std::string name) {
+      m_typeId = name;
+    }
+    virtual void DoVisitAttribute (std::string name, std::string defaultValue) {
+      *m_os << "default " << m_typeId << "::" << name << " \"" << defaultValue << "\"" << std::endl;
+    }
+    std::string m_typeId;
+    std::ostream *m_os;
+  };
+
+  RawTextDefaultIterator iterator = RawTextDefaultIterator (m_os);
+  iterator.Iterate ();
+}
+void 
+RawTextConfigSave::Global (void)
+{
+  for (GlobalValue::Iterator i = GlobalValue::Begin (); i != GlobalValue::End (); ++i)
+    {
+      StringValue value;
+      (*i)->GetValue (value);
+      *m_os << "global " << (*i)->GetName () << " \"" << value.Get () << "\"" << std::endl;
+    }
+}
+void 
+RawTextConfigSave::Attributes (void)
+{
+  class RawTextAttributeIterator : public AttributeIterator
+  {
+  public:
+    RawTextAttributeIterator (std::ostream *os)
+      : m_os (os) {}
+  private:
+    virtual void DoVisitAttribute (Ptr<Object> object, std::string name) {
+      StringValue str;
+      object->GetAttribute (name, str);
+      *m_os << "value " << GetCurrentPath () << " \"" << str.Get () << "\"" << std::endl;
+    }
+    std::ostream *m_os;
+  };
+
+  RawTextAttributeIterator iter = RawTextAttributeIterator (m_os);
+  iter.Iterate ();
+}
+
+RawTextConfigLoad::RawTextConfigLoad ()
+  : m_is (0)
+{}
+RawTextConfigLoad::~RawTextConfigLoad ()
+{
+  if (m_is != 0)
+    {
+      m_is->close ();
+      delete m_is;
+      m_is = 0;
+    }
+}
+void 
+RawTextConfigLoad::SetFilename (std::string filename)
+{
+  m_is = new std::ifstream ();
+  m_is->open (filename.c_str (), std::ios::in);
+}
+std::string
+RawTextConfigLoad::Strip (std::string value)
+{
+  std::string::size_type start = value.find ("\"");
+  std::string::size_type end = value.find ("\"", 1);
+  NS_ASSERT (start == 0);
+  NS_ASSERT (end == value.size () - 1);
+  return value.substr (start+1, end-start-1);
+}
+
+void 
+RawTextConfigLoad::Default (void)
+{
+  m_is->seekg (0);
+  std::string type, name, value;
+  *m_is >> type >> name >> value;
+  while (m_is->good())
+    {
+      NS_LOG_DEBUG ("type=" << type << ", name=" << name << ", value=" << value);
+      value = Strip (value);
+      if (type == "default")
+	{
+	  Config::SetDefault (name, StringValue (value));
+	}
+      *m_is >> type >> name >> value;
+    }
+}
+void 
+RawTextConfigLoad::Global (void)
+{
+  m_is->seekg (0);
+  std::string type, name, value;
+  *m_is >> type >> name >> value;
+  while (m_is->good())
+    {
+      NS_LOG_DEBUG ("type=" << type << ", name=" << name << ", value=" << value);
+      value = Strip (value);
+      if (type == "global")
+	{
+	  Config::SetGlobal (name, StringValue (value));
+	}
+      *m_is >> type >> name >> value;
+    }
+}
+void 
+RawTextConfigLoad::Attributes (void)
+{
+  m_is->seekg (0);
+  std::string type, path, value;
+  *m_is >> type >> path >> value;
+  while (m_is->good())
+    {
+      NS_LOG_DEBUG ("type=" << type << ", path=" << path << ", value=" << value);
+      value = Strip (value);
+      if (type == "value")
+	{
+	  Config::Set (path, StringValue (value));
+	}
+      *m_is >> type >> path >> value;
+    }
+}
+
+
+} // namespace ns3