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);
}
};
////////////////////////////////////////////////////////////////////////////////

View file

@ -1810,4 +1810,3 @@ namespace std
#endif // end file guardian
/// specialization of std::less for StroeTracker@Private@Loki@@@std@@@std@@QBEXABV123@@Z??_C@_1BBK@FOBGIJMK@?$AAs?$AAt?$AAd?$AA?3?$AA?3?$AAl?$AAi?$AAs?$AAt?$AA?$DM?$AAc?$AAl?$AAa?$AAs?$AAs?$AA?5?$AAL?$AAo?$AAk?$AAi?$AA?3?$AA?3?$AAP?$AAr?$AAi?$AAv?$AAa?$AAt?$AAe?$AA?3?$AA?3?$AAL@??_C@_1DI@MDELDGPI@?$AAl?$AAi?$AAs?$AAt?$AA?5?$AAi?$AAt?$AAe?$AAr?$AAa?$AAt?$AAo?$AAr?$AAs?$AA?5?$AAi?$AAn?$AAc?$AAo?$AAm?$AAp?$AAa?$AAt?$AAi?$AAb?$AAl?$AAe?$AA?$AA@??$_Debug_lt_pred@P6A_NPBVLifetimeTracker@Private@Loki@@0@ZPAV123@PAV123@@std@@YA_NP6A_NPBVLifetimeTracker@Private@Loki@@0@ZAAPAV123@2PB_WI@Z