diff --git a/src/core/trace-context.cc b/src/core/trace-context.cc index 23842d00a..4c77d741f 100644 --- a/src/core/trace-context.cc +++ b/src/core/trace-context.cc @@ -24,71 +24,51 @@ 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]; +} +bool +TraceContext::Iterator::IsLast (void) const +{ + if (m_buffer == 0 || m_uid == 0 || m_current >= m_size) + { + return true; + } + return false; } -TraceContext::Iterator::Iterator (uint8_t *buffer, uint16_t index) - : m_buffer (buffer), - m_current (index) -{} 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; -} -bool -TraceContext::Iterator::operator != (const Iterator &o) -{ - return ! (*this == o); -} -bool -TraceContext::Iterator::operator == (const Iterator &o) -{ - if (m_buffer == 0 && o.m_buffer == 0) + if (m_uid == 0) { - return true; + return; } - if (m_buffer != 0 && o.m_buffer == 0 || - m_buffer == 0 && o.m_buffer != 0) + else { - return false; + uint8_t size = ElementRegistry::GetSize (m_uid); + m_current += 1 + size; } - return m_current == o.m_current; + m_uid = m_buffer[m_current]; +} +std::string +TraceContext::Iterator::Get (void) const +{ + std::string name = ElementRegistry::GetName (m_uid); + return name; } - TraceContext::TraceContext () : m_data (0) @@ -297,29 +277,13 @@ TraceContext::Print (std::ostream &os) const } 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 diff --git a/src/core/trace-context.h b/src/core/trace-context.h index 5ab3cd3c6..908f3ecb9 100644 --- a/src/core/trace-context.h +++ b/src/core/trace-context.h @@ -100,23 +100,19 @@ public: 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 diff --git a/utils/print-trace-sources.cc b/utils/print-trace-sources.cc index a4e3d01c9..af7cfb755 100644 --- a/utils/print-trace-sources.cc +++ b/utils/print-trace-sources.cc @@ -55,7 +55,7 @@ PrintDoxygenText (const TraceResolver::SourceCollection *sources, std::ostream & 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 @@ PrintDoxygenText (const TraceResolver::SourceCollection *sources, std::ostream & { 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" ;