rewrite the TraceContext::SourceCollection::Iterator class
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 30 Aug 2007 14:25:09 +0200
changeset 1400 382b2a36384c
parent 1399 5945e92014e2
child 1401 96a21130865c
rewrite the TraceContext::SourceCollection::Iterator class
src/core/trace-context.cc
src/core/trace-context.h
utils/print-trace-sources.cc
--- a/src/core/trace-context.cc	Thu Aug 30 13:58:15 2007 +0200
+++ b/src/core/trace-context.cc	Thu Aug 30 14:25:09 2007 +0200
@@ -24,72 +24,52 @@
 
 namespace ns3 {
 
-TraceContext::Iterator &
-TraceContext::Iterator::operator ++ (void)
-{
-  ReadOne ();
-  return *this;
-}
-TraceContext::Iterator 
-TraceContext::Iterator::operator ++ (int)
-{
-  Iterator old (*this);
-  ReadOne ();
-  return old;
-}
-const std::string &
-TraceContext::Iterator::operator * (void) const
-{
-  return m_name;
-}
-const std::string *
-TraceContext::Iterator::operator -> (void) const
-{
-  return &m_name;
-}
-TraceContext::Iterator::Iterator (uint8_t *buffer)
+TraceContext::Iterator::Iterator ()
+  : m_buffer (0),
+    m_size (0),
+    m_current (0)
+{}
+TraceContext::Iterator::Iterator (uint8_t *buffer, uint16_t size)
   : m_buffer (buffer),
+    m_size (size),
     m_current (0)
 {
-  ReadOne ();
+  m_uid = m_buffer[m_current];
 }
-TraceContext::Iterator::Iterator (uint8_t *buffer, uint16_t index)
-  : m_buffer (buffer),
-    m_current (index)
-{}
+bool
+TraceContext::Iterator::IsLast (void) const
+{
+  if (m_buffer == 0 || m_uid == 0 || m_current >= m_size)
+    {
+      return true;
+    }
+  return false;
+}
 void
-TraceContext::Iterator::ReadOne (void)
+TraceContext::Iterator::Next (void)
 {
   if (m_buffer == 0)
     {
       return;
     }
-  uint8_t uid = m_buffer[m_current];
-  uint8_t size = ElementRegistry::GetSize (uid);
-  m_name = ElementRegistry::GetName (uid);
-  m_current += 1 + size;
+  if (m_uid == 0)
+    {
+      return;
+    }
+  else
+    {
+      uint8_t size = ElementRegistry::GetSize (m_uid); 
+      m_current += 1 + size;
+    }
+  m_uid = m_buffer[m_current];
 }
-bool 
-TraceContext::Iterator::operator != (const Iterator &o)
-{
-  return ! (*this == o);
-}
-bool 
-TraceContext::Iterator::operator == (const Iterator &o)
+std::string
+TraceContext::Iterator::Get (void) const
 {
-  if (m_buffer == 0 && o.m_buffer == 0)
-    {
-      return true;
-    }
-  if (m_buffer != 0 && o.m_buffer == 0 ||
-      m_buffer == 0 && o.m_buffer != 0)
-    {
-      return false;
-    }
-  return m_current == o.m_current;
+  std::string name = ElementRegistry::GetName (m_uid);
+  return name;
 }
 
-
 TraceContext::TraceContext ()
   : m_data (0)
 {}
@@ -297,29 +277,13 @@
   } while (true);
 }
 TraceContext::Iterator 
-TraceContext::AvailableBegin (void) const
+TraceContext::Begin (void) const
 {
   if (m_data == 0)
     {
-      return Iterator (0);
+      return Iterator ();
     }
-  return Iterator (m_data->data);
-}
-TraceContext::Iterator 
-TraceContext::AvailableEnd (void) const
-{
-  if (m_data == 0)
-    {
-      return Iterator (0);
-    }
-  uint8_t currentUid;
-  uint16_t i = 0;
-  do {
-    currentUid = m_data->data[i];
-    uint8_t size = ElementRegistry::GetSize (currentUid);
-    i += 1 + size;
-  } while (i < m_data->size && currentUid != 0);
-  return Iterator (m_data->data, i);
+  return Iterator (m_data->data, m_data->size);
 }
 
 void 
--- a/src/core/trace-context.h	Thu Aug 30 13:58:15 2007 +0200
+++ b/src/core/trace-context.h	Thu Aug 30 14:25:09 2007 +0200
@@ -100,23 +100,19 @@
   class Iterator 
   {
   public:
-    Iterator &operator ++ (void);
-    Iterator operator ++ (int);
-    const std::string &operator * (void) const;
-    const std::string *operator -> (void) const;
-    bool operator == (const Iterator &o);
-    bool operator != (const Iterator &o);
+    void Next (void);
+    bool IsLast (void) const;
+    std::string Get (void) const;
   private:
     friend class TraceContext;
-    Iterator (uint8_t *buffer);
+    Iterator ();
     Iterator (uint8_t *buffer, uint16_t index);
-    void ReadOne (void);
     uint8_t *m_buffer;
+    uint16_t m_size;
     uint16_t m_current;
-    std::string m_name;
+    uint8_t m_uid;
   };
-  Iterator AvailableBegin (void) const;
-  Iterator AvailableEnd (void) const;
+  Iterator Begin (void) const;
   /**
    * \param o another trace context
    * \returns true if the input trace context contains exactly the same set of
--- a/utils/print-trace-sources.cc	Thu Aug 30 13:58:15 2007 +0200
+++ b/utils/print-trace-sources.cc	Thu Aug 30 14:25:09 2007 +0200
@@ -55,7 +55,7 @@
       os << "///" << std::endl;
       os << "/// The path to this trace source is: " << i->path << "." << std::endl;
       os << "///" << std::endl;
-      if (i->context.AvailableBegin () == i->context.AvailableEnd ())
+      if (i->context.Begin ().IsLast ())
         {
           os << "/// No data can be extracted from \\p arg1 with ns3::TraceContext::GetElement." << std::endl;
         }
@@ -63,9 +63,9 @@
         {
           os << "/// The following classes can be extracted from \\p arg1 with " << std::endl;
           os << "/// ns3::TraceContext::GetElement:" << std::endl;
-          for (TraceContext::Iterator m = i->context.AvailableBegin (); m != i->context.AvailableEnd (); m++)
+          for (TraceContext::Iterator m = i->context.Begin (); !m.IsLast (); m.Next ())
             {
-              os << "///  - " << (*m) << std::endl;
+              os << "///  - " << m.Get () << std::endl;
             }
         }
       os << "void TraceSinkCallback" << z << " (const TraceContext & arg1" ;