imgtools/imglib/boostlibrary/boost/checked_delete.hpp
changeset 0 044383f39525
equal deleted inserted replaced
-1:000000000000 0:044383f39525
       
     1 #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED
       
     2 #define BOOST_CHECKED_DELETE_HPP_INCLUDED
       
     3 
       
     4 // MS compatible compilers support #pragma once
       
     5 
       
     6 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
       
     7 # pragma once
       
     8 #endif
       
     9 
       
    10 //
       
    11 //  boost/checked_delete.hpp
       
    12 //
       
    13 //  Copyright (c) 2002, 2003 Peter Dimov
       
    14 //  Copyright (c) 2003 Daniel Frey
       
    15 //  Copyright (c) 2003 Howard Hinnant
       
    16 //
       
    17 //  Distributed under the Boost Software License, Version 1.0. (See
       
    18 //  accompanying file LICENSE_1_0.txt or copy at
       
    19 //  http://www.boost.org/LICENSE_1_0.txt)
       
    20 //
       
    21 //  See http://www.boost.org/libs/utility/checked_delete.html for documentation.
       
    22 //
       
    23 
       
    24 namespace boost
       
    25 {
       
    26 
       
    27 // verify that types are complete for increased safety
       
    28 
       
    29 template<class T> inline void checked_delete(T * x)
       
    30 {
       
    31     // intentionally complex - simplification causes regressions
       
    32     typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
       
    33     (void) sizeof(type_must_be_complete);
       
    34     delete x;
       
    35 }
       
    36 
       
    37 template<class T> inline void checked_array_delete(T * x)
       
    38 {
       
    39     typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
       
    40     (void) sizeof(type_must_be_complete);
       
    41     delete [] x;
       
    42 }
       
    43 
       
    44 template<class T> struct checked_deleter
       
    45 {
       
    46     typedef void result_type;
       
    47     typedef T * argument_type;
       
    48 
       
    49     void operator()(T * x) const
       
    50     {
       
    51         // boost:: disables ADL
       
    52         boost::checked_delete(x);
       
    53     }
       
    54 };
       
    55 
       
    56 template<class T> struct checked_array_deleter
       
    57 {
       
    58     typedef void result_type;
       
    59     typedef T * argument_type;
       
    60 
       
    61     void operator()(T * x) const
       
    62     {
       
    63         boost::checked_array_delete(x);
       
    64     }
       
    65 };
       
    66 
       
    67 } // namespace boost
       
    68 
       
    69 #endif  // #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED