Moved Const-policy structs from SmartPtr.h to ConstPolicy.h.

git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@535 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
rich_sposato 2006-02-19 22:04:28 +00:00
parent 1c4109e72d
commit 059eba4ae1
3 changed files with 75 additions and 35 deletions

67
include/loki/ConstPolicy.h Executable file
View file

@ -0,0 +1,67 @@
////////////////////////////////////////////////////////////////////////////////
// The Loki Library
// Copyright (c) 2006 Richard Sposato
// Copyright (c) 2006 Peter Kümmel
// Permission to use, copy, modify, distribute and sell this software for any
// purpose is hereby granted without fee, provided that the above copyright
// notice appear in all copies and that both that copyright notice and this
// permission notice appear in supporting documentation.
// The authors make no representations about the
// suitability of this software for any purpose. It is provided "as is"
// without express or implied warranty.
////////////////////////////////////////////////////////////////////////////////
#ifndef LOKI_CONST_POLICY_INC_
#define LOKI_CONST_POLICY_INC_
// $Header$
namespace Loki
{
////////////////////////////////////////////////////////////////////////////////
/// @note These policy classes are used in LockingPtr and SmartPtr to define
/// how const is propagated from the pointee.
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/// \class DontPropagateConst
///
/// \ingroup ConstGroup
/// Don't propagate constness of pointed or referred object.
////////////////////////////////////////////////////////////////////////////////
template< class T >
struct DontPropagateConst
{
typedef T Type;
};
////////////////////////////////////////////////////////////////////////////////
/// \class PropagateConst
///
/// \ingroup ConstGroup
/// Propagate constness of pointed or referred object.
////////////////////////////////////////////////////////////////////////////////
template< class T >
struct PropagateConst
{
typedef const T Type;
};
// default will not break existing code
#ifndef LOKI_DEFAULT_CONSTNESS
#define LOKI_DEFAULT_CONSTNESS DontPropagateConst
#endif
} // end namespace Loki
#endif // end file guardian
// $Log$
// Revision 1.1 2006/02/19 22:04:28 rich_sposato
// Moved Const-policy structs from SmartPtr.h to ConstPolicy.h.
//

View file

@ -16,7 +16,7 @@
#ifndef LOKI_LOCKING_PTR_INC_ #ifndef LOKI_LOCKING_PTR_INC_
#define LOKI_LOCKING_PTR_INC_ #define LOKI_LOCKING_PTR_INC_
#include <loki/SmartPtr.h> #include <loki/ConstPolicy.h>
namespace Loki namespace Loki
{ {
@ -99,6 +99,9 @@ namespace Loki
// $Log$ // $Log$
// Revision 1.9 2006/02/19 22:04:28 rich_sposato
// Moved Const-policy structs from SmartPtr.h to ConstPolicy.h.
//
// Revision 1.8 2006/01/30 20:33:01 syntheticpp // Revision 1.8 2006/01/30 20:33:01 syntheticpp
// use policies from SmartPtr.h, clean up // use policies from SmartPtr.h, clean up
// //

View file

@ -28,13 +28,12 @@
/// \ingroup SmartPointerGroup /// \ingroup SmartPointerGroup
/// \defgroup SmartPointerCheckingGroup Checking policies /// \defgroup SmartPointerCheckingGroup Checking policies
/// \ingroup SmartPointerGroup /// \ingroup SmartPointerGroup
/// \defgroup SmartPointerConstGroup Propagating constness policies
/// \ingroup SmartPointerGroup
#include "SmallObj.h" #include "SmallObj.h"
#include "TypeManip.h" #include "TypeManip.h"
#include "static_check.h" #include "static_check.h"
#include "RefToValue.h" #include "RefToValue.h"
#include "ConstPolicy.h"
#include <functional> #include <functional>
#include <stdexcept> #include <stdexcept>
@ -823,38 +822,6 @@ namespace Loki
}; };
////////////////////////////////////////////////////////////////////////////////
/// \class DontPropagateConst
///
/// \ingroup SmartPointerConstGroup
/// Don't propagate constness of pointed object (like a plain pointer)
////////////////////////////////////////////////////////////////////////////////
template<class T>
struct DontPropagateConst
{
typedef T Type;
};
////////////////////////////////////////////////////////////////////////////////
/// \class PropagateConst
///
/// \ingroup SmartPointerConstGroup
/// Propagate constness of pointed object (unlike a plain pointer)
////////////////////////////////////////////////////////////////////////////////
template<class T>
struct PropagateConst
{
typedef const T Type;
};
// default will not break exisiting code
#ifndef LOKI_DEFAULT_CONSTNESS
#define LOKI_DEFAULT_CONSTNESS DontPropagateConst
#endif
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// class template SmartPtr (declaration) // class template SmartPtr (declaration)
// The reason for all the fuss above // The reason for all the fuss above
@ -1431,6 +1398,9 @@ namespace std
#endif // SMARTPTR_INC_ #endif // SMARTPTR_INC_
// $Log$ // $Log$
// Revision 1.17 2006/02/19 22:04:28 rich_sposato
// Moved Const-policy structs from SmartPtr.h to ConstPolicy.h.
//
// Revision 1.16 2006/02/14 11:54:46 syntheticpp // Revision 1.16 2006/02/14 11:54:46 syntheticpp
// rename SmartPtr-ByRef and ScopeGuard-ByRefHolder into RefToValue and move it to loki/RefToValue.h // rename SmartPtr-ByRef and ScopeGuard-ByRefHolder into RefToValue and move it to loki/RefToValue.h
// //