24 #include "ns3/fatal-error.h"
26 #include "ns3/global-value.h"
27 #include "ns3/string.h"
28 #include "ns3/config.h"
29 #include <libxml/encoding.h>
30 #include <libxml/xmlwriter.h>
52 m_writer = xmlNewTextWriterFilename (filename.c_str (), 0);
57 rc = xmlTextWriterSetIndent (
m_writer, 1);
65 rc = xmlTextWriterStartDocument (
m_writer, NULL,
"utf-8", NULL);
73 rc = xmlTextWriterStartElement (
m_writer, BAD_CAST
"ns3");
91 rc = xmlTextWriterEndDocument (
m_writer);
106 XmlDefaultIterator (xmlTextWriterPtr writer) {
116 virtual void StartVisitTypeId (std::string name) {
119 virtual void DoVisitAttribute (std::string name, std::string defaultValue) {
125 if (tmp.
name == name)
131 if (supportLevel == TypeId::SupportLevel::OBSOLETE)
134 << m_typeid <<
"::" << name
135 <<
" was not saved because it is OBSOLETE");
138 else if ((supportLevel == TypeId::SupportLevel::DEPRECATED) && (
m_saveDeprecated ==
false))
140 NS_LOG_WARN (
"Global attribute " << m_typeid <<
"::" << name
141 <<
" was not saved because it is DEPRECATED");
146 rc = xmlTextWriterStartElement (
m_writer, BAD_CAST
"default");
151 std::string fullname = m_typeid +
"::" + name;
152 rc = xmlTextWriterWriteAttribute (
m_writer, BAD_CAST
"name",
153 BAD_CAST fullname.c_str ());
158 rc = xmlTextWriterWriteAttribute (
m_writer, BAD_CAST
"value",
159 BAD_CAST defaultValue.c_str ());
164 rc = xmlTextWriterEndElement (
m_writer);
171 std::string m_typeid;
174 XmlDefaultIterator iterator = XmlDefaultIterator (
m_writer);
185 XmlTextAttributeIterator (xmlTextWriterPtr writer)
194 virtual void DoVisitAttribute (
Ptr<Object> object, std::string name) {
195 TypeId tid =
object->GetInstanceTypeId ();
200 if (tmp.
name == name)
206 if (supportLevel == TypeId::SupportLevel::OBSOLETE)
209 <<
" was not saved because it is OBSOLETE");
212 else if ((supportLevel == TypeId::SupportLevel::DEPRECATED) && (
m_saveDeprecated ==
false))
215 <<
" was not saved because it is DEPRECATED");
219 object->GetAttribute (name, str);
221 rc = xmlTextWriterStartElement (
m_writer, BAD_CAST
"value");
226 rc = xmlTextWriterWriteAttribute (
m_writer, BAD_CAST
"path",
227 BAD_CAST GetCurrentPath ().c_str ());
232 rc = xmlTextWriterWriteAttribute (
m_writer, BAD_CAST
"value",
233 BAD_CAST str.
Get ().c_str ());
238 rc = xmlTextWriterEndElement (
m_writer);
248 XmlTextAttributeIterator iter = XmlTextAttributeIterator (
m_writer);
260 (*i)->GetValue (value);
262 rc = xmlTextWriterStartElement (
m_writer, BAD_CAST
"global");
267 rc = xmlTextWriterWriteAttribute (
m_writer, BAD_CAST
"name",
268 BAD_CAST (*i)->GetName ().c_str ());
273 rc = xmlTextWriterWriteAttribute (
m_writer, BAD_CAST
"value",
274 BAD_CAST value.
Get ().c_str ());
279 rc = xmlTextWriterEndElement (
m_writer);
305 xmlTextReaderPtr reader = xmlNewTextReaderFilename (
m_filename.c_str ());
311 rc = xmlTextReaderRead (reader);
314 const xmlChar *type = xmlTextReaderConstName (reader);
319 if (std::string ((
char*)type) ==
"default")
321 xmlChar *name = xmlTextReaderGetAttribute (reader, BAD_CAST
"name");
326 xmlChar *value = xmlTextReaderGetAttribute (reader, BAD_CAST
"value");
331 NS_LOG_DEBUG (
"default="<<(
char*)name<<
", value=" <<value);
336 rc = xmlTextReaderRead (reader);
338 xmlFreeTextReader (reader);
343 xmlTextReaderPtr reader = xmlNewTextReaderFilename (
m_filename.c_str ());
349 rc = xmlTextReaderRead (reader);
352 const xmlChar *type = xmlTextReaderConstName (reader);
357 if (std::string ((
char*)type) ==
"global")
359 xmlChar *name = xmlTextReaderGetAttribute (reader, BAD_CAST
"name");
364 xmlChar *value = xmlTextReaderGetAttribute (reader, BAD_CAST
"value");
369 NS_LOG_DEBUG (
"global="<<(
char*)name<<
", value=" <<value);
374 rc = xmlTextReaderRead (reader);
376 xmlFreeTextReader (reader);
381 xmlTextReaderPtr reader = xmlNewTextReaderFilename (
m_filename.c_str ());
387 rc = xmlTextReaderRead (reader);
390 const xmlChar *type = xmlTextReaderConstName (reader);
395 if (std::string ((
char*)type) ==
"value")
397 xmlChar *path = xmlTextReaderGetAttribute (reader, BAD_CAST
"path");
402 xmlChar *value = xmlTextReaderGetAttribute (reader, BAD_CAST
"value");
407 NS_LOG_DEBUG (
"path="<<(
char*)path <<
", value=" << (
char*)value);
412 rc = xmlTextReaderRead (reader);
414 xmlFreeTextReader (reader);