Chris@16: // (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com) Chris@16: // (C) Copyright 2003-2007 Jonathan Turkanis Chris@16: // Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.) Chris@16: Chris@16: // See http://www.boost.org/libs/iostreams for documentation. Chris@16: Chris@16: #ifndef BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED Chris@16: #define BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED Chris@16: Chris@16: #if defined(_MSC_VER) && (_MSC_VER >= 1020) Chris@16: # pragma once Chris@16: #endif Chris@16: Chris@16: #include // DEDUCED_TYPENAME, MSVC. Chris@16: #include Chris@16: #include // constants. Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: // Must come last. Chris@16: #include Chris@16: Chris@16: namespace boost { namespace iostreams { Chris@16: Chris@16: namespace detail { Chris@16: Chris@16: template Chris@16: struct optimal_buffer_size_impl; Chris@16: Chris@16: } // End namespace detail. Chris@16: Chris@16: template Chris@16: std::streamsize optimal_buffer_size(const T& t) Chris@16: { Chris@16: typedef detail::optimal_buffer_size_impl impl; Chris@16: return impl::optimal_buffer_size(detail::unwrap(t)); Chris@16: } Chris@16: Chris@16: namespace detail { Chris@16: Chris@16: //------------------Definition of optimal_buffer_size_impl--------------------// Chris@16: Chris@16: template Chris@16: struct optimal_buffer_size_impl Chris@16: : mpl::if_< Chris@16: is_custom, Chris@16: operations, Chris@16: optimal_buffer_size_impl< Chris@16: BOOST_DEDUCED_TYPENAME Chris@16: dispatch< Chris@16: T, optimally_buffered_tag, device_tag, filter_tag Chris@16: >::type Chris@16: > Chris@16: >::type Chris@16: { }; Chris@16: Chris@16: template<> Chris@16: struct optimal_buffer_size_impl { Chris@16: template Chris@16: static std::streamsize optimal_buffer_size(const T& t) Chris@16: { return t.optimal_buffer_size(); } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct optimal_buffer_size_impl { Chris@16: template Chris@16: static std::streamsize optimal_buffer_size(const T&) Chris@16: { return default_device_buffer_size; } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct optimal_buffer_size_impl { Chris@16: template Chris@16: static std::streamsize optimal_buffer_size(const T&) Chris@16: { return default_filter_buffer_size; } Chris@16: }; Chris@16: Chris@16: } // End namespace detail. Chris@16: Chris@16: } } // End namespaces iostreams, boost. Chris@16: Chris@16: #include Chris@16: Chris@16: #endif // #ifndef BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED