00001 #ifndef ATTRIBUTE_ITERATOR_H
00002 #define ATTRIBUTE_ITERATOR_H
00003
00004 #include "ns3/ptr.h"
00005 #include "ns3/object.h"
00006 #include <vector>
00007
00008 namespace ns3 {
00009
00010 class ObjectVectorValue;
00011
00012
00013 class AttributeIterator
00014 {
00015 public:
00016 AttributeIterator ();
00017 virtual ~AttributeIterator ();
00018
00019 void Iterate (void);
00020 protected:
00021 std::string GetCurrentPath (void) const;
00022 private:
00023 virtual void DoVisitAttribute (Ptr<Object> object, std::string name) = 0;
00024 virtual void DoStartVisitObject (Ptr<Object> object);
00025 virtual void DoEndVisitObject (void);
00026 virtual void DoStartVisitPointerAttribute (Ptr<Object> object, std::string name, Ptr<Object> value);
00027 virtual void DoEndVisitPointerAttribute (void);
00028 virtual void DoStartVisitArrayAttribute (Ptr<Object> object, std::string name, const ObjectVectorValue &vector);
00029 virtual void DoEndVisitArrayAttribute (void);
00030 virtual void DoStartVisitArrayItem (const ObjectVectorValue &vector, uint32_t index, Ptr<Object> item);
00031 virtual void DoEndVisitArrayItem (void);
00032
00033 void DoIterate (Ptr<Object> object);
00034 bool IsExamined (Ptr<const Object> object);
00035 std::string GetCurrentPath (std::string attr) const;
00036
00037 void VisitAttribute (Ptr<Object> object, std::string name);
00038 void StartVisitObject (Ptr<Object> object);
00039 void EndVisitObject (void);
00040 void StartVisitPointerAttribute (Ptr<Object> object, std::string name, Ptr<Object> value);
00041 void EndVisitPointerAttribute (void);
00042 void StartVisitArrayAttribute (Ptr<Object> object, std::string name, const ObjectVectorValue &vector);
00043 void EndVisitArrayAttribute (void);
00044 void StartVisitArrayItem (const ObjectVectorValue &vector, uint32_t index, Ptr<Object> item);
00045 void EndVisitArrayItem (void);
00046
00047
00048 std::vector<Ptr<Object> > m_examined;
00049 std::vector<std::string> m_currentPath;
00050 };
00051
00052 class TextFileAttributeIterator : public AttributeIterator
00053 {
00054 public:
00055 TextFileAttributeIterator (std::ostream &os);
00056 void Save (void);
00057 private:
00058 virtual void DoVisitAttribute (Ptr<Object> object, std::string name);
00059 std::ostream &m_os;
00060 };
00061
00062
00063 }
00064
00065 #endif