added helper-macros for specializing std::less
git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@112 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
parent
4c0391d95a
commit
0bd2e6d699
1 changed files with 38 additions and 4 deletions
|
@ -13,7 +13,8 @@
|
||||||
// without express or implied warranty.
|
// without express or implied warranty.
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// Last update: Feb 24, 2003
|
// Last update: Mar 06, 2003
|
||||||
|
|
||||||
// ported RefCountedMT
|
// ported RefCountedMT
|
||||||
// To create a SmartPtr with RefCountedMT as ownership policy
|
// To create a SmartPtr with RefCountedMT as ownership policy
|
||||||
// use code like this:
|
// use code like this:
|
||||||
|
@ -76,7 +77,6 @@
|
||||||
|
|
||||||
namespace Loki
|
namespace Loki
|
||||||
{
|
{
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// class template DefaultSPStorage
|
// class template DefaultSPStorage
|
||||||
// Implementation of the StoragePolicy used by SmartPtr
|
// Implementation of the StoragePolicy used by SmartPtr
|
||||||
|
@ -128,7 +128,9 @@ namespace Loki
|
||||||
// Destroys the data stored
|
// Destroys the data stored
|
||||||
// (Destruction might be taken over by the OwnershipPolicy)
|
// (Destruction might be taken over by the OwnershipPolicy)
|
||||||
void Destroy()
|
void Destroy()
|
||||||
{ delete pointee_; }
|
{
|
||||||
|
delete pointee_;
|
||||||
|
}
|
||||||
|
|
||||||
// Default value to initialize the pointer
|
// Default value to initialize the pointer
|
||||||
static StoredType Default()
|
static StoredType Default()
|
||||||
|
@ -1432,6 +1434,37 @@ namespace std
|
||||||
{ return less<T*>()(GetImpl(lhs), GetImpl(rhs)); }
|
{ return less<T*>()(GetImpl(lhs), GetImpl(rhs)); }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
// macros that help to specialize std::less for smarptrs.
|
||||||
|
#define SMARTPTR_SPECIALIZE_LESS_5(T, OP, CP, KP, SP) \
|
||||||
|
namespace std \
|
||||||
|
{ \
|
||||||
|
struct less< Loki::SmartPtr<T, OP, CP, KP, SP> > \
|
||||||
|
: public binary_function<Loki::SmartPtr<T, OP, CP, KP, SP>, \
|
||||||
|
Loki::SmartPtr<T, OP, CP, KP, SP>, bool> \
|
||||||
|
{ \
|
||||||
|
bool operator()(const Loki::SmartPtr<T, OP, CP, KP, SP>& lhs, \
|
||||||
|
const Loki::SmartPtr<T, OP, CP, KP, SP>& rhs) const \
|
||||||
|
{ \
|
||||||
|
typedef ApplyInnerType<SP, T>::type TempType; \
|
||||||
|
const TempType& rlhs = lhs; \
|
||||||
|
const TempType& rrhs = rhs; \
|
||||||
|
return less<T*>()(GetImpl(rlhs), GetImpl(rrhs)); \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SMARTPTR_SPECIALIZE_LESS_4(T, OP, CP, KP) \
|
||||||
|
SMARTPTR_SPECIALIZE_LESS_5(T, OP, CP, KP, DefaultSPStorageWrapper)
|
||||||
|
|
||||||
|
#define SMARTPTR_SPECIALIZE_LESS_3(T, OP, CP) \
|
||||||
|
SMARTPTR_SPECIALIZE_LESS_5(T, OP, CP, AssertCheckWrapper, DefaultSPStorageWrapper)
|
||||||
|
|
||||||
|
#define SMARTPTR_SPECIALIZE_LESS_2(T, OP) \
|
||||||
|
SMARTPTR_SPECIALIZE_LESS_5(T, OP, DisallowConversion, AssertCheckWrapper, DefaultSPStorageWrapper)
|
||||||
|
|
||||||
|
#define SMARTPTR_SPECIALIZE_LESS(T) \
|
||||||
|
SMARTPTR_SPECIALIZE_LESS_5(T, RefCountedWrapper, DisallowConversion, AssertCheckWrapper, DefaultSPStorageWrapper)
|
||||||
#endif
|
#endif
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Change log:
|
// Change log:
|
||||||
|
@ -1440,6 +1473,7 @@ namespace std
|
||||||
// Oct 26, 2002: ported by Benjamin Kaufmann to MSVC 6.0
|
// Oct 26, 2002: ported by Benjamin Kaufmann to MSVC 6.0
|
||||||
// Feb 24, 2003: ported RefCountedMT. In NoCopy replaced CT_ASSERT with
|
// Feb 24, 2003: ported RefCountedMT. In NoCopy replaced CT_ASSERT with
|
||||||
// STATIC_CHECK. B.K.
|
// STATIC_CHECK. B.K.
|
||||||
|
// Mar 06, 2003: added helper-macros for specializing std::less for
|
||||||
|
// Smart-Pointers.
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#endif // SMARTPTR_INC_
|
#endif // SMARTPTR_INC_
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue