2012-11-16 08:16:15 +01:00
|
|
|
#ifndef CPLUSPLUS_ALREADYCONSIDEREDCLASSCONTAINER_H
|
|
|
|
|
#define CPLUSPLUS_ALREADYCONSIDEREDCLASSCONTAINER_H
|
|
|
|
|
|
2014-03-24 16:06:39 +01:00
|
|
|
#include <cplusplus/SafeMatcher.h>
|
|
|
|
|
|
2012-11-16 08:16:15 +01:00
|
|
|
#include <QSet>
|
|
|
|
|
|
|
|
|
|
namespace CPlusPlus {
|
|
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
|
class AlreadyConsideredClassContainer
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
AlreadyConsideredClassContainer() : _class(0) {}
|
|
|
|
|
void insert(const T *item)
|
|
|
|
|
{
|
|
|
|
|
if (_container.isEmpty())
|
|
|
|
|
_class = item;
|
|
|
|
|
_container.insert(item);
|
|
|
|
|
}
|
|
|
|
|
bool contains(const T *item)
|
|
|
|
|
{
|
|
|
|
|
if (_container.contains(item))
|
|
|
|
|
return true;
|
|
|
|
|
|
2014-03-24 16:06:39 +01:00
|
|
|
SafeMatcher matcher;
|
2012-11-16 08:16:15 +01:00
|
|
|
foreach (const T *existingItem, _container) {
|
2014-03-24 16:06:39 +01:00
|
|
|
if (Matcher::match(existingItem, item, &matcher))
|
2012-11-16 08:16:15 +01:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void clear(const T *item)
|
|
|
|
|
{
|
|
|
|
|
if (_class != item || _container.size() == 1)
|
|
|
|
|
_container.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
QSet<const T *> _container;
|
|
|
|
|
const T * _class;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace CPlusPlus
|
|
|
|
|
|
|
|
|
|
#endif // CPLUSPLUS_ALREADYCONSIDEREDCLASSCONTAINER_H
|