diff -r 000000000000 -r e4d67989cc36 ossrv_pub/boost_apis/boost/ptr_container/detail/default_deleter.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ossrv_pub/boost_apis/boost/ptr_container/detail/default_deleter.hpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,69 @@ +// (C) Copyright Jonathan Turkanis 2004-2005. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.) + +// Contains the definition of move_ptrs::default_deleter, the default +// Deleter template argument to move_ptr. Uses a technique of Daniel +// Wallin to capture the type of a pointer at the time the deleter +// is constructed, so that move_ptrs can delete objects of incomplete +// type by default. + +#ifndef BOOST_MOVE_PTR_DEFAULT_DELETER_HPP_INCLUDED +#define BOOST_MOVE_PTR_DEFAULT_DELETER_HPP_INCLUDED + +#include +#include +#include +#include + +namespace boost { namespace ptr_container_detail { namespace move_ptrs { + +namespace ptr_container_detail { + +template +struct deleter_base { + typedef void (*deleter)(T*); + deleter_base(deleter d) { delete_ = d; } + void operator() (T* t) const { delete_(t); } + static deleter delete_; +}; + +template +typename deleter_base::deleter +deleter_base::delete_; + +template +struct scalar_deleter : deleter_base { + typedef deleter_base base; + scalar_deleter() : base(do_delete) { } + static void do_delete(T* t) { checked_delete(t); } +}; + +template +struct array_deleter + : deleter_base::type> +{ + typedef typename remove_bounds::type element_type; + typedef deleter_base base; + array_deleter() : base(do_delete) { } + static void do_delete(element_type* t) { checked_array_delete(t); } +}; + +} // End namespace ptr_container_detail. + +template +struct default_deleter + : mpl::if_< + is_array, + ptr_container_detail::array_deleter, + ptr_container_detail::scalar_deleter + >::type +{ + default_deleter() { } + template + default_deleter(default_deleter tt) { } +}; + +} } } // End namespaces ptr_container_detail, move_ptrs, boost. + +#endif // #ifndef BOOST_MOVE_PTR_DEFAULT_DELETER_HPP_INCLUDED