override Connect from ArrayTraceResolver
This commit is contained in:
@@ -52,8 +52,10 @@ public:
|
||||
*/
|
||||
ArrayTraceResolver (Callback<uint32_t> getSize,
|
||||
Callback<T, uint32_t> get);
|
||||
|
||||
virtual void Connect (std::string path, CallbackBase const &cb, const TraceContext &context);
|
||||
virtual void Disconnect (std::string path, CallbackBase const &cb);
|
||||
private:
|
||||
virtual TraceResolverList DoLookup (std::string id) const;
|
||||
Callback<uint32_t> m_getSize;
|
||||
Callback<T, uint32_t> m_get;
|
||||
};
|
||||
@@ -67,22 +69,41 @@ ArrayTraceResolver<T,INDEX>::ArrayTraceResolver (Callback<uint32_t> getSize,
|
||||
: m_getSize (getSize),
|
||||
m_get (get)
|
||||
{}
|
||||
|
||||
template <typename T, typename INDEX>
|
||||
TraceResolver::TraceResolverList
|
||||
ArrayTraceResolver<T,INDEX>::DoLookup (std::string id) const
|
||||
void
|
||||
ArrayTraceResolver<T,INDEX>::Connect (std::string path, CallbackBase const &cb, const TraceContext &context)
|
||||
{
|
||||
TraceResolverList list;
|
||||
std::string id = GetElement (path);
|
||||
std::string subpath = GetSubpath (path);
|
||||
if (id == "*")
|
||||
{
|
||||
for (uint32_t i = 0; i < m_getSize (); i++)
|
||||
{
|
||||
TraceContext context;
|
||||
TraceContext tmp = context;
|
||||
INDEX index = i;
|
||||
context.Add (index);
|
||||
list.push_back (std::make_pair (m_get (i)->CreateTraceResolver (), context));
|
||||
tmp.Add (index);
|
||||
TraceResolver *resolver = m_get (i)->CreateTraceResolver ();
|
||||
resolver->Connect (subpath, cb, tmp);
|
||||
delete resolver;
|
||||
}
|
||||
}
|
||||
}
|
||||
template <typename T, typename INDEX>
|
||||
void
|
||||
ArrayTraceResolver<T,INDEX>::Disconnect (std::string path, CallbackBase const &cb)
|
||||
{
|
||||
std::string id = GetElement (path);
|
||||
std::string subpath = GetSubpath (path);
|
||||
if (id == "*")
|
||||
{
|
||||
for (uint32_t i = 0; i < m_getSize (); i++)
|
||||
{
|
||||
TraceResolver *resolver = m_get (i)->CreateTraceResolver ();
|
||||
resolver->Disconnect (subpath, cb);
|
||||
delete resolver;
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -61,19 +61,8 @@ CompositeTraceResolver::DoRecursiveOperation (std::string path, CallbackBase con
|
||||
const TraceContext &context,
|
||||
enum Operation op)
|
||||
{
|
||||
std::string::size_type cur = 1;
|
||||
// check that first char is "/"
|
||||
std::string::size_type next = path.find ("/", cur);
|
||||
std::string id = std::string (path, cur, next-1);
|
||||
std::string subpath;
|
||||
if (next != std::string::npos)
|
||||
{
|
||||
subpath = std::string (path, next, std::string::npos);
|
||||
}
|
||||
else
|
||||
{
|
||||
subpath = "";
|
||||
}
|
||||
std::string id = GetElement (path);
|
||||
std::string subpath = GetSubpath (path);
|
||||
|
||||
if (id == "*")
|
||||
{
|
||||
@@ -150,7 +139,8 @@ CompositeTraceResolver::OperationOne (std::string subpath,
|
||||
resolver->Disconnect (subpath, cb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
delete resolver;
|
||||
}
|
||||
|
||||
void
|
||||
CompositeTraceResolver::Disconnect (std::string path, CallbackBase const &cb)
|
||||
|
||||
@@ -80,6 +80,34 @@ TraceResolver::Disconnect (std::string path, CallbackBase const &cb)
|
||||
resolverList.erase (resolverList.begin (), resolverList.end ());
|
||||
}
|
||||
|
||||
std::string
|
||||
TraceResolver::GetElement (std::string path)
|
||||
{
|
||||
std::string::size_type cur = 1;
|
||||
// check that first char is "/"
|
||||
std::string::size_type next = path.find ("/", cur);
|
||||
std::string id = std::string (path, cur, next-1);
|
||||
return id;
|
||||
}
|
||||
std::string
|
||||
TraceResolver::GetSubpath (std::string path)
|
||||
{
|
||||
std::string::size_type cur = 1;
|
||||
// check that first char is "/"
|
||||
std::string::size_type next = path.find ("/", cur);
|
||||
std::string subpath;
|
||||
if (next != std::string::npos)
|
||||
{
|
||||
subpath = std::string (path, next, std::string::npos);
|
||||
}
|
||||
else
|
||||
{
|
||||
subpath = "";
|
||||
}
|
||||
return subpath;
|
||||
}
|
||||
|
||||
|
||||
TraceResolver::TraceResolverList
|
||||
TraceResolver::DoLookup (std::string id) const
|
||||
{
|
||||
|
||||
@@ -71,6 +71,8 @@ public:
|
||||
virtual void Disconnect (std::string path, CallbackBase const &cb);
|
||||
protected:
|
||||
typedef std::list<std::pair<TraceResolver *, TraceContext> > TraceResolverList;
|
||||
std::string GetElement (std::string path);
|
||||
std::string GetSubpath (std::string path);
|
||||
private:
|
||||
/**
|
||||
* \param id the id to resolve. This is supposed to be
|
||||
|
||||
Reference in New Issue
Block a user