epoc32/include/stdapis/boost/ptr_container/clone_allocator.hpp
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
//
williamr@2
     2
// Boost.Pointer Container
williamr@2
     3
//
williamr@2
     4
//  Copyright Thorsten Ottosen 2003-2005. Use, modification and
williamr@2
     5
//  distribution is subject to the Boost Software License, Version
williamr@2
     6
//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
williamr@2
     7
//  http://www.boost.org/LICENSE_1_0.txt)
williamr@2
     8
//
williamr@2
     9
// For more information, see http://www.boost.org/libs/ptr_container/
williamr@2
    10
//
williamr@2
    11
williamr@2
    12
#ifndef BOOST_PTR_CONTAINER_CLONE_ALLOCATOR_HPP
williamr@2
    13
#define BOOST_PTR_CONTAINER_CLONE_ALLOCATOR_HPP
williamr@2
    14
williamr@2
    15
#include <boost/assert.hpp>
williamr@2
    16
#include <boost/checked_delete.hpp>
williamr@2
    17
#include <typeinfo>
williamr@2
    18
williamr@2
    19
namespace boost
williamr@2
    20
{
williamr@2
    21
    /////////////////////////////////////////////////////////////////////////
williamr@2
    22
    // Clonable concept 
williamr@2
    23
    /////////////////////////////////////////////////////////////////////////
williamr@2
    24
    
williamr@2
    25
    template< class T >
williamr@2
    26
    inline T* new_clone( const T& r )
williamr@2
    27
    {
williamr@2
    28
        T* res = new T( r );
williamr@2
    29
        BOOST_ASSERT( typeid(r) == typeid(*res) &&
williamr@2
    30
                      "Default new_clone() sliced object!" );
williamr@2
    31
        return res;
williamr@2
    32
    }
williamr@2
    33
williamr@2
    34
    template< class T >
williamr@2
    35
    inline void delete_clone( const T* r )
williamr@2
    36
    {
williamr@2
    37
        checked_delete( r );
williamr@2
    38
    }
williamr@2
    39
williamr@2
    40
    /////////////////////////////////////////////////////////////////////////
williamr@2
    41
    // CloneAllocator concept
williamr@2
    42
    /////////////////////////////////////////////////////////////////////////
williamr@2
    43
    
williamr@2
    44
    struct heap_clone_allocator
williamr@2
    45
    {
williamr@2
    46
        template< class U >
williamr@2
    47
        static U* allocate_clone( const U& r )
williamr@2
    48
        {
williamr@2
    49
            return new_clone( r );
williamr@2
    50
        }
williamr@2
    51
williamr@2
    52
        template< class U >
williamr@2
    53
        static void deallocate_clone( const U* r )
williamr@2
    54
        {
williamr@2
    55
            delete_clone( r );
williamr@2
    56
        }
williamr@2
    57
williamr@2
    58
    };
williamr@2
    59
williamr@2
    60
williamr@2
    61
    
williamr@2
    62
    struct view_clone_allocator
williamr@2
    63
    {
williamr@2
    64
        template< class U >
williamr@2
    65
        static U* allocate_clone( const U& r )
williamr@2
    66
        {
williamr@2
    67
            return const_cast<U*>( &r );
williamr@2
    68
        }
williamr@2
    69
williamr@2
    70
        template< class U >
williamr@2
    71
        static void deallocate_clone( const U* r )
williamr@2
    72
        {
williamr@2
    73
            // do nothing
williamr@2
    74
        }
williamr@2
    75
    };
williamr@2
    76
williamr@2
    77
} // namespace 'boost'
williamr@2
    78
williamr@2
    79
#endif
williamr@2
    80