PageRenderTime 30ms CodeModel.GetById 20ms app.highlight 7ms RepoModel.GetById 2ms app.codeStats 0ms

/Src/Dependencies/Boost/boost/iostreams/optimal_buffer_size.hpp

http://hadesmem.googlecode.com/
C++ Header | 87 lines | 60 code | 20 blank | 7 comment | 1 complexity | 092a54bec5e71c6ed455bda256ee0663 MD5 | raw file
 1// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
 2// (C) Copyright 2003-2007 Jonathan Turkanis
 3// Distributed under the Boost Software License, Version 1.0. (See accompanying
 4// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
 5
 6// See http://www.boost.org/libs/iostreams for documentation.
 7
 8#ifndef BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED
 9#define BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED
10
11#if defined(_MSC_VER) && (_MSC_VER >= 1020)
12# pragma once
13#endif
14
15#include <boost/config.hpp>  // DEDUCED_TYPENAME, MSVC.
16#include <boost/detail/workaround.hpp>
17#include <boost/iostreams/constants.hpp>  // constants.
18#include <boost/iostreams/detail/dispatch.hpp>
19#include <boost/iostreams/detail/wrap_unwrap.hpp>
20#include <boost/iostreams/operations_fwd.hpp>
21#include <boost/mpl/if.hpp>
22
23// Must come last.
24#include <boost/iostreams/detail/config/disable_warnings.hpp>
25
26namespace boost { namespace iostreams {
27
28namespace detail {
29
30template<typename T>
31struct optimal_buffer_size_impl;
32
33} // End namespace detail.
34
35template<typename T>
36std::streamsize optimal_buffer_size(const T& t)
37{
38    typedef detail::optimal_buffer_size_impl<T> impl;
39    return impl::optimal_buffer_size(detail::unwrap(t));
40}
41
42namespace detail {
43
44//------------------Definition of optimal_buffer_size_impl--------------------//
45
46template<typename T>
47struct optimal_buffer_size_impl
48    : mpl::if_<
49          is_custom<T>,
50          operations<T>,
51          optimal_buffer_size_impl<
52              BOOST_DEDUCED_TYPENAME
53              dispatch<
54                  T, optimally_buffered_tag, device_tag, filter_tag
55              >::type
56          >
57      >::type
58    { };
59
60template<>
61struct optimal_buffer_size_impl<optimally_buffered_tag> {
62    template<typename T>
63    static std::streamsize optimal_buffer_size(const T& t)
64    { return t.optimal_buffer_size(); }
65};
66
67template<>
68struct optimal_buffer_size_impl<device_tag> {
69    template<typename T>
70    static std::streamsize optimal_buffer_size(const T&)
71    { return default_device_buffer_size; }
72};
73
74template<>
75struct optimal_buffer_size_impl<filter_tag> {
76    template<typename T>
77    static std::streamsize optimal_buffer_size(const T&)
78    { return default_filter_buffer_size; }
79};
80
81} // End namespace detail.
82
83} } // End namespaces iostreams, boost.
84
85#include <boost/iostreams/detail/config/enable_warnings.hpp>
86
87#endif // #ifndef BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED