use foreach in register code, add foreach tests

git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@1060 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
syntheticpp 2009-11-21 10:44:08 +00:00
parent 665abd0b92
commit 059018191f
5 changed files with 128 additions and 35 deletions

View file

@ -17,6 +17,8 @@
#include "TypeManip.h"
#include "HierarchyGenerators.h"
#include "ForEachType.h"
/// \defgroup RegisterGroup Register
@ -33,41 +35,39 @@ namespace Loki
/// \ingroup RegisterGroup
/// Must be specialized be the user
////////////////////////////////////////////////////////////////////////////////
template<class t> bool RegisterFunction();
template<class T>
bool RegisterFunction();
////////////////////////////////////////////////////////////////////////////////
/// \ingroup RegisterGroup
/// Must be specialized be the user
////////////////////////////////////////////////////////////////////////////////
template<class t> bool UnRegisterFunction();
template<class T>
bool UnRegisterFunction();
namespace Private
{
template<class T>
struct RegisterOnCreate
{
RegisterOnCreate() { RegisterFunction<T>(); }
template< int Index, typename T >
void operator()()
{
RegisterFunction<T>();
}
};
template<class T>
struct UnRegisterOnDelete
{
~UnRegisterOnDelete() { UnRegisterFunction<T>(); }
};
template<class T>
struct RegisterOnCreateElement
{
RegisterOnCreate<T> registerObj;
template< int Index, typename T >
void operator()()
{
UnRegisterFunction<T>();
}
};
template<class T>
struct UnRegisterOnDeleteElement
{
UnRegisterOnDelete<T> unregisterObj;
};
}
////////////////////////////////////////////////////////////////////////////////
/// \class RegisterOnCreateSet
///
@ -79,9 +79,14 @@ namespace Loki
////////////////////////////////////////////////////////////////////////////////
template<typename ElementList>
struct RegisterOnCreateSet
: GenScatterHierarchy<ElementList, Private::RegisterOnCreateElement>
{};
struct RegisterOnCreateSet
{
RegisterOnCreateSet()
{
Private::RegisterOnCreate d;
ForEachType< ElementList, Private::RegisterOnCreate > dummy(d);
}
};
////////////////////////////////////////////////////////////////////////////////
/// \class UnRegisterOnDeleteSet
@ -93,9 +98,14 @@ namespace Loki
/// see test/Register
////////////////////////////////////////////////////////////////////////////////
template<typename ElementList>
struct UnRegisterOnDeleteSet
: GenScatterHierarchy<ElementList, Private::UnRegisterOnDeleteElement>
{};
struct UnRegisterOnDeleteSet
{
~UnRegisterOnDeleteSet()
{
Private::UnRegisterOnDelete d;
ForEachType< ElementList, Private::UnRegisterOnDelete > dummy(d);
}
};
////////////////////////////////////////////////////////////////////////////////