--- /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