rewrite the TraceContext::SourceCollection::Iterator class

Mathieu Lacage 2007-08-30 14:25:09 +02:00
parent d23b3123ba
commit 62df1e933b
3 changed files with 43 additions and 83 deletions

View File

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

View File

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

View File

@ -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" ;