-m
git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@1112 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
parent
ca6a94ac97
commit
bec200e5f8
2 changed files with 16 additions and 86 deletions
|
@ -85,7 +85,10 @@
|
||||||
/// If you write your own policy, you must implement these 3 functions:
|
/// If you write your own policy, you must implement these 3 functions:
|
||||||
/// -# void static Delete( const P * p )
|
/// -# void static Delete( const P * p )
|
||||||
/// -# static P * Default( void )
|
/// -# static P * Default( void )
|
||||||
/// -# void Swap( YourResetPolicy & )
|
/// -# Default constructor.
|
||||||
|
/// -# Copy constructor.
|
||||||
|
/// -# Templated copy constructor.
|
||||||
|
/// -# void Swap( YourDeletePolicy & )
|
||||||
///
|
///
|
||||||
/// \par ResetPolicy
|
/// \par ResetPolicy
|
||||||
/// A reset policy tells the ReleaseAll and ResetAll functions whether they
|
/// A reset policy tells the ReleaseAll and ResetAll functions whether they
|
||||||
|
@ -235,45 +238,6 @@ protected:
|
||||||
inline void Swap( DeleteSingle & ) {}
|
inline void Swap( DeleteSingle & ) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace Private
|
|
||||||
{
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// \class DeleteArrayBase
|
|
||||||
///
|
|
||||||
/// \ingroup StrongPointerDeleteGroup
|
|
||||||
/// Base class used only by the DeleteArray policy class. This stores the
|
|
||||||
/// number of elements in an array of shared objects.
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
class DeleteArrayBase
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
inline size_t GetArrayCount( void ) const { return m_itemCount; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
DeleteArrayBase( void ) : m_itemCount( 0 ) {}
|
|
||||||
|
|
||||||
explicit DeleteArrayBase( size_t itemCount ) : m_itemCount( itemCount ) {}
|
|
||||||
|
|
||||||
DeleteArrayBase( const DeleteArrayBase & that ) : m_itemCount( that.m_itemCount ) {}
|
|
||||||
|
|
||||||
void Swap( DeleteArrayBase & rhs );
|
|
||||||
|
|
||||||
void OnInit( const void * p ) const;
|
|
||||||
|
|
||||||
void OnCheckRange( size_t index ) const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
size_t m_itemCount;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// \class DeleteArray
|
/// \class DeleteArray
|
||||||
///
|
///
|
||||||
|
@ -2068,19 +2032,27 @@ public:
|
||||||
return * GetPointer();
|
return * GetPointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** operator[] returns a reference to an modifiable object. If the index is greater than or
|
||||||
|
equal to the number of elements, the function will throw a std::out_of_range exception.
|
||||||
|
This only works with DeleteArray policy. Any other policy will cause a compiler error.
|
||||||
|
*/
|
||||||
ReferenceType operator [] ( size_t index )
|
ReferenceType operator [] ( size_t index )
|
||||||
{
|
{
|
||||||
KP::OnDereference( GetPointer() );
|
|
||||||
DP::OnCheckRange( index );
|
|
||||||
PointerType p = GetPointer();
|
PointerType p = GetPointer();
|
||||||
|
KP::OnDereference( p );
|
||||||
|
DP::OnCheckRange( index );
|
||||||
return p[ index ];
|
return p[ index ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** operator[] returns a reference to a const object. If the index is greater than or
|
||||||
|
equal to the number of elements, the function will throw a std::out_of_range exception.
|
||||||
|
This only works with DeleteArray policy. Any other policy will cause a compiler error.
|
||||||
|
*/
|
||||||
ConstReferenceType operator [] ( size_t index ) const
|
ConstReferenceType operator [] ( size_t index ) const
|
||||||
{
|
{
|
||||||
KP::OnDereference( GetPointer() );
|
|
||||||
DP::OnCheckRange( index );
|
|
||||||
ConstPointerType p = GetPointer();
|
ConstPointerType p = GetPointer();
|
||||||
|
KP::OnDereference( p );
|
||||||
|
DP::OnCheckRange( index );
|
||||||
return p[ index ];
|
return p[ index ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,6 @@
|
||||||
|
|
||||||
#include <loki/StrongPtr.h>
|
#include <loki/StrongPtr.h>
|
||||||
|
|
||||||
#include <stdexcept>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
#ifdef DO_EXTRA_LOKI_TESTS
|
#ifdef DO_EXTRA_LOKI_TESTS
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
@ -41,45 +38,6 @@ namespace Private
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
void DeleteArrayBase::Swap( DeleteArrayBase & rhs )
|
|
||||||
{
|
|
||||||
assert( NULL != this );
|
|
||||||
|
|
||||||
const size_t temp = m_itemCount;
|
|
||||||
m_itemCount = rhs.m_itemCount;
|
|
||||||
rhs.m_itemCount = temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void DeleteArrayBase::OnInit( const void * p ) const
|
|
||||||
{
|
|
||||||
assert( NULL != this );
|
|
||||||
if ( NULL == p )
|
|
||||||
{
|
|
||||||
assert( 0 == m_itemCount );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
assert( 0 < m_itemCount );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void DeleteArrayBase::OnCheckRange( size_t index ) const
|
|
||||||
{
|
|
||||||
assert( NULL != this );
|
|
||||||
|
|
||||||
if ( index < m_itemCount )
|
|
||||||
return;
|
|
||||||
|
|
||||||
const ::std::string message( "index out of range in ::Loki::DeleteArrayBase::OnCheckRange" );
|
|
||||||
throw ::std::out_of_range( message );
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
OneOwnerRefCountInfo::OneOwnerRefCountInfo( SingleOwnerRefCount * ptr )
|
OneOwnerRefCountInfo::OneOwnerRefCountInfo( SingleOwnerRefCount * ptr )
|
||||||
: m_pointer( NULL )
|
: m_pointer( NULL )
|
||||||
, m_strongPtr( ptr )
|
, m_strongPtr( ptr )
|
||||||
|
|
Loading…
Add table
Reference in a new issue