diff --git a/include/loki/Functor.h b/include/loki/Functor.h index be321e7..d93ec4e 100644 --- a/include/loki/Functor.h +++ b/include/loki/Functor.h @@ -38,7 +38,7 @@ namespace Loki namespace Private { - template class ThreadingModel> + template class ThreadingModel> struct FunctorImplBase : public SmallObject { typedef R ResultType; @@ -92,7 +92,7 @@ namespace Loki //////////////////////////////////////////////////////////////////////////////// template class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL> + template class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL> class FunctorImpl; //////////////////////////////////////////////////////////////////////////////// @@ -100,7 +100,7 @@ namespace Loki // Specialization for 0 (zero) parameters //////////////////////////////////////////////////////////////////////////////// - template class ThreadingModel> + template class ThreadingModel> class FunctorImpl : public Private::FunctorImplBase { @@ -114,7 +114,7 @@ namespace Loki // Specialization for 1 parameter //////////////////////////////////////////////////////////////////////////////// - template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> : public Private::FunctorImplBase { @@ -130,7 +130,7 @@ namespace Loki //////////////////////////////////////////////////////////////////////////////// template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> : public Private::FunctorImplBase { @@ -147,7 +147,7 @@ namespace Loki //////////////////////////////////////////////////////////////////////////////// template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> : public Private::FunctorImplBase { @@ -165,7 +165,7 @@ namespace Loki //////////////////////////////////////////////////////////////////////////////// template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> : public Private::FunctorImplBase { @@ -185,7 +185,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> : public Private::FunctorImplBase { @@ -206,7 +206,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> : public Private::FunctorImplBase { @@ -228,7 +228,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> : public Private::FunctorImplBase { @@ -252,7 +252,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> : public Private::FunctorImplBase @@ -278,7 +278,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> : public Private::FunctorImplBase @@ -306,7 +306,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> : public Private::FunctorImplBase @@ -335,7 +335,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> @@ -366,7 +366,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> @@ -398,7 +398,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, ThreadingModel> @@ -431,7 +431,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl, @@ -466,7 +466,7 @@ namespace Loki template class ThreadingModel> + typename P15, template class ThreadingModel> class FunctorImpl, @@ -502,7 +502,7 @@ namespace Loki // Specialization for 1 parameter //////////////////////////////////////////////////////////////////////////////// - template class ThreadingModel> + template class ThreadingModel> class FunctorImpl : public Private::FunctorImplBase { @@ -518,7 +518,7 @@ namespace Loki //////////////////////////////////////////////////////////////////////////////// template class ThreadingModel> + template class ThreadingModel> class FunctorImpl : public Private::FunctorImplBase { @@ -535,7 +535,7 @@ namespace Loki //////////////////////////////////////////////////////////////////////////////// template class ThreadingModel> + template class ThreadingModel> class FunctorImpl : public Private::FunctorImplBase { @@ -553,7 +553,7 @@ namespace Loki //////////////////////////////////////////////////////////////////////////////// template class ThreadingModel> + template class ThreadingModel> class FunctorImpl : public Private::FunctorImplBase { @@ -573,7 +573,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl : public Private::FunctorImplBase { @@ -594,7 +594,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl : public Private::FunctorImplBase { @@ -616,7 +616,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl : public Private::FunctorImplBase { @@ -640,7 +640,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl : public Private::FunctorImplBase @@ -666,7 +666,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl : public Private::FunctorImplBase @@ -694,7 +694,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl : public Private::FunctorImplBase @@ -723,7 +723,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl @@ -754,7 +754,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl @@ -786,7 +786,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl @@ -819,7 +819,7 @@ namespace Loki template class ThreadingModel> + template class ThreadingModel> class FunctorImpl class ThreadingModel> + typename P15, template class ThreadingModel> class FunctorImpl class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL> + template class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL> class Functor { public: @@ -1334,7 +1334,7 @@ namespace Loki { template struct BinderFirstTraits; - template class ThreadingModel> + template class ThreadingModel> struct BinderFirstTraits< Functor > { typedef Functor OriginalFunctor; @@ -1361,7 +1361,7 @@ namespace Loki typedef typename TypeTraits::ParameterType RefOrValue; }; - template class ThreadingModel> + template class ThreadingModel> struct BinderFirstBoundTypeStorage< Functor > { typedef Functor OriginalFunctor; @@ -1662,6 +1662,9 @@ namespace Loki #endif // FUNCTOR_INC_ // $Log$ +// Revision 1.15 2006/01/22 13:31:45 syntheticpp +// add additional template parameter for the changed threading classes +// // Revision 1.14 2006/01/16 19:05:09 rich_sposato // Added cvs keywords. // diff --git a/include/loki/SmallObj.h b/include/loki/SmallObj.h index 0c4bb9e..6abe1fc 100644 --- a/include/loki/SmallObj.h +++ b/include/loki/SmallObj.h @@ -212,11 +212,12 @@ namespace Loki */ template < - template class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL, + template class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL, std::size_t chunkSize = LOKI_DEFAULT_CHUNK_SIZE, std::size_t maxSmallObjectSize = LOKI_MAX_SMALL_OBJECT_SIZE, std::size_t objectAlignSize = LOKI_DEFAULT_OBJECT_ALIGNMENT, - template class LifetimePolicy = LOKI_DEFAULT_SMALLOBJ_LIFETIME + template class LifetimePolicy = LOKI_DEFAULT_SMALLOBJ_LIFETIME, + class MutexPolicy = Mutex > class AllocatorSingleton : public SmallObjAllocator { @@ -227,7 +228,7 @@ namespace Loki maxSmallObjectSize, objectAlignSize, LifetimePolicy > MyAllocator; /// Defines type for thread-safety locking mechanism. - typedef ThreadingModel< MyAllocator > MyThreadingModel; + typedef ThreadingModel< MyAllocator, MutexPolicy > MyThreadingModel; /// Defines singleton made from allocator. typedef Loki::SingletonHolder< MyAllocator, Loki::CreateStatic, @@ -276,13 +277,14 @@ namespace Loki template < - template class TM, + template class TM, std::size_t CS, std::size_t MSOS, std::size_t OAS, - template class LP + template class LP, + class MX > - void AllocatorSingleton< TM, CS, MSOS, OAS, LP >::ClearExtraMemory( void ) + void AllocatorSingleton< TM, CS, MSOS, OAS, LP, MX >::ClearExtraMemory( void ) { typename MyThreadingModel::Lock lock; (void)lock; // get rid of warning @@ -291,13 +293,14 @@ namespace Loki template < - template class TM, + template class TM, std::size_t CS, std::size_t MSOS, std::size_t OAS, - template class LP + template class LP, + class MX > - bool AllocatorSingleton< TM, CS, MSOS, OAS, LP >::IsCorrupted( void ) + bool AllocatorSingleton< TM, CS, MSOS, OAS, LP, MX >::IsCorrupted( void ) { typename MyThreadingModel::Lock lock; (void)lock; // get rid of warning @@ -318,14 +321,15 @@ namespace Loki */ template < - template class TM, + template class TM, std::size_t CS, std::size_t MSOS, std::size_t OAS, - template class LP + template class LP, + class MX > inline unsigned int GetLongevity( - AllocatorSingleton< TM, CS, MSOS, OAS, LP > * ) + AllocatorSingleton< TM, CS, MSOS, OAS, LP, MX > * ) { // Returns highest possible value. return 0xFFFFFFFF; @@ -411,11 +415,12 @@ namespace Loki */ template < - template class ThreadingModel, + template class ThreadingModel, std::size_t chunkSize, std::size_t maxSmallObjectSize, std::size_t objectAlignSize, - template class LifetimePolicy + template class LifetimePolicy, + class MutexPolicy > class SmallObjectBase { @@ -431,7 +436,7 @@ namespace Loki private: /// Defines type for thread-safety locking mechanism. - typedef ThreadingModel< ObjAllocatorSingleton > MyThreadingModel; + typedef ThreadingModel< ObjAllocatorSingleton, MutexPolicy > MyThreadingModel; /// Use singleton defined in AllocatorSingleton. typedef typename ObjAllocatorSingleton::MyAllocatorSingleton MyAllocatorSingleton; @@ -567,14 +572,15 @@ namespace Loki */ template < - template class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL, + template class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL, std::size_t chunkSize = LOKI_DEFAULT_CHUNK_SIZE, std::size_t maxSmallObjectSize = LOKI_MAX_SMALL_OBJECT_SIZE, std::size_t objectAlignSize = LOKI_DEFAULT_OBJECT_ALIGNMENT, - template class LifetimePolicy = LOKI_DEFAULT_SMALLOBJ_LIFETIME + template class LifetimePolicy = LOKI_DEFAULT_SMALLOBJ_LIFETIME, + class MutexPolicy = Mutex > class SmallObject : public SmallObjectBase< ThreadingModel, chunkSize, - maxSmallObjectSize, objectAlignSize, LifetimePolicy > + maxSmallObjectSize, objectAlignSize, LifetimePolicy, MutexPolicy > { public: @@ -602,14 +608,15 @@ namespace Loki */ template < - template class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL, + template class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL, std::size_t chunkSize = LOKI_DEFAULT_CHUNK_SIZE, std::size_t maxSmallObjectSize = LOKI_MAX_SMALL_OBJECT_SIZE, std::size_t objectAlignSize = LOKI_DEFAULT_OBJECT_ALIGNMENT, - template class LifetimePolicy = LOKI_DEFAULT_SMALLOBJ_LIFETIME + template class LifetimePolicy = LOKI_DEFAULT_SMALLOBJ_LIFETIME, + class MutexPolicy = Mutex > class SmallValueObject : public SmallObjectBase< ThreadingModel, chunkSize, - maxSmallObjectSize, objectAlignSize, LifetimePolicy > + maxSmallObjectSize, objectAlignSize, LifetimePolicy, MutexPolicy > { protected: inline SmallValueObject( void ) {} @@ -626,6 +633,9 @@ namespace Loki // Nov. 26, 2004: re-implemented by Rich Sposato. // // $Log$ +// Revision 1.25 2006/01/22 13:31:45 syntheticpp +// add additional template parameter for the changed threading classes +// // Revision 1.24 2005/12/08 22:09:08 rich_sposato // Added functions to check for memory corruption. Also made some minor // coding changes. diff --git a/include/loki/SmartPtr.h b/include/loki/SmartPtr.h index c287172..a4239ea 100644 --- a/include/loki/SmartPtr.h +++ b/include/loki/SmartPtr.h @@ -166,13 +166,14 @@ namespace Loki /// Policy Usage: RefCountedMTAdj::RefCountedMT //////////////////////////////////////////////////////////////////////////////// - template