aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/restricted/boost/iostreams
diff options
context:
space:
mode:
authorbugaevskiy <bugaevskiy@yandex-team.com>2022-08-23 11:06:55 +0300
committerbugaevskiy <bugaevskiy@yandex-team.com>2022-08-23 11:06:55 +0300
commitcd3603423481480c0c545ae7b360a3bfd7c797d2 (patch)
tree3f35b1ab81e96232224c8ebe790ff71f59e76d22 /contrib/restricted/boost/iostreams
parent41e5df041415ca76c8839340ca9c2337ef2e87c1 (diff)
downloadydb-cd3603423481480c0c545ae7b360a3bfd7c797d2.tar.gz
Reimport boost/iostreams as a separate project
Diffstat (limited to 'contrib/restricted/boost/iostreams')
-rw-r--r--contrib/restricted/boost/iostreams/CMakeLists.txt53
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/categories.hpp175
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/chain.hpp594
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/char_traits.hpp73
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/checked_operations.hpp158
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/close.hpp253
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/concepts.hpp129
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/constants.hpp42
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/access_control.hpp87
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/concept_adapter.hpp289
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/mode_adapter.hpp117
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/non_blocking_adapter.hpp62
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/output_iterator_adapter.hpp41
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/range_adapter.hpp187
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/bool_trait_def.hpp49
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/broken_overload_resolution/forward.hpp31
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp189
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/buffer.hpp229
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/call_traits.hpp32
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/char_traits.hpp63
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/auto_link.hpp49
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/bzip2.hpp48
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/codecvt.hpp81
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/disable_warnings.hpp30
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/dyn_link.hpp46
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/enable_warnings.hpp18
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/fpos.hpp45
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/gcc.hpp27
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/limits.hpp19
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/overload_resolution.hpp30
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/rtl.hpp72
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/unreachable_return.hpp24
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/wide_streams.hpp55
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/windows_posix.hpp25
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/zlib.hpp50
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/default_arg.hpp21
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/dispatch.hpp41
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/double_object.hpp114
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/enable_if_stream.hpp32
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/error.hpp45
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/execute.hpp135
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/file_handle.hpp32
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/forward.hpp113
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/fstream.hpp33
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/functional.hpp192
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/ios.hpp65
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/iostream.hpp34
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/is_dereferenceable.hpp80
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/is_iterator_range.hpp34
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/optional.hpp114
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/path.hpp214
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/push.hpp153
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/push_params.hpp21
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/resolve.hpp230
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/select.hpp86
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/select_by_size.hpp161
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf.hpp34
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/chainbuf.hpp113
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/direct_streambuf.hpp311
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/indirect_streambuf.hpp447
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/linked_streambuf.hpp114
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/system_failure.hpp86
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/template_params.hpp26
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/translate_int_type.hpp62
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/detail/wrap_unwrap.hpp98
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/device/array.hpp133
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/device/back_inserter.hpp41
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/device/file.hpp191
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/device/file_descriptor.hpp325
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/device/mapped_file.hpp611
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/device/null.hpp66
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/filter/bzip2.hpp418
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/filter/gzip.hpp757
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/filter/lzma.hpp372
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/filter/symmetric.hpp311
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/filter/zlib.hpp431
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/filtering_stream.hpp187
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/filtering_streambuf.hpp70
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/flush.hpp125
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/get.hpp17
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/imbue.hpp82
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/input_sequence.hpp72
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/operations.hpp26
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/operations_fwd.hpp41
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/optimal_buffer_size.hpp87
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/output_sequence.hpp72
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/pipeline.hpp114
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/positioning.hpp117
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/put.hpp17
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/putback.hpp17
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/read.hpp241
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/seek.hpp180
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/stream_buffer.hpp116
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/traits.hpp363
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/traits_fwd.hpp111
-rw-r--r--contrib/restricted/boost/iostreams/include/boost/iostreams/write.hpp165
-rw-r--r--contrib/restricted/boost/iostreams/src/bzip2.cpp168
-rw-r--r--contrib/restricted/boost/iostreams/src/file_descriptor.cpp619
-rw-r--r--contrib/restricted/boost/iostreams/src/gzip.cpp174
-rw-r--r--contrib/restricted/boost/iostreams/src/lzma.cpp147
-rw-r--r--contrib/restricted/boost/iostreams/src/mapped_file.cpp498
-rw-r--r--contrib/restricted/boost/iostreams/src/zlib.cpp187
102 files changed, 14382 insertions, 0 deletions
diff --git a/contrib/restricted/boost/iostreams/CMakeLists.txt b/contrib/restricted/boost/iostreams/CMakeLists.txt
new file mode 100644
index 0000000000..51a3db13d5
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/CMakeLists.txt
@@ -0,0 +1,53 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+find_package(ZLIB REQUIRED)
+
+add_library(restricted-boost-iostreams)
+target_compile_options(restricted-boost-iostreams PRIVATE
+ -DBOOST_IOSTREAMS_USE_DEPRECATED
+ -Wno-everything
+)
+target_include_directories(restricted-boost-iostreams PUBLIC
+ ${CMAKE_SOURCE_DIR}/contrib/restricted/boost/iostreams/include
+)
+target_include_directories(restricted-boost-iostreams PRIVATE
+ ${CMAKE_SOURCE_DIR}/contrib/libs/libbz2
+)
+target_link_libraries(restricted-boost-iostreams PUBLIC
+ contrib-libs-cxxsupp
+ contrib-libs-libbz2
+ contrib-libs-lzma
+ ZLIB::ZLIB
+ restricted-boost-assert
+ restricted-boost-bind
+ restricted-boost-config
+ restricted-boost-core
+ restricted-boost-detail
+ restricted-boost-function
+ restricted-boost-integer
+ restricted-boost-iterator
+ restricted-boost-mpl
+ restricted-boost-preprocessor
+ restricted-boost-random
+ restricted-boost-range
+ restricted-boost-regex
+ restricted-boost-smart_ptr
+ restricted-boost-static_assert
+ restricted-boost-throw_exception
+ restricted-boost-type_traits
+ restricted-boost-utility
+)
+target_sources(restricted-boost-iostreams PRIVATE
+ ${CMAKE_SOURCE_DIR}/contrib/restricted/boost/iostreams/src/bzip2.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/restricted/boost/iostreams/src/file_descriptor.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/restricted/boost/iostreams/src/gzip.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/restricted/boost/iostreams/src/lzma.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/restricted/boost/iostreams/src/mapped_file.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/restricted/boost/iostreams/src/zlib.cpp
+)
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/categories.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/categories.hpp
new file mode 100644
index 0000000000..0e84de1e98
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/categories.hpp
@@ -0,0 +1,175 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains category and mode tags for classifying filters, devices and
+// standard stream and stream buffers types.
+
+#ifndef BOOST_IOSTREAMS_CATEGORIES_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CATEGORIES_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+namespace boost { namespace iostreams {
+
+//------------------Tags for dispatch according to i/o mode-------------------//
+
+struct any_tag { };
+namespace detail { struct two_sequence : virtual any_tag { }; }
+namespace detail { struct random_access : virtual any_tag { }; }
+namespace detail { struct one_head : virtual any_tag { }; }
+namespace detail { struct two_head : virtual any_tag { }; }
+struct input : virtual any_tag { };
+struct output : virtual any_tag { };
+struct bidirectional : virtual input, virtual output, detail::two_sequence { };
+struct dual_use : virtual input, virtual output { }; // Pseudo-mode.
+struct input_seekable : virtual input, virtual detail::random_access { };
+struct output_seekable : virtual output, virtual detail::random_access { };
+struct seekable
+ : virtual input_seekable,
+ virtual output_seekable,
+ detail::one_head
+ { };
+struct dual_seekable
+ : virtual input_seekable,
+ virtual output_seekable,
+ detail::two_head
+ { };
+struct bidirectional_seekable
+ : input_seekable, output_seekable,
+ bidirectional, detail::two_head
+ { };
+
+//------------------Tags for use as i/o categories----------------------------//
+
+struct device_tag : virtual any_tag { };
+struct filter_tag : virtual any_tag { };
+
+ //
+ // Tags for optional behavior.
+ //
+
+struct peekable_tag : virtual any_tag { }; // Devices.
+struct closable_tag : virtual any_tag { };
+struct flushable_tag : virtual any_tag { };
+struct localizable_tag : virtual any_tag { };
+struct optimally_buffered_tag : virtual any_tag { };
+struct direct_tag : virtual any_tag { }; // Devices.
+struct multichar_tag : virtual any_tag { }; // Filters.
+
+struct source_tag : device_tag, input { };
+struct sink_tag : device_tag, output { };
+struct bidirectional_device_tag : device_tag, bidirectional { };
+struct seekable_device_tag : virtual device_tag, seekable { };
+
+struct input_filter_tag : filter_tag, input { };
+struct output_filter_tag : filter_tag, output { };
+struct bidirectional_filter_tag : filter_tag, bidirectional { };
+struct seekable_filter_tag : filter_tag, seekable { };
+struct dual_use_filter_tag : filter_tag, dual_use { };
+
+struct multichar_input_filter_tag
+ : multichar_tag,
+ input_filter_tag
+ { };
+struct multichar_output_filter_tag
+ : multichar_tag,
+ output_filter_tag
+ { };
+struct multichar_bidirectional_filter_tag
+ : multichar_tag,
+ bidirectional_filter_tag
+ { };
+struct multichar_seekable_filter_tag
+ : multichar_tag,
+ seekable_filter_tag
+ { };
+struct multichar_dual_use_filter_tag
+ : multichar_tag,
+ dual_use_filter_tag
+ { };
+
+ //
+ // Tags for standard streams and streambufs.
+ //
+
+struct std_io_tag : virtual localizable_tag { };
+struct istream_tag
+ : virtual device_tag,
+ virtual peekable_tag,
+ virtual std_io_tag
+ { };
+struct ostream_tag
+ : virtual device_tag,
+ virtual std_io_tag
+ { };
+struct iostream_tag
+ : istream_tag,
+ ostream_tag
+ { };
+struct streambuf_tag
+ : device_tag,
+ peekable_tag,
+ std_io_tag
+ { };
+struct ifstream_tag
+ : input_seekable,
+ closable_tag,
+ istream_tag
+ { };
+struct ofstream_tag
+ : output_seekable,
+ closable_tag,
+ ostream_tag
+ { };
+struct fstream_tag
+ : seekable,
+ closable_tag,
+ iostream_tag
+ { };
+struct filebuf_tag
+ : seekable,
+ closable_tag,
+ streambuf_tag
+ { };
+struct istringstream_tag
+ : input_seekable,
+ istream_tag
+ { };
+struct ostringstream_tag
+ : output_seekable,
+ ostream_tag
+ { };
+struct stringstream_tag
+ : dual_seekable,
+ iostream_tag
+ { };
+struct stringbuf_tag
+ : dual_seekable,
+ streambuf_tag
+ { };
+struct generic_istream_tag
+ : input_seekable,
+ istream_tag
+ { };
+struct generic_ostream_tag
+ : output_seekable,
+ ostream_tag
+ { };
+struct generic_iostream_tag
+ : seekable,
+ iostream_tag
+ { };
+struct generic_streambuf_tag
+ : seekable,
+ streambuf_tag
+ { };
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CATEGORIES_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/chain.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/chain.hpp
new file mode 100644
index 0000000000..4e108c8b09
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/chain.hpp
@@ -0,0 +1,594 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHAIN_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHAIN_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <exception>
+#include <iterator> // advance.
+#include <list>
+#include <memory> // allocator, auto_ptr or unique_ptr.
+#include <typeinfo>
+#include <stdexcept> // logic_error, out_of_range.
+#include <boost/checked_delete.hpp>
+#include <boost/config.hpp> // BOOST_MSVC, template friends,
+#include <boost/detail/workaround.hpp> // BOOST_NESTED_TEMPLATE
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/streambuf.hpp> // pubsync.
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/iostreams/traits.hpp> // is_filter.
+#include <boost/iostreams/stream_buffer.hpp>
+#include <boost/next_prior.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type.hpp>
+#include <boost/iostreams/detail/execute.hpp>
+
+// Sometimes type_info objects must be compared by name. Borrowed from
+// Boost.Python and Boost.Function.
+#if defined(__GNUC__) || \
+ defined(_AIX) || \
+ (defined(__sgi) && defined(__host_mips)) || \
+ (defined(linux) && defined(__INTEL_COMPILER) && defined(__ICC)) \
+ /**/
+# include <cstring>
+# define BOOST_IOSTREAMS_COMPARE_TYPE_ID(X,Y) \
+ (std::strcmp((X).name(),(Y).name()) == 0)
+#else
+# define BOOST_IOSTREAMS_COMPARE_TYPE_ID(X,Y) ((X)==(Y))
+#endif
+
+// Deprecated. Unused.
+#define BOOST_IOSTREAMS_COMPONENT_TYPE(chain, index) \
+ chain.component_type( index ) \
+ /**/
+
+// Deprecated. Unused.
+#define BOOST_IOSTREAMS_COMPONENT(chain, index, target) \
+ chain.component< target >( index ) \
+ /**/
+
+namespace boost { namespace iostreams {
+
+//--------------Definition of chain and wchain--------------------------------//
+
+namespace detail {
+
+template<typename Chain> class chain_client;
+
+//
+// Concept name: Chain.
+// Description: Represents a chain of stream buffers which provides access
+// to the first buffer in the chain and sends notifications when the
+// streambufs are added to or removed from chain.
+// Refines: Closable device with mode equal to typename Chain::mode.
+// Models: chain, converting_chain.
+// Example:
+//
+// class chain {
+// public:
+// typedef xxx chain_type;
+// typedef xxx client_type;
+// typedef xxx mode;
+// bool is_complete() const; // Ready for i/o.
+// template<typename T>
+// void push( const T& t, // Adds a stream buffer to
+// streamsize, // chain, based on t, with
+// streamsize ); // given buffer and putback
+// // buffer sizes. Pass -1 to
+// // request default size.
+// protected:
+// void register_client(client_type* client); // Associate client.
+// void notify(); // Notify client.
+// };
+//
+
+//
+// Description: Represents a chain of filters with an optional device at the
+// end.
+// Template parameters:
+// Self - A class deriving from the current instantiation of this template.
+// This is an example of the Curiously Recurring Template Pattern.
+// Ch - The character type.
+// Tr - The character traits type.
+// Alloc - The allocator type.
+// Mode - A mode tag.
+//
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+class chain_base {
+public:
+ typedef Ch char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+ typedef Alloc allocator_type;
+ typedef Mode mode;
+ struct category
+ : Mode,
+ device_tag
+ { };
+ typedef chain_client<Self> client_type;
+ friend class chain_client<Self>;
+private:
+ typedef linked_streambuf<Ch> streambuf_type;
+ typedef std::list<streambuf_type*> list_type;
+ typedef chain_base<Self, Ch, Tr, Alloc, Mode> my_type;
+protected:
+ chain_base() : pimpl_(new chain_impl) { }
+ chain_base(const chain_base& rhs): pimpl_(rhs.pimpl_) { }
+public:
+
+ // dual_use is a pseudo-mode to facilitate filter writing,
+ // not a genuine mode.
+ BOOST_STATIC_ASSERT((!is_convertible<mode, dual_use>::value));
+
+ //----------Buffer sizing-------------------------------------------------//
+
+ // Sets the size of the buffer created for the devices to be added to this
+ // chain. Does not affect the size of the buffer for devices already
+ // added.
+ void set_device_buffer_size(std::streamsize n)
+ { pimpl_->device_buffer_size_ = n; }
+
+ // Sets the size of the buffer created for the filters to be added
+ // to this chain. Does not affect the size of the buffer for filters already
+ // added.
+ void set_filter_buffer_size(std::streamsize n)
+ { pimpl_->filter_buffer_size_ = n; }
+
+ // Sets the size of the putback buffer for filters and devices to be added
+ // to this chain. Does not affect the size of the buffer for filters or
+ // devices already added.
+ void set_pback_size(std::streamsize n)
+ { pimpl_->pback_size_ = n; }
+
+ //----------Device interface----------------------------------------------//
+
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+
+ //----------Direct component access---------------------------------------//
+
+ const std::type_info& component_type(int n) const
+ {
+ if (static_cast<size_type>(n) >= size())
+ boost::throw_exception(std::out_of_range("bad chain offset"));
+ return (*boost::next(list().begin(), n))->component_type();
+ }
+
+ // Deprecated.
+ template<int N>
+ const std::type_info& component_type() const { return component_type(N); }
+
+ template<typename T>
+ T* component(int n) const { return component(n, boost::type<T>()); }
+
+ // Deprecated.
+ template<int N, typename T>
+ T* component() const { return component<T>(N); }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+ private:
+#endif
+ template<typename T>
+ T* component(int n, boost::type<T>) const
+ {
+ if (static_cast<size_type>(n) >= size())
+ boost::throw_exception(std::out_of_range("bad chain offset"));
+ streambuf_type* link = *boost::next(list().begin(), n);
+ if (BOOST_IOSTREAMS_COMPARE_TYPE_ID(link->component_type(), typeid(T)))
+ return static_cast<T*>(link->component_impl());
+ else
+ return 0;
+ }
+public:
+
+ //----------Container-like interface--------------------------------------//
+
+ typedef typename list_type::size_type size_type;
+ streambuf_type& front() { return *list().front(); }
+ BOOST_IOSTREAMS_DEFINE_PUSH(push, mode, char_type, push_impl)
+ void pop();
+ bool empty() const { return list().empty(); }
+ size_type size() const { return list().size(); }
+ void reset();
+
+ //----------Additional i/o functions--------------------------------------//
+
+ // Returns true if this chain is non-empty and its final link
+ // is a source or sink, i.e., if it is ready to perform i/o.
+ bool is_complete() const;
+ bool auto_close() const;
+ void set_auto_close(bool close);
+ bool sync() { return front().BOOST_IOSTREAMS_PUBSYNC() != -1; }
+ bool strict_sync();
+private:
+ template<typename T>
+ void push_impl(const T& t, std::streamsize buffer_size = -1,
+ std::streamsize pback_size = -1)
+ {
+ typedef typename iostreams::category_of<T>::type category;
+ typedef typename unwrap_ios<T>::type component_type;
+ typedef stream_buffer<
+ component_type,
+ BOOST_IOSTREAMS_CHAR_TRAITS(char_type),
+ Alloc, Mode
+ > streambuf_t;
+ typedef typename list_type::iterator iterator;
+ BOOST_STATIC_ASSERT((is_convertible<category, Mode>::value));
+ if (is_complete())
+ boost::throw_exception(std::logic_error("chain complete"));
+ streambuf_type* prev = !empty() ? list().back() : 0;
+ buffer_size =
+ buffer_size != -1 ?
+ buffer_size :
+ iostreams::optimal_buffer_size(t);
+ pback_size =
+ pback_size != -1 ?
+ pback_size :
+ pimpl_->pback_size_;
+
+#if defined(BOOST_NO_CXX11_SMART_PTR)
+
+ std::auto_ptr<streambuf_t>
+ buf(new streambuf_t(t, buffer_size, pback_size));
+
+#else
+
+ std::unique_ptr<streambuf_t>
+ buf(new streambuf_t(t, buffer_size, pback_size));
+
+#endif
+
+ list().push_back(buf.get());
+ buf.release();
+ if (is_device<component_type>::value) {
+ pimpl_->flags_ |= f_complete | f_open;
+ for ( iterator first = list().begin(),
+ last = list().end();
+ first != last;
+ ++first )
+ {
+ (*first)->set_needs_close();
+ }
+ }
+ if (prev) prev->set_next(list().back());
+ notify();
+ }
+
+ list_type& list() { return pimpl_->links_; }
+ const list_type& list() const { return pimpl_->links_; }
+ void register_client(client_type* client) { pimpl_->client_ = client; }
+ void notify() { if (pimpl_->client_) pimpl_->client_->notify(); }
+
+ //----------Nested classes------------------------------------------------//
+
+ static void close(streambuf_type* b, BOOST_IOS::openmode m)
+ {
+ if (m == BOOST_IOS::out && is_convertible<Mode, output>::value)
+ b->BOOST_IOSTREAMS_PUBSYNC();
+ b->close(m);
+ }
+
+ static void set_next(streambuf_type* b, streambuf_type* next)
+ { b->set_next(next); }
+
+ static void set_auto_close(streambuf_type* b, bool close)
+ { b->set_auto_close(close); }
+
+ struct closer {
+ typedef streambuf_type* argument_type;
+ typedef void result_type;
+ closer(BOOST_IOS::openmode m) : mode_(m) { }
+ void operator() (streambuf_type* b)
+ {
+ close(b, mode_);
+ }
+ BOOST_IOS::openmode mode_;
+ };
+ friend struct closer;
+
+ enum flags {
+ f_complete = 1,
+ f_open = 2,
+ f_auto_close = 4
+ };
+
+ struct chain_impl {
+ chain_impl()
+ : client_(0), device_buffer_size_(default_device_buffer_size),
+ filter_buffer_size_(default_filter_buffer_size),
+ pback_size_(default_pback_buffer_size),
+ flags_(f_auto_close)
+ { }
+ ~chain_impl()
+ {
+ try { close(); } catch (...) { }
+ try { reset(); } catch (...) { }
+ }
+ void close()
+ {
+ if ((flags_ & f_open) != 0) {
+ flags_ &= ~f_open;
+ stream_buffer< basic_null_device<Ch, Mode> > null;
+ if ((flags_ & f_complete) == 0) {
+ null.open(basic_null_device<Ch, Mode>());
+ set_next(links_.back(), &null);
+ }
+ links_.front()->BOOST_IOSTREAMS_PUBSYNC();
+ try {
+ boost::iostreams::detail::execute_foreach(
+ links_.rbegin(), links_.rend(),
+ closer(BOOST_IOS::in)
+ );
+ } catch (...) {
+ try {
+ boost::iostreams::detail::execute_foreach(
+ links_.begin(), links_.end(),
+ closer(BOOST_IOS::out)
+ );
+ } catch (...) { }
+ throw;
+ }
+ boost::iostreams::detail::execute_foreach(
+ links_.begin(), links_.end(),
+ closer(BOOST_IOS::out)
+ );
+ }
+ }
+ void reset()
+ {
+ typedef typename list_type::iterator iterator;
+ for ( iterator first = links_.begin(),
+ last = links_.end();
+ first != last;
+ ++first )
+ {
+ if ( (flags_ & f_complete) == 0 ||
+ (flags_ & f_auto_close) == 0 )
+ {
+ set_auto_close(*first, false);
+ }
+ streambuf_type* buf = 0;
+ std::swap(buf, *first);
+ delete buf;
+ }
+ links_.clear();
+ flags_ &= ~f_complete;
+ flags_ &= ~f_open;
+ }
+ list_type links_;
+ client_type* client_;
+ std::streamsize device_buffer_size_,
+ filter_buffer_size_,
+ pback_size_;
+ int flags_;
+ };
+ friend struct chain_impl;
+
+ //----------Member data---------------------------------------------------//
+
+private:
+ shared_ptr<chain_impl> pimpl_;
+};
+
+} // End namespace detail.
+
+//
+// Macro: BOOST_IOSTREAMS_DECL_CHAIN(name, category)
+// Description: Defines a template derived from chain_base appropriate for a
+// particular i/o category. The template has the following parameters:
+// Ch - The character type.
+// Tr - The character traits type.
+// Alloc - The allocator type.
+// Macro parameters:
+// name_ - The name of the template to be defined.
+// category_ - The i/o category of the template to be defined.
+//
+#define BOOST_IOSTREAMS_DECL_CHAIN(name_, default_char_) \
+ template< typename Mode, typename Ch = default_char_, \
+ typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch), \
+ typename Alloc = std::allocator<Ch> > \
+ class name_ : public boost::iostreams::detail::chain_base< \
+ name_<Mode, Ch, Tr, Alloc>, \
+ Ch, Tr, Alloc, Mode \
+ > \
+ { \
+ public: \
+ struct category : device_tag, Mode { }; \
+ typedef Mode mode; \
+ private: \
+ typedef boost::iostreams::detail::chain_base< \
+ name_<Mode, Ch, Tr, Alloc>, \
+ Ch, Tr, Alloc, Mode \
+ > base_type; \
+ public: \
+ typedef Ch char_type; \
+ typedef Tr traits_type; \
+ typedef typename traits_type::int_type int_type; \
+ typedef typename traits_type::off_type off_type; \
+ name_() { } \
+ name_(const name_& rhs) : base_type(rhs) { } \
+ name_& operator=(const name_& rhs) \
+ { base_type::operator=(rhs); return *this; } \
+ }; \
+ /**/
+BOOST_IOSTREAMS_DECL_CHAIN(chain, char)
+BOOST_IOSTREAMS_DECL_CHAIN(wchain, wchar_t)
+#undef BOOST_IOSTREAMS_DECL_CHAIN
+
+//--------------Definition of chain_client------------------------------------//
+
+namespace detail {
+
+//
+// Template name: chain_client
+// Description: Class whose instances provide access to an underlying chain
+// using an interface similar to the chains.
+// Subclasses: the various stream and stream buffer templates.
+//
+template<typename Chain>
+class chain_client {
+public:
+ typedef Chain chain_type;
+ typedef typename chain_type::char_type char_type;
+ typedef typename chain_type::traits_type traits_type;
+ typedef typename chain_type::size_type size_type;
+ typedef typename chain_type::mode mode;
+
+ chain_client(chain_type* chn = 0) : chain_(chn ) { }
+ chain_client(chain_client* client) : chain_(client->chain_) { }
+ virtual ~chain_client() { }
+
+ const std::type_info& component_type(int n) const
+ { return chain_->component_type(n); }
+
+ // Deprecated.
+ template<int N>
+ const std::type_info& component_type() const
+ { return chain_->BOOST_NESTED_TEMPLATE component_type<N>(); }
+
+ template<typename T>
+ T* component(int n) const
+ { return chain_->BOOST_NESTED_TEMPLATE component<T>(n); }
+
+ // Deprecated.
+ template<int N, typename T>
+ T* component() const
+ { return chain_->BOOST_NESTED_TEMPLATE component<N, T>(); }
+
+ bool is_complete() const { return chain_->is_complete(); }
+ bool auto_close() const { return chain_->auto_close(); }
+ void set_auto_close(bool close) { chain_->set_auto_close(close); }
+ bool strict_sync() { return chain_->strict_sync(); }
+ void set_device_buffer_size(std::streamsize n)
+ { chain_->set_device_buffer_size(n); }
+ void set_filter_buffer_size(std::streamsize n)
+ { chain_->set_filter_buffer_size(n); }
+ void set_pback_size(std::streamsize n) { chain_->set_pback_size(n); }
+ BOOST_IOSTREAMS_DEFINE_PUSH(push, mode, char_type, push_impl)
+ void pop() { chain_->pop(); }
+ bool empty() const { return chain_->empty(); }
+ size_type size() const { return chain_->size(); }
+ void reset() { chain_->reset(); }
+
+ // Returns a copy of the underlying chain.
+ chain_type filters() { return *chain_; }
+ chain_type filters() const { return *chain_; }
+protected:
+ template<typename T>
+ void push_impl(const T& t BOOST_IOSTREAMS_PUSH_PARAMS())
+ { chain_->push(t BOOST_IOSTREAMS_PUSH_ARGS()); }
+ chain_type& ref() { return *chain_; }
+ void set_chain(chain_type* c)
+ { chain_ = c; chain_->register_client(this); }
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) && \
+ (!BOOST_WORKAROUND(__BORLANDC__, < 0x600))
+ template<typename S, typename C, typename T, typename A, typename M>
+ friend class chain_base;
+#else
+ public:
+#endif
+ virtual void notify() { }
+private:
+ chain_type* chain_;
+};
+
+//--------------Implementation of chain_base----------------------------------//
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+inline std::streamsize chain_base<Self, Ch, Tr, Alloc, Mode>::read
+ (char_type* s, std::streamsize n)
+{ return iostreams::read(*list().front(), s, n); }
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+inline std::streamsize chain_base<Self, Ch, Tr, Alloc, Mode>::write
+ (const char_type* s, std::streamsize n)
+{ return iostreams::write(*list().front(), s, n); }
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+inline std::streampos chain_base<Self, Ch, Tr, Alloc, Mode>::seek
+ (stream_offset off, BOOST_IOS::seekdir way)
+{ return iostreams::seek(*list().front(), off, way); }
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+void chain_base<Self, Ch, Tr, Alloc, Mode>::reset()
+{
+ using namespace std;
+ pimpl_->close();
+ pimpl_->reset();
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+bool chain_base<Self, Ch, Tr, Alloc, Mode>::is_complete() const
+{
+ return (pimpl_->flags_ & f_complete) != 0;
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+bool chain_base<Self, Ch, Tr, Alloc, Mode>::auto_close() const
+{
+ return (pimpl_->flags_ & f_auto_close) != 0;
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+void chain_base<Self, Ch, Tr, Alloc, Mode>::set_auto_close(bool close)
+{
+ pimpl_->flags_ =
+ (pimpl_->flags_ & ~f_auto_close) |
+ (close ? f_auto_close : 0);
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+bool chain_base<Self, Ch, Tr, Alloc, Mode>::strict_sync()
+{
+ typedef typename list_type::iterator iterator;
+ bool result = true;
+ for ( iterator first = list().begin(),
+ last = list().end();
+ first != last;
+ ++first )
+ {
+ bool s = (*first)->strict_sync();
+ result = result && s;
+ }
+ return result;
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+void chain_base<Self, Ch, Tr, Alloc, Mode>::pop()
+{
+ BOOST_ASSERT(!empty());
+ if (auto_close())
+ pimpl_->close();
+ streambuf_type* buf = 0;
+ std::swap(buf, list().back());
+ buf->set_auto_close(false);
+ buf->set_next(0);
+ delete buf;
+ list().pop_back();
+ pimpl_->flags_ &= ~f_complete;
+ if (auto_close() || list().empty())
+ pimpl_->flags_ &= ~f_open;
+}
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHAIN_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/char_traits.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/char_traits.hpp
new file mode 100644
index 0000000000..76ddf9d4f2
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/char_traits.hpp
@@ -0,0 +1,73 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_CHAR_TRAITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CHAR_TRAITS_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <cstdio> // EOF.
+#include <string> // std::char_traits.
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# include <cwchar>
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::wint_t; }
+#endif
+
+namespace boost { namespace iostreams {
+
+// Dinkumware that comes with QNX Momentics 6.3.0, 4.0.2, incorrectly defines
+// the EOF and WEOF macros to not std:: qualify the wint_t type (and so does
+// Sun C++ 5.8 + STLport 4). Fix by placing the def in this scope.
+// NOTE: Use BOOST_WORKAROUND?
+#if (defined(__QNX__) && defined(BOOST_DINKUMWARE_STDLIB)) \
+ || defined(__SUNPRO_CC)
+using ::std::wint_t;
+#endif
+
+const int WOULD_BLOCK = (int) (EOF - 1);
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+const std::wint_t WWOULD_BLOCK = (std::wint_t) (WEOF - 1);
+#endif
+
+template<typename Ch>
+struct char_traits;
+
+template<>
+struct char_traits<char> : BOOST_IOSTREAMS_CHAR_TRAITS(char) {
+ static char newline() { return '\n'; }
+ static int good() { return '\n'; }
+ static int would_block() { return WOULD_BLOCK; }
+ static bool is_good(int c) { return c != EOF && c != WOULD_BLOCK; }
+ static bool is_eof(int c) { return c == EOF; }
+ static bool would_block(int c) { return c == WOULD_BLOCK; }
+};
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+template<>
+struct char_traits<wchar_t> : std::char_traits<wchar_t> {
+ static wchar_t newline() { return L'\n'; }
+ static std::wint_t good() { return L'\n'; }
+ static std::wint_t would_block() { return WWOULD_BLOCK; }
+ static bool is_good(std::wint_t c) { return c != WEOF && c != WWOULD_BLOCK; }
+ static bool is_eof(std::wint_t c) { return c == WEOF; }
+ static bool would_block(std::wint_t c) { return c == WWOULD_BLOCK; }
+};
+#endif
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CHAR_TRAITS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/checked_operations.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/checked_operations.hpp
new file mode 100644
index 0000000000..667d925443
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/checked_operations.hpp
@@ -0,0 +1,158 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains implementations of get, read, put, write and seek which
+// check a device's mode at runtime instead of compile time.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHECKED_OPERATIONS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHECKED_OPERATIONS_HPP_INCLUDED
+
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/config/unreachable_return.hpp>
+#include <boost/iostreams/get.hpp>
+#include <boost/iostreams/put.hpp>
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/seek.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/write.hpp>
+#include <boost/throw_exception.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct read_write_if_impl;
+
+template<typename T>
+struct seek_if_impl;
+
+} // End namespace detail.
+
+template<typename T>
+typename int_type_of<T>::type get_if(T& t)
+{
+ typedef typename detail::dispatch<T, input, output>::type tag;
+ return detail::read_write_if_impl<tag>::get(t);
+}
+
+template<typename T>
+inline std::streamsize
+read_if(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+{
+ typedef typename detail::dispatch<T, input, output>::type tag;
+ return detail::read_write_if_impl<tag>::read(t, s, n);
+}
+
+template<typename T>
+bool put_if(T& t, typename char_type_of<T>::type c)
+{
+ typedef typename detail::dispatch<T, output, input>::type tag;
+ return detail::read_write_if_impl<tag>::put(t, c);
+}
+
+template<typename T>
+inline std::streamsize write_if
+ (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+{
+ typedef typename detail::dispatch<T, output, input>::type tag;
+ return detail::read_write_if_impl<tag>::write(t, s, n);
+}
+
+template<typename T>
+inline std::streampos
+seek_if( T& t, stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+{
+ using namespace detail;
+ typedef typename dispatch<T, random_access, any_tag>::type tag;
+ return seek_if_impl<tag>::seek(t, off, way, which);
+}
+
+namespace detail {
+
+//------------------Specializations of read_write_if_impl---------------------//
+
+template<>
+struct read_write_if_impl<input> {
+ template<typename T>
+ static typename int_type_of<T>::type get(T& t)
+ { return iostreams::get(t); }
+
+ template<typename T>
+ static std::streamsize
+ read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+ { return iostreams::read(t, s, n); }
+
+ template<typename T>
+ static bool put(T&, typename char_type_of<T>::type)
+ { boost::throw_exception(cant_write());
+ BOOST_IOSTREAMS_UNREACHABLE_RETURN(false) }
+
+ template<typename T>
+ static std::streamsize
+ write(T&, const typename char_type_of<T>::type*, std::streamsize)
+ { boost::throw_exception(cant_write());
+ BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+};
+
+template<>
+struct read_write_if_impl<output> {
+ template<typename T>
+ static typename int_type_of<T>::type get(T&)
+ { boost::throw_exception(cant_read());
+ BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+
+ template<typename T>
+ static std::streamsize
+ read(T&, typename char_type_of<T>::type*, std::streamsize)
+ { boost::throw_exception(cant_read());
+ BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+
+ template<typename T>
+ static bool put(T& t, typename char_type_of<T>::type c)
+ { return iostreams::put(t, c); }
+
+ template<typename T>
+ static std::streamsize
+ write( T& t, const typename char_type_of<T>::type* s,
+ std::streamsize n )
+ { return iostreams::write(t, s, n); }
+};
+
+//------------------Specializations of seek_if_impl---------------------------//
+
+template<>
+struct seek_if_impl<random_access> {
+ template<typename T>
+ static std::streampos
+ seek( T& t, stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ { return iostreams::seek(t, off, way, which); }
+};
+
+template<>
+struct seek_if_impl<any_tag> {
+ template<typename T>
+ static std::streampos
+ seek(T&, stream_offset, BOOST_IOS::seekdir, BOOST_IOS::openmode)
+ { boost::throw_exception(cant_seek());
+ BOOST_IOSTREAMS_UNREACHABLE_RETURN(std::streampos()) }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHECKED_OPERATIONS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/close.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/close.hpp
new file mode 100644
index 0000000000..8ae499ff26
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/close.hpp
@@ -0,0 +1,253 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_CLOSE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CLOSE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/flush.hpp>
+#include <boost/iostreams/detail/adapter/non_blocking_adapter.hpp>
+#include <boost/iostreams/detail/ios.hpp> // BOOST_IOS
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+template<typename T>
+void close(T& t);
+
+template<typename T>
+void close(T& t, BOOST_IOS::openmode which);
+
+template<typename T, typename Sink>
+void close(T& t, Sink& snk, BOOST_IOS::openmode which);
+
+namespace detail {
+
+template<typename T>
+void close_all(T& t)
+{
+ try {
+ boost::iostreams::close(t, BOOST_IOS::in);
+ } catch (...) {
+ try {
+ boost::iostreams::close(t, BOOST_IOS::out);
+ } catch (...) { }
+ throw;
+ }
+ boost::iostreams::close(t, BOOST_IOS::out);
+}
+
+template<typename T, typename Sink>
+void close_all(T& t, Sink& snk)
+{
+ try {
+ boost::iostreams::close(t, snk, BOOST_IOS::in);
+ } catch (...) {
+ try {
+ boost::iostreams::close(t, snk, BOOST_IOS::out);
+ } catch (...) { }
+ throw;
+ }
+ boost::iostreams::close(t, snk, BOOST_IOS::out);
+}
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct close_impl;
+
+} // End namespace detail.
+
+template<typename T>
+void close(T& t) { detail::close_all(t); }
+
+template<typename T>
+void close(T& t, BOOST_IOS::openmode which)
+{
+#ifdef BOOST_IOSTREAMS_STRICT
+ BOOST_ASSERT(which == BOOST_IOS::in || which == BOOST_IOS::out);
+#else
+ if (which == (BOOST_IOS::in | BOOST_IOS::out)) {
+ detail::close_all(t);
+ return;
+ }
+#endif
+ detail::close_impl<T>::close(detail::unwrap(t), which);
+}
+
+template<typename T, typename Sink>
+void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+{
+#ifdef BOOST_IOSTREAMS_STRICT
+ BOOST_ASSERT(which == BOOST_IOS::in || which == BOOST_IOS::out);
+#else
+ if (which == (BOOST_IOS::in | BOOST_IOS::out)) {
+ detail::close_all(t, snk);
+ return;
+ }
+#endif
+ detail::close_impl<T>::close(detail::unwrap(t), snk, which);
+}
+
+namespace detail {
+
+//------------------Definition of close_impl----------------------------------//
+
+struct close_boost_stream { };
+struct close_filtering_stream { };
+
+template<typename T>
+struct close_tag {
+ typedef typename category_of<T>::type category;
+ typedef typename detail::unwrapped_type<T>::type unwrapped;
+ typedef typename
+ iostreams::select<
+ mpl::not_< is_convertible<category, closable_tag> >,
+ any_tag,
+ mpl::or_<
+ is_boost_stream<unwrapped>,
+ is_boost_stream_buffer<unwrapped>
+ >,
+ close_boost_stream,
+ mpl::or_<
+ is_filtering_stream<unwrapped>,
+ is_filtering_streambuf<unwrapped>
+ >,
+ close_filtering_stream,
+ mpl::or_<
+ is_convertible<category, two_sequence>,
+ is_convertible<category, dual_use>
+ >,
+ two_sequence,
+ else_,
+ closable_tag
+ >::type type;
+};
+
+template<typename T>
+struct close_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ close_impl<BOOST_DEDUCED_TYPENAME close_tag<T>::type>
+ >::type
+ { };
+
+template<>
+struct close_impl<any_tag> {
+ template<typename T>
+ static void close(T& t, BOOST_IOS::openmode which)
+ {
+ if (which == BOOST_IOS::out)
+ iostreams::flush(t);
+ }
+
+ template<typename T, typename Sink>
+ static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+ {
+ if (which == BOOST_IOS::out) {
+ non_blocking_adapter<Sink> nb(snk);
+ iostreams::flush(t, nb);
+ }
+ }
+};
+
+template<>
+struct close_impl<close_boost_stream> {
+ template<typename T>
+ static void close(T& t)
+ {
+ t.close();
+ }
+ template<typename T>
+ static void close(T& t, BOOST_IOS::openmode which)
+ {
+ if (which == BOOST_IOS::out)
+ t.close();
+ }
+};
+
+template<>
+struct close_impl<close_filtering_stream> {
+ template<typename T>
+ static void close(T& t, BOOST_IOS::openmode which)
+ {
+ typedef typename category_of<T>::type category;
+ const bool in = is_convertible<category, input>::value &&
+ !is_convertible<category, output>::value;
+ if (in == (which == BOOST_IOS::in) && t.is_complete())
+ t.pop();
+ }
+};
+
+template<>
+struct close_impl<closable_tag> {
+ template<typename T>
+ static void close(T& t, BOOST_IOS::openmode which)
+ {
+ typedef typename category_of<T>::type category;
+ const bool in = is_convertible<category, input>::value &&
+ !is_convertible<category, output>::value;
+ if (in == (which == BOOST_IOS::in))
+ t.close();
+ }
+ template<typename T, typename Sink>
+ static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+ {
+ typedef typename category_of<T>::type category;
+ const bool in = is_convertible<category, input>::value &&
+ !is_convertible<category, output>::value;
+ if (in == (which == BOOST_IOS::in)) {
+ non_blocking_adapter<Sink> nb(snk);
+ t.close(nb);
+ }
+ }
+};
+
+template<>
+struct close_impl<two_sequence> {
+ template<typename T>
+ static void close(T& t, BOOST_IOS::openmode which) { t.close(which); }
+ template<typename T, typename Sink>
+ static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+ {
+ non_blocking_adapter<Sink> nb(snk);
+ t.close(nb, which);
+ }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_CLOSE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/concepts.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/concepts.hpp
new file mode 100644
index 0000000000..da4bfd6950
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/concepts.hpp
@@ -0,0 +1,129 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_CONCEPTS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CONCEPTS_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/default_arg.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode.
+#include <boost/iostreams/positioning.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace iostreams {
+
+//--------------Definitions of helper templates for device concepts-----------//
+
+template<typename Mode, typename Ch = char>
+struct device {
+ typedef Ch char_type;
+ struct category
+ : Mode,
+ device_tag,
+ closable_tag,
+ localizable_tag
+ { };
+
+ void close()
+ {
+ using namespace detail;
+ BOOST_STATIC_ASSERT((!is_convertible<Mode, two_sequence>::value));
+ }
+
+ void close(BOOST_IOS::openmode)
+ {
+ using namespace detail;
+ BOOST_STATIC_ASSERT((is_convertible<Mode, two_sequence>::value));
+ }
+
+ template<typename Locale>
+ void imbue(const Locale&) { }
+};
+
+template<typename Mode, typename Ch = wchar_t>
+struct wdevice : device<Mode, Ch> { };
+
+typedef device<input> source;
+typedef wdevice<input> wsource;
+typedef device<output> sink;
+typedef wdevice<output> wsink;
+
+//--------------Definitions of helper templates for simple filter concepts----//
+
+template<typename Mode, typename Ch = char>
+struct filter {
+ typedef Ch char_type;
+ struct category
+ : Mode,
+ filter_tag,
+ closable_tag,
+ localizable_tag
+ { };
+
+ template<typename Device>
+ void close(Device&)
+ {
+ using namespace detail;
+ BOOST_STATIC_ASSERT((!is_convertible<Mode, two_sequence>::value));
+ BOOST_STATIC_ASSERT((!is_convertible<Mode, dual_use>::value));
+ }
+
+ template<typename Device>
+ void close(Device&, BOOST_IOS::openmode)
+ {
+ using namespace detail;
+ BOOST_STATIC_ASSERT(
+ (is_convertible<Mode, two_sequence>::value) ||
+ (is_convertible<Mode, dual_use>::value)
+ );
+ }
+
+ template<typename Locale>
+ void imbue(const Locale&) { }
+};
+
+template<typename Mode, typename Ch = wchar_t>
+struct wfilter : filter<Mode, Ch> { };
+
+typedef filter<input> input_filter;
+typedef wfilter<input> input_wfilter;
+typedef filter<output> output_filter;
+typedef wfilter<output> output_wfilter;
+typedef filter<seekable> seekable_filter;
+typedef wfilter<seekable> seekable_wfilter;
+typedef filter<dual_use> dual_use_filter;
+typedef wfilter<dual_use> dual_use_wfilter;
+
+//------Definitions of helper templates for multi-character filter cncepts----//
+
+template<typename Mode, typename Ch = char>
+struct multichar_filter : filter<Mode, Ch> {
+ struct category : filter<Mode, Ch>::category, multichar_tag { };
+};
+
+template<typename Mode, typename Ch = wchar_t>
+struct multichar_wfilter : multichar_filter<Mode, Ch> { };
+
+typedef multichar_filter<input> multichar_input_filter;
+typedef multichar_wfilter<input> multichar_input_wfilter;
+typedef multichar_filter<output> multichar_output_filter;
+typedef multichar_wfilter<output> multichar_output_wfilter;
+typedef multichar_filter<dual_use> multichar_dual_use_filter;
+typedef multichar_wfilter<dual_use> multichar_dual_use_wfilter;
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CONCEPTS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/constants.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/constants.hpp
new file mode 100644
index 0000000000..55e6f5fdf3
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/constants.hpp
@@ -0,0 +1,42 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains constants used by library.
+
+#ifndef BOOST_IOSTREAMS_CONSTANTS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CONSTANTS_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#ifndef BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE
+# define BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE 4096
+#endif
+
+#ifndef BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE
+# define BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE 128
+#endif
+
+#ifndef BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE
+# define BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE 4
+#endif
+
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+
+namespace boost { namespace iostreams {
+
+const std::streamsize default_device_buffer_size =
+ BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE;
+const std::streamsize default_filter_buffer_size =
+ BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE;
+const std::streamsize default_pback_buffer_size =
+ BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE;
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CONSTANTS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/access_control.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/access_control.hpp
new file mode 100644
index 0000000000..9c3328a226
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/access_control.hpp
@@ -0,0 +1,87 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definition of the class template access_control, which
+// allows the type of inheritance from a provided base class to be specified
+// using a template parameter.
+
+
+#ifndef BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams {
+
+struct protected_ { }; // Represents protected inheritance.
+struct public_ { }; // Represents public inheritance.
+
+
+namespace detail {
+
+ // Implements protected inheritance.
+ template<typename U>
+ struct prot_ : protected U
+ {
+ prot_() { }
+ template<typename V> prot_(V v) : U(v) { }
+ };
+
+ // Implements public inheritance.
+ template<typename U> struct pub_ : public U {
+ pub_() { }
+ template<typename V> pub_(V v) : U(v) { }
+ };
+
+//
+// Used to deduce the base type for the template access_control.
+//
+template<typename T, typename Access>
+struct access_control_base {
+ typedef int bad_access_specifier;
+ typedef typename
+ iostreams::select< // Disambiguation for Tru64
+ ::boost::is_same<
+ Access, protected_
+ >, prot_<T>,
+ ::boost::is_same<
+ Access, public_
+ >, pub_<T>,
+ else_, bad_access_specifier
+ >::type type;
+};
+
+} // End namespace detail.
+
+//
+// Template name: access_control.
+// Description: Allows the type of inheritance from a provided base class
+// to be specified using an int template parameter.
+// Template parameters:
+// Base - The class from which to inherit (indirectly.)
+// Access - The type of access desired. Must be one of the
+// values access_base::prot or access_base::pub.
+//
+template< typename T, typename Access,
+ typename Base = // VC6 workaraound (Compiler Error C2516)
+ typename detail::access_control_base<T, Access>::type >
+struct access_control : public Base {
+ access_control() { }
+ template<typename U> explicit access_control(U u) : Base(u) { }
+};
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/concept_adapter.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/concept_adapter.hpp
new file mode 100644
index 0000000000..5ca878b55a
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/concept_adapter.hpp
@@ -0,0 +1,289 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONCEPT_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONCEPT_ADAPTER_HPP_INCLUDED
+
+#include <boost/config.hpp> // SFINAE.
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/adapter/non_blocking_adapter.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/streambuf.hpp> // pubsync.
+#include <boost/iostreams/detail/config/unreachable_return.hpp>
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Category> struct device_wrapper_impl;
+template<typename Category> struct flt_wrapper_impl;
+
+template<typename T>
+class concept_adapter {
+private:
+ typedef typename detail::value_type<T>::type value_type;
+ typedef typename dispatch<T, input, output>::type input_tag;
+ typedef typename dispatch<T, output, input>::type output_tag;
+ typedef typename
+ mpl::if_<
+ is_device<T>,
+ device_wrapper_impl<input_tag>,
+ flt_wrapper_impl<input_tag>
+ >::type input_impl;
+ typedef typename
+ mpl::if_<
+ is_device<T>,
+ device_wrapper_impl<output_tag>,
+ flt_wrapper_impl<output_tag>
+ >::type output_impl;
+ typedef typename
+ mpl::if_<
+ is_device<T>,
+ device_wrapper_impl<any_tag>,
+ flt_wrapper_impl<any_tag>
+ >::type any_impl;
+public:
+ typedef typename char_type_of<T>::type char_type;
+ typedef typename category_of<T>::type category;
+
+ explicit concept_adapter(const reference_wrapper<T>& ref) : t_(ref.get())
+ { BOOST_STATIC_ASSERT(is_std_io<T>::value); }
+ explicit concept_adapter(const T& t) : t_(t)
+ { BOOST_STATIC_ASSERT(!is_std_io<T>::value); }
+
+ concept_adapter(concept_adapter const& other) = default;
+
+ T& operator*() { return t_; }
+ T* operator->() { return &t_; }
+
+ std::streamsize read(char_type* s, std::streamsize n)
+ { return this->read(s, n, (basic_null_source<char_type>*) 0); }
+
+ template<typename Source>
+ std::streamsize read(char_type* s, std::streamsize n, Source* src)
+ { return input_impl::read(t_, src, s, n); }
+
+ std::streamsize write(const char_type* s, std::streamsize n)
+ { return this->write(s, n, (basic_null_sink<char_type>*) 0); }
+
+ template<typename Sink>
+ std::streamsize write(const char_type* s, std::streamsize n, Sink* snk)
+ { return output_impl::write(t_, snk, s, n); }
+
+ std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ {
+ return this->seek( off, way, which,
+ (basic_null_device<char_type, seekable>*) 0);
+ }
+
+ template<typename Device>
+ std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which, Device* dev )
+ { return any_impl::seek(t_, dev, off, way, which); }
+
+ void close(BOOST_IOS::openmode which)
+ { this->close(which, (basic_null_device<char_type, seekable>*) 0); }
+
+ template<typename Device>
+ void close(BOOST_IOS::openmode which, Device* dev)
+ { any_impl::close(t_, dev, which); }
+
+ template<typename Device>
+ bool flush( Device* dev )
+ {
+ bool result = any_impl::flush(t_, dev);
+ if (dev && dev->BOOST_IOSTREAMS_PUBSYNC() == -1)
+ result = false;
+ return result;
+ }
+
+ template<typename Locale> // Avoid dependency on <locale>
+ void imbue(const Locale& loc) { iostreams::imbue(t_, loc); }
+
+ std::streamsize optimal_buffer_size() const
+ { return iostreams::optimal_buffer_size(t_); }
+private:
+ BOOST_DELETED_FUNCTION(concept_adapter& operator=(const concept_adapter&));
+ value_type t_;
+};
+
+//------------------Specializations of device_wrapper_impl--------------------//
+
+template<>
+struct device_wrapper_impl<any_tag> {
+ template<typename Device, typename Dummy>
+ static std::streampos
+ seek( Device& dev, Dummy*, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which )
+ {
+ typedef typename category_of<Device>::type category;
+ return seek(dev, off, way, which, category());
+ }
+
+ template<typename Device>
+ static std::streampos
+ seek( Device&, stream_offset, BOOST_IOS::seekdir,
+ BOOST_IOS::openmode, any_tag )
+ {
+ boost::throw_exception(cant_seek());
+ BOOST_IOSTREAMS_UNREACHABLE_RETURN(0)
+ }
+
+ template<typename Device>
+ static std::streampos
+ seek( Device& dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which,
+ random_access )
+ {
+ return iostreams::seek(dev, off, way, which);
+ }
+
+ template<typename Device, typename Dummy>
+ static void close(Device& dev, Dummy*, BOOST_IOS::openmode which)
+ { iostreams::close(dev, which); }
+
+ template<typename Device, typename Dummy>
+ static bool flush(Device& dev, Dummy*)
+ { return iostreams::flush(dev); }
+};
+
+
+template<>
+struct device_wrapper_impl<input> : device_wrapper_impl<any_tag> {
+ template<typename Device, typename Dummy>
+ static std::streamsize
+ read( Device& dev, Dummy*, typename char_type_of<Device>::type* s,
+ std::streamsize n )
+ { return iostreams::read(dev, s, n); }
+
+ template<typename Device, typename Dummy>
+ static std::streamsize
+ write( Device&, Dummy*, const typename char_type_of<Device>::type*,
+ std::streamsize )
+ { boost::throw_exception(cant_write());
+ BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+};
+
+template<>
+struct device_wrapper_impl<output> {
+ template<typename Device, typename Dummy>
+ static std::streamsize
+ read(Device&, Dummy*, typename char_type_of<Device>::type*, std::streamsize)
+ { boost::throw_exception(cant_read());
+ BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+
+ template<typename Device, typename Dummy>
+ static std::streamsize
+ write( Device& dev, Dummy*, const typename char_type_of<Device>::type* s,
+ std::streamsize n )
+ { return iostreams::write(dev, s, n); }
+};
+
+//------------------Specializations of flt_wrapper_impl--------------------//
+
+template<>
+struct flt_wrapper_impl<any_tag> {
+ template<typename Filter, typename Device>
+ static std::streampos
+ seek( Filter& f, Device* dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which )
+ {
+ typedef typename category_of<Filter>::type category;
+ return seek(f, dev, off, way, which, category());
+ }
+
+ template<typename Filter, typename Device>
+ static std::streampos
+ seek( Filter&, Device*, stream_offset,
+ BOOST_IOS::seekdir, BOOST_IOS::openmode, any_tag )
+ { boost::throw_exception(cant_seek());
+ BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+
+ template<typename Filter, typename Device>
+ static std::streampos
+ seek( Filter& f, Device* dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which,
+ random_access tag )
+ {
+ typedef typename category_of<Filter>::type category;
+ return seek(f, dev, off, way, which, tag, category());
+ }
+
+ template<typename Filter, typename Device>
+ static std::streampos
+ seek( Filter& f, Device* dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode,
+ random_access, any_tag )
+ { return f.seek(*dev, off, way); }
+
+ template<typename Filter, typename Device>
+ static std::streampos
+ seek( Filter& f, Device* dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which,
+ random_access, two_sequence )
+ { return f.seek(*dev, off, way, which); }
+
+ template<typename Filter, typename Device>
+ static void close(Filter& f, Device* dev, BOOST_IOS::openmode which)
+ { iostreams::close(f, *dev, which); }
+
+ template<typename Filter, typename Device>
+ static bool flush(Filter& f, Device* dev)
+ { return iostreams::flush(f, *dev); }
+};
+
+template<>
+struct flt_wrapper_impl<input> {
+ template<typename Filter, typename Source>
+ static std::streamsize
+ read( Filter& f, Source* src, typename char_type_of<Filter>::type* s,
+ std::streamsize n )
+ { return iostreams::read(f, *src, s, n); }
+
+ template<typename Filter, typename Sink>
+ static std::streamsize
+ write( Filter&, Sink*, const typename char_type_of<Filter>::type*,
+ std::streamsize )
+ { boost::throw_exception(cant_write());
+ BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+};
+
+template<>
+struct flt_wrapper_impl<output> {
+ template<typename Filter, typename Source>
+ static std::streamsize
+ read(Filter&, Source*, typename char_type_of<Filter>::type*,std::streamsize)
+ { boost::throw_exception(cant_read());
+ BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+
+ template<typename Filter, typename Sink>
+ static std::streamsize
+ write( Filter& f, Sink* snk, const typename char_type_of<Filter>::type* s,
+ std::streamsize n )
+ { return iostreams::write(f, *snk, s, n); }
+};
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONCEPT_ADAPTER_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/mode_adapter.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/mode_adapter.hpp
new file mode 100644
index 0000000000..46e83c58af
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/mode_adapter.hpp
@@ -0,0 +1,117 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_MODE_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_MODE_ADAPTER_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+// Contains the definition of the class template mode_adapter, which allows
+// a filter or device to function as if it has a different i/o mode than that
+// deduced by the metafunction mode_of.
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, seekdir, int types.
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Mode, typename T>
+class mode_adapter {
+private:
+ struct empty_base { };
+public:
+ typedef typename wrapped_type<T>::type component_type;
+ typedef typename char_type_of<T>::type char_type;
+ struct category
+ : Mode,
+ device_tag,
+ mpl::if_<is_filter<T>, filter_tag, device_tag>,
+ mpl::if_<is_filter<T>, multichar_tag, empty_base>,
+ closable_tag,
+ localizable_tag
+ { };
+ explicit mode_adapter(const component_type& t) : t_(t) { }
+
+ // Device member functions.
+
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out );
+ void close();
+ void close(BOOST_IOS::openmode which);
+
+ // Filter member functions.
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ { return iostreams::read(t_, src, s, n); }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ { return iostreams::write(t_, snk, s, n); }
+
+ template<typename Device>
+ std::streampos seek(Device& dev, stream_offset off, BOOST_IOS::seekdir way)
+ { return iostreams::seek(t_, dev, off, way); }
+
+ template<typename Device>
+ std::streampos seek( Device& dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which )
+ { return iostreams::seek(t_, dev, off, way, which); }
+
+ template<typename Device>
+ void close(Device& dev)
+ { detail::close_all(t_, dev); }
+
+ template<typename Device>
+ void close(Device& dev, BOOST_IOS::openmode which)
+ { iostreams::close(t_, dev, which); }
+
+ template<typename Locale>
+ void imbue(const Locale& loc)
+ { iostreams::imbue(t_, loc); }
+private:
+ component_type t_;
+};
+
+//------------------Implementation of mode_adapter----------------------------//
+
+template<typename Mode, typename T>
+std::streamsize mode_adapter<Mode, T>::read
+ (char_type* s, std::streamsize n)
+{ return boost::iostreams::read(t_, s, n); }
+
+template<typename Mode, typename T>
+std::streamsize mode_adapter<Mode, T>::write
+ (const char_type* s, std::streamsize n)
+{ return boost::iostreams::write(t_, s, n); }
+
+template<typename Mode, typename T>
+std::streampos mode_adapter<Mode, T>::seek
+ (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{ return boost::iostreams::seek(t_, off, way, which); }
+
+template<typename Mode, typename T>
+void mode_adapter<Mode, T>::close()
+{ detail::close_all(t_); }
+
+template<typename Mode, typename T>
+void mode_adapter<Mode, T>::close(BOOST_IOS::openmode which)
+{ iostreams::close(t_, which); }
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_MODE_ADAPTER_HPP_INCLUDED //-----//
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/non_blocking_adapter.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/non_blocking_adapter.hpp
new file mode 100644
index 0000000000..623cf769d2
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/non_blocking_adapter.hpp
@@ -0,0 +1,62 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED
+
+#include <boost/iostreams/detail/ios.hpp> // streamsize, seekdir, openmode.
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/seek.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/write.hpp>
+
+namespace boost { namespace iostreams {
+
+template<typename Device>
+class non_blocking_adapter {
+public:
+ typedef typename char_type_of<Device>::type char_type;
+ struct category
+ : mode_of<Device>::type, device_tag
+ { };
+ explicit non_blocking_adapter(Device& dev) : device_(dev) { }
+ std::streamsize read(char_type* s, std::streamsize n)
+ {
+ std::streamsize result = 0;
+ while (result < n) {
+ std::streamsize amt = iostreams::read(device_, s, n);
+ if (amt == -1)
+ break;
+ result += amt;
+ }
+ return result != 0 ? result : -1;
+ }
+ std::streamsize write(const char_type* s, std::streamsize n)
+ {
+ std::streamsize result = 0;
+ while (result < n) {
+ std::streamsize amt =
+ iostreams::write(device_, s + result, n - result);
+ // write errors, like EOF on read, need to be handled.
+ if (amt == -1)
+ break;
+ result += amt;
+ }
+ return result;
+ }
+ std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out )
+ { return iostreams::seek(device_, off, way, which); }
+public:
+ non_blocking_adapter& operator=(const non_blocking_adapter&);
+ Device& device_;
+};
+
+} } // End namespace iostreams.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/output_iterator_adapter.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/output_iterator_adapter.hpp
new file mode 100644
index 0000000000..2ed9039c7b
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/output_iterator_adapter.hpp
@@ -0,0 +1,41 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_OUTPUT_ITERATOR_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_OUTPUT_ITERATOR_ADAPTER_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <algorithm> // copy.
+#include <iosfwd> // streamsize.
+#include <boost/iostreams/categories.hpp> // tags.
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Mode, typename Ch, typename OutIt>
+class output_iterator_adapter {
+public:
+ BOOST_STATIC_ASSERT((is_convertible<Mode, output>::value));
+ typedef Ch char_type;
+ typedef sink_tag category;
+ explicit output_iterator_adapter(OutIt out) : out_(out) { }
+ std::streamsize write(const char_type* s, std::streamsize n)
+ {
+ std::copy(s, s + n, out_);
+ return n;
+ }
+private:
+ OutIt out_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_OUTPUT_ITERATOR_ADAPTER_HPP_INCLUDED //-----//
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/range_adapter.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/range_adapter.hpp
new file mode 100644
index 0000000000..b7fe56f7ed
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/adapter/range_adapter.hpp
@@ -0,0 +1,187 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_RANGE_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_RANGE_ADAPTER_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <algorithm> // min.
+#include <boost/assert.hpp>
+#include <cstddef> // ptrdiff_t.
+#include <iosfwd> // streamsize, streamoff.
+#include <boost/detail/iterator.hpp> // boost::iterator_traits.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/enable_if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams { namespace detail {
+
+// Used for simulated tag dispatch.
+template<typename Traversal> struct range_adapter_impl;
+
+//
+// Template name: range_adapter
+// Description: Device based on an instance of boost::iterator_range.
+// Template parameters:
+// Mode - A mode tag.
+// Range - An instance of iterator_range.
+//
+template<typename Mode, typename Range>
+class range_adapter {
+private:
+ typedef typename Range::iterator iterator;
+ typedef boost::detail::iterator_traits<iterator> iter_traits;
+ typedef typename iter_traits::iterator_category iter_cat;
+public:
+ typedef typename Range::value_type char_type;
+ struct category : Mode, device_tag { };
+ typedef typename
+ mpl::if_<
+ is_convertible<
+ iter_cat,
+ std::random_access_iterator_tag
+ >,
+ std::random_access_iterator_tag,
+ std::forward_iterator_tag
+ >::type tag;
+ typedef range_adapter_impl<tag> impl;
+
+ explicit range_adapter(const Range& rng);
+ range_adapter(iterator first, iterator last);
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+private:
+ iterator first_, cur_, last_;
+};
+
+//------------------Implementation of range_adapter---------------------------//
+
+template<typename Mode, typename Range>
+range_adapter<Mode, Range>::range_adapter(const Range& rng)
+ : first_(rng.begin()), cur_(rng.begin()), last_(rng.end()) { }
+
+template<typename Mode, typename Range>
+range_adapter<Mode, Range>::range_adapter(iterator first, iterator last)
+ : first_(first), cur_(first), last_(last) { }
+
+template<typename Mode, typename Range>
+inline std::streamsize range_adapter<Mode, Range>::read
+ (char_type* s, std::streamsize n)
+{ return impl::read(cur_, last_, s, n); }
+
+template<typename Mode, typename Range>
+inline std::streamsize range_adapter<Mode, Range>::write
+ (const char_type* s, std::streamsize n)
+{ return impl::write(cur_, last_, s, n); }
+
+
+template<typename Mode, typename Range>
+std::streampos range_adapter<Mode, Range>::seek
+ (stream_offset off, BOOST_IOS::seekdir way)
+{
+ impl::seek(first_, cur_, last_, off, way);
+ return offset_to_position(cur_ - first_);
+}
+
+//------------------Implementation of range_adapter_impl----------------------//
+
+template<>
+struct range_adapter_impl<std::forward_iterator_tag> {
+ template<typename Iter, typename Ch>
+ static std::streamsize read
+ (Iter& cur, Iter& last, Ch* s,std::streamsize n)
+ {
+ std::streamsize rem = n; // No. of chars remaining.
+ while (cur != last && rem-- > 0) *s++ = *cur++;
+ return n - rem != 0 ? n - rem : -1;
+ }
+
+ template<typename Iter, typename Ch>
+ static std::streamsize write
+ (Iter& cur, Iter& last, const Ch* s, std::streamsize n)
+ {
+ while (cur != last && n-- > 0) *cur++ = *s++;
+ if (cur == last && n > 0)
+ boost::throw_exception(write_area_exhausted());
+ return n;
+ }
+};
+
+template<>
+struct range_adapter_impl<std::random_access_iterator_tag> {
+ template<typename Iter, typename Ch>
+ static std::streamsize read
+ (Iter& cur, Iter& last, Ch* s,std::streamsize n)
+ {
+ std::streamsize result =
+ (std::min)(static_cast<std::streamsize>(last - cur), n);
+ if (result)
+ std::copy(cur, cur + result, s);
+ cur += result;
+ return result != 0 ? result : -1;
+ }
+
+ template<typename Iter, typename Ch>
+ static std::streamsize write
+ (Iter& cur, Iter& last, const Ch* s, std::streamsize n)
+ {
+ std::streamsize count =
+ (std::min)(static_cast<std::streamsize>(last - cur), n);
+ std::copy(s, s + count, cur);
+ cur += count;
+ if (count < n)
+ boost::throw_exception(write_area_exhausted());
+ return n;
+ }
+
+ template<typename Iter>
+ static void seek
+ ( Iter& first, Iter& cur, Iter& last, stream_offset off,
+ BOOST_IOS::seekdir way )
+ {
+ using namespace std;
+ switch (way) {
+ case BOOST_IOS::beg:
+ if (off > last - first || off < 0)
+ boost::throw_exception(bad_seek());
+ cur = first + off;
+ break;
+ case BOOST_IOS::cur:
+ {
+ std::ptrdiff_t newoff = cur - first + off;
+ if (newoff > last - first || newoff < 0)
+ boost::throw_exception(bad_seek());
+ cur += off;
+ break;
+ }
+ case BOOST_IOS::end:
+ if (last - first + off < 0 || off > 0)
+ boost::throw_exception(bad_seek());
+ cur = last + off;
+ break;
+ default:
+ BOOST_ASSERT(0);
+ }
+ }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_RANGE_ADAPTER_HPP_INCLUDED //---------------//
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/bool_trait_def.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/bool_trait_def.hpp
new file mode 100644
index 0000000000..c3fb9d587b
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/bool_trait_def.hpp
@@ -0,0 +1,49 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BOOL_TRAIT_DEF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BOOL_TRAIT_DEF_HPP_INCLUDED
+
+#include <boost/config.hpp> // BOOST_STATIC_CONSTANT.
+#include <boost/iostreams/detail/template_params.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+
+//
+// Macro name: BOOST_IOSTREAMS_BOOL_TRAIT_DEF
+// Description: Used to generate the traits classes is_istream, is_ostream,
+// etc.
+//
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+# define BOOST_IOSTREAMS_TRAIT_NAMESPACE(trait)
+#else
+# define BOOST_IOSTREAMS_TRAIT_NAMESPACE(trait) BOOST_PP_CAT(trait, _impl_)::
+#endif
+#define BOOST_IOSTREAMS_BOOL_TRAIT_DEF(trait, type, arity) \
+ namespace BOOST_PP_CAT(trait, _impl_) { \
+ BOOST_IOSTREAMS_TEMPLATE_PARAMS(arity, T) \
+ type_traits::yes_type helper \
+ (const volatile type BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T)*); \
+ type_traits::no_type helper(...); \
+ template<typename T> \
+ struct impl { \
+ BOOST_STATIC_CONSTANT(bool, value = \
+ (sizeof(BOOST_IOSTREAMS_TRAIT_NAMESPACE(trait) \
+ helper(static_cast<T*>(0))) == \
+ sizeof(type_traits::yes_type))); \
+ }; \
+ } \
+ template<typename T> \
+ struct trait \
+ : mpl::bool_<BOOST_PP_CAT(trait, _impl_)::impl<T>::value> \
+ { BOOST_MPL_AUX_LAMBDA_SUPPORT(1, trait, (T)) }; \
+ /**/
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BOOL_TRAIT_DEF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/broken_overload_resolution/forward.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/broken_overload_resolution/forward.hpp
new file mode 100644
index 0000000000..4444916c3a
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/broken_overload_resolution/forward.hpp
@@ -0,0 +1,31 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+
+#include <boost/config.hpp> // BOOST_STATIC_CONSANT.
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Device, typename U>
+struct forward_impl {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( !is_same< U, Device >::value &&
+ !is_same< U, reference_wrapper<Device> >::value ));
+};
+
+template<typename Device, typename U>
+struct forward
+ : mpl::bool_<forward_impl<Device, U>::value>
+ { };
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp
new file mode 100644
index 0000000000..d5c7107087
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp
@@ -0,0 +1,189 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_BUFFER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_BUFFER_HPP_INCLUDED
+
+#include <boost/iostreams/detail/broken_overload_resolution/forward.hpp>
+#include <boost/throw_exception.hpp>
+
+namespace boost { namespace iostreams {
+
+template< typename T,
+ typename Tr =
+ BOOST_IOSTREAMS_CHAR_TRAITS(
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ ),
+ typename Alloc =
+ std::allocator<
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ >,
+ typename Mode = BOOST_DEDUCED_TYPENAME mode_of<T>::type >
+class stream_buffer
+ : public detail::stream_buffer_traits<T, Tr, Alloc, Mode>::type
+{
+private:
+ BOOST_STATIC_ASSERT((
+ is_convertible<
+ BOOST_DEDUCED_TYPENAME iostreams::category_of<T>::type, Mode
+ >::value
+ ));
+ typedef typename
+ detail::stream_buffer_traits<
+ T, Tr, Alloc, Mode
+ >::type base_type;
+public:
+ typedef typename char_type_of<T>::type char_type;
+ struct category
+ : Mode,
+ closable_tag,
+ streambuf_tag
+ { };
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+ stream_buffer() { }
+ ~stream_buffer()
+ {
+ try {
+ if (this->is_open() && this->auto_close())
+ this->close();
+ } catch (...) { }
+ }
+ template<typename U0>
+ stream_buffer(const U0& u0)
+ {
+ open_impl(detail::forward<T, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ stream_buffer(const U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ stream_buffer(const U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1, u2);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ stream_buffer(U0& u0)
+ {
+ open_impl(detail::forward<T, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ stream_buffer(U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ stream_buffer(U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1, u2);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0>
+ void open(const U0& u0)
+ {
+ open_impl(detail::forward<T, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ void open(const U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ void open(const U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1, u2);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ void open(U0& u0)
+ {
+ open_impl(detail::forward<T, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ void open(U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ void open(U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1, u2);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ T& operator*() { return *this->component(); }
+ T* operator->() { return this->component(); }
+private:
+ template<typename U0>
+ void open_impl(mpl::false_, const U0& u0)
+ {
+ base_type::open(const_cast<U0&>(u0), -1, -1);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ void open_impl(mpl::false_, U0& u0)
+ {
+ base_type::open(detail::wrap(u0), -1, -1);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0>
+ void open_impl(mpl::true_, const U0& u0)
+ {
+ base_type::open(T(const_cast<U0&>(u0)), -1, -1);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ void open_impl(mpl::true_, U0& u0)
+ {
+ base_type::open(T(u0), -1, -1);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0, typename U1>
+ void open_impl(mpl::false_, const U0& u0, const U1& u1)
+ {
+ base_type::open(u0, u1, -1);
+ }
+ template<typename U0, typename U1>
+ void open_impl(mpl::true_, const U0& u0, const U1& u1)
+ {
+ base_type::open(T(const_cast<U0&>(u0), u1), -1, -1);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0, typename U1>
+ void open_impl(mpl::true_, U0& u0, const U1& u1)
+ {
+ base_type::open(T(u0, u1), -1, -1);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0, typename U1, typename U2>
+ void open_impl(mpl::false_, const U0& u0, const U1& u1, const U2& u2)
+ {
+ base_type::open(u0, u1, u2);
+ }
+ template<typename U0, typename U1, typename U2>
+ void open_impl(mpl::true_, const U0& u0, const U1& u1, const U2& u2)
+ {
+ base_type::open(T(const_cast<U0&>(u0), u1, u2), -1, -1);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0, typename U1, typename U2>
+ void open_impl(mpl::true_, U0& u0, const U1& u1, const U2& u2)
+ {
+ base_type::open(T(u0, u1, u2), -1, -1);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ void check_open()
+ {
+ if (this->is_open())
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("already open"));
+ }
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif // BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_BUFFER_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/buffer.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/buffer.hpp
new file mode 100644
index 0000000000..35cb33c700
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/buffer.hpp
@@ -0,0 +1,229 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <algorithm> // swap.
+#include <memory> // allocator.
+#include <boost/config.hpp> // member templates.
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/traits.hpp> // int_type_of.
+#include <boost/iostreams/checked_operations.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+//----------------Buffers-----------------------------------------------------//
+
+//
+// Template name: buffer
+// Description: Character buffer.
+// Template parameters:
+// Ch - The character type.
+// Alloc - The Allocator type.
+//
+template< typename Ch,
+ typename Alloc = std::allocator<Ch> >
+class basic_buffer {
+private:
+#ifndef BOOST_NO_STD_ALLOCATOR
+#if defined(BOOST_NO_CXX11_ALLOCATOR)
+ typedef typename Alloc::template rebind<Ch>::other allocator_type;
+#else
+ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<Ch> allocator_type;
+ typedef std::allocator_traits<allocator_type> allocator_traits;
+#endif
+#else
+ typedef std::allocator<Ch> allocator_type;
+#endif
+ static Ch* allocate(std::streamsize buffer_size);
+public:
+ basic_buffer();
+ basic_buffer(std::streamsize buffer_size);
+ ~basic_buffer();
+ void resize(std::streamsize buffer_size);
+ Ch* begin() const { return buf_; }
+ Ch* end() const { return buf_ + size_; }
+ Ch* data() const { return buf_; }
+ std::streamsize size() const { return size_; }
+ void swap(basic_buffer& rhs);
+private:
+ // Disallow copying and assignment.
+ basic_buffer(const basic_buffer&);
+ basic_buffer& operator=(const basic_buffer&);
+ Ch* buf_;
+ std::streamsize size_;
+};
+
+template<typename Ch, typename Alloc>
+void swap(basic_buffer<Ch, Alloc>& lhs, basic_buffer<Ch, Alloc>& rhs)
+{ lhs.swap(rhs); }
+
+//
+// Template name: buffer
+// Description: Character buffer with two pointers accessible via ptr() and
+// eptr().
+// Template parameters:
+// Ch - A character type.
+//
+template< typename Ch,
+ typename Alloc = std::allocator<Ch> >
+class buffer : public basic_buffer<Ch, Alloc> {
+private:
+ typedef basic_buffer<Ch, Alloc> base;
+public:
+ typedef iostreams::char_traits<Ch> traits_type;
+ using base::resize;
+ using base::data;
+ using base::size;
+ typedef Ch* const const_pointer;
+ buffer(std::streamsize buffer_size);
+ Ch* & ptr() { return ptr_; }
+ const_pointer& ptr() const { return ptr_; }
+ Ch* & eptr() { return eptr_; }
+ const_pointer& eptr() const { return eptr_; }
+ void set(std::streamsize ptr, std::streamsize end);
+ void swap(buffer& rhs);
+
+ // Returns an int_type as a status code.
+ template<typename Source>
+ typename int_type_of<Source>::type fill(Source& src)
+ {
+ using namespace std;
+ std::streamsize keep;
+ if ((keep = static_cast<std::streamsize>(eptr_ - ptr_)) > 0)
+ traits_type::move(
+ this->data(),
+ ptr_,
+ static_cast<size_t>(keep)
+ );
+ set(0, keep);
+ std::streamsize result =
+ iostreams::read(src, this->data() + keep, this->size() - keep);
+ if (result != -1)
+ this->set(0, keep + result);
+ return result == -1 ?
+ traits_type::eof() :
+ result == 0 ?
+ traits_type::would_block() :
+ traits_type::good();
+
+ }
+
+ // Returns true if one or more characters were written.
+ template<typename Sink>
+ bool flush(Sink& dest)
+ {
+ using namespace std;
+ std::streamsize amt = static_cast<std::streamsize>(eptr_ - ptr_);
+ std::streamsize result = iostreams::write_if(dest, ptr_, amt);
+ if (result < amt) {
+ traits_type::move( this->data(),
+ ptr_ + static_cast<size_t>(result),
+ static_cast<size_t>(amt - result) );
+ }
+ this->set(0, amt - result);
+ return result != 0;
+ }
+private:
+ Ch *ptr_, *eptr_;
+};
+
+template<typename Ch, typename Alloc>
+void swap(buffer<Ch, Alloc>& lhs, buffer<Ch, Alloc>& rhs)
+{ lhs.swap(rhs); }
+
+//--------------Implementation of basic_buffer--------------------------------//
+
+template<typename Ch, typename Alloc>
+basic_buffer<Ch, Alloc>::basic_buffer() : buf_(0), size_(0) { }
+
+template<typename Ch, typename Alloc>
+inline Ch* basic_buffer<Ch, Alloc>::allocate(std::streamsize buffer_size)
+{
+#if defined(BOOST_NO_CXX11_ALLOCATOR) || defined(BOOST_NO_STD_ALLOCATOR)
+ return static_cast<Ch*>(allocator_type().allocate(
+ static_cast<BOOST_DEDUCED_TYPENAME Alloc::size_type>(buffer_size), 0));
+#else
+ allocator_type alloc;
+ return static_cast<Ch*>(allocator_traits::allocate(alloc,
+ static_cast<BOOST_DEDUCED_TYPENAME allocator_traits::size_type>(buffer_size)));
+#endif
+}
+
+template<typename Ch, typename Alloc>
+basic_buffer<Ch, Alloc>::basic_buffer(std::streamsize buffer_size)
+ : buf_(allocate(buffer_size)),
+ size_(buffer_size) // Cast for SunPro 5.3.
+ { }
+
+template<typename Ch, typename Alloc>
+inline basic_buffer<Ch, Alloc>::~basic_buffer()
+{
+ if (buf_) {
+#if defined(BOOST_NO_CXX11_ALLOCATOR) || defined(BOOST_NO_STD_ALLOCATOR)
+ allocator_type().deallocate(buf_,
+ static_cast<BOOST_DEDUCED_TYPENAME Alloc::size_type>(size_));
+#else
+ allocator_type alloc;
+ allocator_traits::deallocate(alloc, buf_,
+ static_cast<BOOST_DEDUCED_TYPENAME allocator_traits::size_type>(size_));
+#endif
+ }
+}
+
+template<typename Ch, typename Alloc>
+inline void basic_buffer<Ch, Alloc>::resize(std::streamsize buffer_size)
+{
+ if (size_ != buffer_size) {
+ basic_buffer<Ch, Alloc> temp(buffer_size);
+ std::swap(size_, temp.size_);
+ std::swap(buf_, temp.buf_);
+ }
+}
+
+template<typename Ch, typename Alloc>
+void basic_buffer<Ch, Alloc>::swap(basic_buffer& rhs)
+{
+ std::swap(buf_, rhs.buf_);
+ std::swap(size_, rhs.size_);
+}
+
+//--------------Implementation of buffer--------------------------------------//
+
+template<typename Ch, typename Alloc>
+buffer<Ch, Alloc>::buffer(std::streamsize buffer_size)
+ : basic_buffer<Ch, Alloc>(buffer_size) { }
+
+template<typename Ch, typename Alloc>
+inline void buffer<Ch, Alloc>::set(std::streamsize ptr, std::streamsize end)
+{
+ ptr_ = data() + ptr;
+ eptr_ = data() + end;
+}
+
+template<typename Ch, typename Alloc>
+inline void buffer<Ch, Alloc>::swap(buffer& rhs)
+{
+ base::swap(rhs);
+ std::swap(ptr_, rhs.ptr_);
+ std::swap(eptr_, rhs.eptr_);
+}
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/call_traits.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/call_traits.hpp
new file mode 100644
index 0000000000..be6123737b
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/call_traits.hpp
@@ -0,0 +1,32 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_VALUE_TYPE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_VALUE_TYPE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename T>
+struct param_type {
+ typedef typename mpl::if_<is_std_io<T>, T&, const T&>::type type;
+};
+
+template<typename T>
+struct value_type {
+ typedef typename mpl::if_<is_std_io<T>, T&, T>::type type;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_VALUE_TYPE_HPP_INCLUDED //-----------//
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/char_traits.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/char_traits.hpp
new file mode 100644
index 0000000000..ce3eb6dbe7
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/char_traits.hpp
@@ -0,0 +1,63 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// Provides std::char_traits for libraries without templated streams. Should not
+// be confused with <boost/iostreams/char_traits.hpp>, which defines the
+// template boost::iostreams::char_traits.
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <iosfwd>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <boost/config.hpp> // Make sure size_t is in std.
+# include <cstddef>
+# include <cstring>
+# include <cstdio>
+#endif
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------------------//
+# define BOOST_IOSTREAMS_CHAR_TRAITS(ch) std::char_traits< ch >
+#else
+# define BOOST_IOSTREAMS_CHAR_TRAITS(ch) boost::iostreams::detail::char_traits
+
+namespace boost { namespace iostreams { namespace detail {
+
+struct char_traits {
+ typedef char char_type;
+ typedef int int_type;
+ typedef std::streampos pos_type;
+ typedef std::streamoff off_type;
+
+ // Note: this may not be not conforming, since it treats chars as unsigned,
+ // but is only used to test for equality.
+ static int compare(const char* lhs, const char* rhs, std::size_t n)
+ { return std::strncmp(lhs, rhs, n); }
+ static char* copy(char *dest, const char *src, std::size_t n)
+ { return static_cast<char*>(std::memcpy(dest, src, n)); }
+ static char* move(char *dest, const char *src, std::size_t n)
+ { return static_cast<char*>(std::memmove(dest, src, n)); }
+ static const char* find(const char* s, std::size_t n, const char& c)
+ { return (const char*) (const void*) std::memchr(s, c, n); }
+ static char to_char_type(const int& c) { return c; }
+ static int to_int_type(const char& c) { return c; }
+ static bool eq_int_type(const int& lhs, const int& rhs)
+ { return lhs == rhs; }
+ static int eof() { return EOF; }
+ static int not_eof(const int& c) { return c != EOF ? c : '\n'; }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-----------------------//
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/auto_link.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/auto_link.hpp
new file mode 100644
index 0000000000..07ab23c3c1
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/auto_link.hpp
@@ -0,0 +1,49 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_AUTO_LINK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_AUTO_LINK_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#if defined(BOOST_EXTERNAL_LIB_NAME)
+# if defined(BOOST_MSVC) \
+ || defined(__BORLANDC__) \
+ || (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) \
+ || (defined(__ICL) && defined(_MSC_EXTENSIONS)) \
+ /**/
+# pragma comment(lib, BOOST_EXTERNAL_LIB_NAME)
+# endif
+# undef BOOST_EXTERNAL_LIB_NAME
+#endif
+
+//------------------Enable automatic library variant selection----------------//
+
+#if !defined(BOOST_IOSTREAMS_SOURCE) && \
+ !defined(BOOST_ALL_NO_LIB) && \
+ !defined(BOOST_IOSTREAMS_NO_LIB) \
+ /**/
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it.
+# define BOOST_LIB_NAME boost_iostreams
+
+// If we're importing code from a dll, then tell auto_link.hpp about it.
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+# define BOOST_DYN_LINK
+# endif
+
+// And include the header that does the work.
+# include <boost/config/auto_link.hpp>
+#endif // auto-linking disabled
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_AUTO_LINK_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/bzip2.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/bzip2.hpp
new file mode 100644
index 0000000000..bfcda40560
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/bzip2.hpp
@@ -0,0 +1,48 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BZIP2_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_BZIP2_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#if defined(BOOST_BZIP2_BINARY)
+# if defined(BOOST_MSVC) || \
+ defined(__BORLANDC__) || \
+ (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) || \
+ (defined(__ICL) && defined(_MSC_EXTENSIONS)) \
+ /**/
+
+// Specify the name of the .lib file.
+# pragma comment(lib, BOOST_STRINGIZE(BOOST_BZIP2_BINARY))
+# endif
+#else
+# if !defined(BOOST_IOSTREAMS_SOURCE) && \
+ !defined(BOOST_ALL_NO_LIB) && \
+ !defined(BOOST_IOSTREAMS_NO_LIB) \
+ /**/
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it.
+# define BOOST_LIB_NAME boost_bzip2
+
+// If we're importing code from a dll, then tell auto_link.hpp about it.
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+# define BOOST_DYN_LINK
+# endif
+
+// And include the header that does the work.
+# include <boost/config/auto_link.hpp>
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BZIP2_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/codecvt.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/codecvt.hpp
new file mode 100644
index 0000000000..6519ddcd44
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/codecvt.hpp
@@ -0,0 +1,81 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_CODECVT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_CODECVT_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <cstddef>
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+//------------------Support for codecvt with user-defined state types---------//
+
+#if defined(__MSL_CPP__) || defined(__LIBCOMO__) || \
+ BOOST_WORKAROUND(_STLPORT_VERSION, <= 0x450) || \
+ defined(_LIBCPP_VERSION) \
+ /**/
+# define BOOST_IOSTREAMS_NO_PRIMARY_CODECVT_DEFINITION
+#endif
+
+#if defined(__GLIBCPP__) || defined(__GLIBCXX__) || \
+ BOOST_WORKAROUND(_STLPORT_VERSION, > 0x450) \
+ /**/
+# define BOOST_IOSTREAMS_EMPTY_PRIMARY_CODECVT_DEFINITION
+#endif
+
+//------------------Check for codecvt ctor taking a reference count-----------//
+
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) || \
+ BOOST_WORKAROUND(_STLPORT_VERSION, < 0x461) \
+ /**/
+# define BOOST_IOSTREAMS_NO_CODECVT_CTOR_FROM_SIZE_T
+#endif
+
+//------------------Normalize codecvt::length---------------------------------//
+
+#if !defined(__MSL_CPP__) && !defined(__LIBCOMO__) && \
+ (!defined(BOOST_RWSTD_VER) || BOOST_RWSTD_VER < 0x04010300) && \
+ (!defined(__MACH__) || !defined(__INTEL_COMPILER))
+ /**/
+# define BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER const
+#else
+# define BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER
+#endif
+
+//------------------Check for codecvt::max_length-----------------------------//
+
+#if BOOST_WORKAROUND(_STLPORT_VERSION, < 0x461)
+# define BOOST_IOSTREAMS_NO_CODECVT_MAX_LENGTH
+#endif
+
+//------------------Put mbstate_t and codecvt in std--------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+# include <locale>
+#endif
+
+// From Robert Ramey's version of utf8_codecvt_facet.
+namespace std {
+
+#if defined(__LIBCOMO__)
+ using ::mbstate_t;
+#elif defined(BOOST_DINKUMWARE_STDLIB) && !defined(__BORLANDC__)
+ using ::mbstate_t;
+#elif defined(__SGI_STL_PORT)
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+ using ::codecvt;
+ using ::mbstate_t;
+#endif
+
+} // End namespace std.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_CODECVT_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/disable_warnings.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/disable_warnings.hpp
new file mode 100644
index 0000000000..ef25cdb907
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/disable_warnings.hpp
@@ -0,0 +1,30 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp> // BOOST_WORKAROUND.
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4127) // Conditional expression is constant.
+# pragma warning(disable:4130) // Logical operation on address of string constant.
+# pragma warning(disable:4224) // Parameter previously defined as type.
+# pragma warning(disable:4244) // Conversion: possible loss of data.
+# pragma warning(disable:4512) // Assignment operator could not be generated.
+# pragma warning(disable:4706) // Assignment within conditional expression.
+# if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# pragma warning(disable:6334) // sizeof applied to an expression with an operator.
+# endif
+#else
+# if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# pragma warn -8008 // Condition always true/false.
+# pragma warn -8066 // Unreachable code.
+# pragma warn -8071 // Conversion may lose significant digits.
+# pragma warn -8072 // Suspicious pointer arithmetic.
+# pragma warn -8080 // identifier declared but never used.
+# endif
+#endif
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/dyn_link.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/dyn_link.hpp
new file mode 100644
index 0000000000..cc8c73bd90
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/dyn_link.hpp
@@ -0,0 +1,46 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from http://www.boost.org/more/separate_compilation.html, by
+// John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_DYN_LINK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_DYN_LINK_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+//------------------Enable dynamic linking on windows-------------------------//
+
+#ifdef BOOST_HAS_DECLSPEC
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+# ifdef BOOST_IOSTREAMS_SOURCE
+# define BOOST_IOSTREAMS_DECL __declspec(dllexport)
+# else
+# define BOOST_IOSTREAMS_DECL __declspec(dllimport)
+# endif
+# endif
+//--------------Enable dynamic linking for non-windows---------------------//
+#else // BOOST_HAS_DECLSPEC
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+# ifdef BOOST_IOSTREAMS_SOURCE
+# define BOOST_IOSTREAMS_DECL BOOST_SYMBOL_EXPORT
+# else
+# define BOOST_IOSTREAMS_DECL BOOST_SYMBOL_IMPORT
+# endif
+# endif
+#endif
+
+#ifndef BOOST_IOSTREAMS_DECL
+# define BOOST_IOSTREAMS_DECL
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_DYN_LINK_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/enable_warnings.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/enable_warnings.hpp
new file mode 100644
index 0000000000..5712f36442
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/enable_warnings.hpp
@@ -0,0 +1,18 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#else
+# if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# pragma warn .8008 // Condition always true/false.
+# pragma warn .8066 // Unreachable code.
+# pragma warn .8071 // Conversion may lose significant digits.
+# pragma warn .8072 // Suspicious pointer arithmetic.
+# pragma warn .8080 // identifier declared but never used.
+# endif
+#endif
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/fpos.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/fpos.hpp
new file mode 100644
index 0000000000..a5835421fe
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/fpos.hpp
@@ -0,0 +1,45 @@
+/*
+ * 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.)
+ *
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File: boost/iostreams/detail/execute.hpp
+ * Date: Thu Dec 06 13:21:54 MST 2007
+ * Copyright: 2007-2008 CodeRage, LLC
+ * Author: Jonathan Turkanis
+ * Contact: turkanis at coderage dot com
+ *
+ * Defines the preprocessor symbol BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS for
+ * platforms that use the implementation of std::fpos from the Dinkumware
+ * Standard Library.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_FPOS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_FPOS_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+
+# if (defined(_YVALS) || defined(_CPPLIB_VER)) && !defined(__SGI_STL_PORT) && \
+ !defined(_STLPORT_VERSION) && !defined(__QNX__) && !defined(_VX_CPU) && !defined(__VXWORKS__) \
+ && !((defined(BOOST_MSVC) || defined(BOOST_CLANG)) && _MSVC_STL_VERSION >= 141) \
+ && !defined(_LIBCPP_VERSION)
+ /**/
+
+#include <boost/iostreams/detail/ios.hpp>
+
+# define BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+#if !defined(_FPOSOFF)
+#define BOOST_IOSTREAMS_FPOSOFF(fp) ((long long)(fp))
+#else
+#define BOOST_IOSTREAMS_FPOSOFF(fp) _FPOSOFF(fp)
+#endif
+
+# endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_FPOS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/gcc.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/gcc.hpp
new file mode 100644
index 0000000000..ff6892a5e5
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/gcc.hpp
@@ -0,0 +1,27 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_GCC_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_GCC_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_INTEL.
+
+#if defined(__GNUC__) && !defined(BOOST_INTEL)
+# define BOOST_IOSTREAMS_GCC (__GNUC__ * 100 + __GNUC_MINOR__)
+# define BOOST_IOSTREAMS_GCC_WORKAROUND_GUARD 1
+#else
+# define BOOST_IOSTREAMS_GCC_WORKAROUND_GUARD 0
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_GCC_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/limits.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/limits.hpp
new file mode 100644
index 0000000000..155d6b0a69
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/limits.hpp
@@ -0,0 +1,19 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_LIMITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_LIMITS_HPP_INCLUDED
+
+#ifndef BOOST_IOSTREAMS_MAX_FORWARDING_ARITY
+# define BOOST_IOSTREAMS_MAX_FORWARDING_ARITY 3
+#endif
+
+#ifndef BOOST_IOSTREAMS_MAX_EXECUTE_ARITY
+# define BOOST_IOSTREAMS_MAX_EXECUTE_ARITY 5
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_LIMITS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/overload_resolution.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/overload_resolution.hpp
new file mode 100644
index 0000000000..63d9e2830d
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/overload_resolution.hpp
@@ -0,0 +1,30 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/gcc.hpp>
+
+#if !defined(BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION)
+# if BOOST_WORKAROUND(__MWERKS__, <= 0x3003) || \
+ BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ /**/
+# define BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/rtl.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/rtl.hpp
new file mode 100644
index 0000000000..d9fbe5080d
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/rtl.hpp
@@ -0,0 +1,72 @@
+/*
+ * 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.)
+ *
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * Defines preprocessor symbols expanding to the names of functions in the
+ * C runtime library used to access file descriptors and to the type used
+ * to store file offsets for seeking.
+ *
+ * File: boost/iostreams/detail/config/rtl.hpp
+ * Date: Wed Dec 26 11:58:11 MST 2007
+ *
+ * Copyright: 2007-2008 CodeRage, LLC
+ * Author: Jonathan Turkanis
+ * Contact: turkanis at coderage dot com
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_RTL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_RTL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+
+// Handle open, close, read, and write
+#ifdef __BORLANDC__
+# define BOOST_IOSTREAMS_RTL(x) BOOST_JOIN(_rtl_, x)
+#elif defined BOOST_IOSTREAMS_WINDOWS
+# define BOOST_IOSTREAMS_RTL(x) BOOST_JOIN(_, x)
+#else
+# define BOOST_IOSTREAMS_RTL(x) ::x // Distinguish from member function named x
+#endif
+#define BOOST_IOSTREAMS_FD_OPEN BOOST_IOSTREAMS_RTL(open)
+#define BOOST_IOSTREAMS_FD_CLOSE BOOST_IOSTREAMS_RTL(close)
+#define BOOST_IOSTREAMS_FD_READ BOOST_IOSTREAMS_RTL(read)
+#define BOOST_IOSTREAMS_FD_WRITE BOOST_IOSTREAMS_RTL(write)
+
+// Handle lseek, off_t, ftruncate, and stat
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# if defined(BOOST_MSVC) || defined(__MSVCRT__) // MSVC, MinGW
+# define BOOST_IOSTREAMS_FD_SEEK _lseeki64
+# define BOOST_IOSTREAMS_FD_OFFSET __int64
+# else // Borland, Metrowerks, ...
+# define BOOST_IOSTREAMS_FD_SEEK lseek
+# define BOOST_IOSTREAMS_FD_OFFSET long
+# endif
+#else // Non-windows
+# if defined(_LARGEFILE64_SOURCE) && !defined(__APPLE__) && \
+ (!defined(_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64) || \
+ defined(_AIX) && !defined(_LARGE_FILES) || \
+ defined(BOOST_IOSTREAMS_HAS_LARGE_FILE_EXTENSIONS)
+ /**/
+
+ /* Systems with transitional extensions for large file support */
+
+# define BOOST_IOSTREAMS_FD_SEEK lseek64
+# define BOOST_IOSTREAMS_FD_TRUNCATE ftruncate64
+# define BOOST_IOSTREAMS_FD_MMAP mmap64
+# define BOOST_IOSTREAMS_FD_STAT stat64
+# define BOOST_IOSTREAMS_FD_FSTAT fstat64
+# define BOOST_IOSTREAMS_FD_OFFSET off64_t
+# else
+# define BOOST_IOSTREAMS_FD_SEEK lseek
+# define BOOST_IOSTREAMS_FD_TRUNCATE ftruncate
+# define BOOST_IOSTREAMS_FD_MMAP mmap
+# define BOOST_IOSTREAMS_FD_STAT stat
+# define BOOST_IOSTREAMS_FD_FSTAT fstat
+# define BOOST_IOSTREAMS_FD_OFFSET off_t
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_RTL_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/unreachable_return.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/unreachable_return.hpp
new file mode 100644
index 0000000000..65fba609de
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/unreachable_return.hpp
@@ -0,0 +1,24 @@
+// (C) Copyright 2010 Daniel James
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_UNREACHABLE_RETURN_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_UNREACHABLE_RETURN_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+
+#if defined(_MSC_VER) || defined(__GNUC__)
+#define BOOST_IOSTREAMS_UNREACHABLE_RETURN(x) \
+ BOOST_UNREACHABLE_RETURN(x)
+#else
+#define BOOST_IOSTREAMS_UNREACHABLE_RETURN(x) \
+ return x;
+#endif
+
+#endif
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/wide_streams.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/wide_streams.hpp
new file mode 100644
index 0000000000..af3d716d49
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/wide_streams.hpp
@@ -0,0 +1,55 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from http://www.boost.org/more/separate_compilation.html, by
+// John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WIDE_STREAMS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_WIDE_STREAMS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <cstddef>
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+//------------------Templated stream support----------------------------------//
+
+// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for cray patch.
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# if defined(__STL_CONFIG_H) && \
+ !defined (__STL_USE_NEW_IOSTREAMS) && !defined(__crayx1) \
+ /**/
+# define BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# endif
+#endif // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+
+//------------------Wide stream support---------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# if defined(BOOST_IOSTREAMS_NO_STREAM_TEMPLATES) || \
+ defined (BOOST_NO_STD_WSTREAMBUF) && \
+ ( !defined(__MSL_CPP__) || defined(_MSL_NO_WCHART_CPP_SUPPORT) ) \
+ /**/
+# define BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# endif
+#endif // #ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+
+//------------------Locale support--------------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+# if defined(BOOST_NO_STD_LOCALE) || \
+ defined(__CYGWIN__) && \
+ ( !defined(__MSL_CPP__) || defined(_MSL_NO_WCHART_CPP_SUPPORT) ) \
+ /**/
+# define BOOST_IOSTREAMS_NO_LOCALE
+# endif
+#endif // #ifndef BOOST_IOSTREAMS_NO_LOCALE
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WIDE_STREAMS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/windows_posix.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/windows_posix.hpp
new file mode 100644
index 0000000000..4e73c50d0d
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/windows_posix.hpp
@@ -0,0 +1,25 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// (C) Copyright 2002, 2003 Beman Dawes Boost.Filesystem
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WINDOWS_POSIX_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_WINDOWS_POSIX_HPP_INCLUDED
+
+//------------------From boost/libs/filesystem/src/path_posix_windows.cpp-----//
+
+// BOOST_IOSTREAMS_POSIX or BOOST_IOSTREAMS_WINDOWS specify which API to use.
+#if !defined( BOOST_IOSTREAMS_WINDOWS ) && !defined( BOOST_IOSTREAMS_POSIX )
+# if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \
+ !defined(__CYGWIN__) \
+ /**/
+# define BOOST_IOSTREAMS_WINDOWS
+# else
+# define BOOST_IOSTREAMS_POSIX
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WINDOWS_POSIX_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/zlib.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/zlib.hpp
new file mode 100644
index 0000000000..017dd0c182
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/config/zlib.hpp
@@ -0,0 +1,50 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_ZLIB_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_ZLIB_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_STRINGIZE.
+
+#if defined(BOOST_ZLIB_BINARY)
+# if defined(BOOST_MSVC) || \
+ defined(__BORLANDC__) || \
+ (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) || \
+ (defined(__ICL) && defined(_MSC_EXTENSIONS)) \
+ /**/
+
+// Specify the name of the .lib file.
+# pragma comment(lib, BOOST_STRINGIZE(BOOST_ZLIB_BINARY))
+# endif
+#else
+# if !defined(BOOST_IOSTREAMS_SOURCE) && \
+ !defined(BOOST_ALL_NO_LIB) && \
+ !defined(BOOST_IOSTREAMS_NO_LIB) \
+ /**/
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it.
+# define BOOST_LIB_NAME boost_zlib
+
+// If we're importing code from a dll, then tell auto_link.hpp about it.
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+# define BOOST_DYN_LINK
+# endif
+
+// And include the header that does the work.
+# include <boost/config/auto_link.hpp>
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_ZLIB_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/default_arg.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/default_arg.hpp
new file mode 100644
index 0000000000..c443e9872a
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/default_arg.hpp
@@ -0,0 +1,21 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DEFAULT_ARG_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DEFAULT_ARG_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// Obsolete. Remove.
+#define BOOST_IOSTREAMS_DEFAULT_ARG(arg) arg
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DEFAULT_ARG_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/dispatch.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/dispatch.hpp
new file mode 100644
index 0000000000..35cf244141
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/dispatch.hpp
@@ -0,0 +1,41 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DISPATCH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DISPATCH_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_DEDUCED_TYPENAME.
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/traits.hpp> // category_of.
+#include <boost/mpl/void.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace iostreams {namespace detail {
+
+template< typename T, typename Tag1, typename Tag2,
+ typename Tag3 = mpl::void_, typename Tag4 = mpl::void_,
+ typename Tag5 = mpl::void_, typename Tag6 = mpl::void_,
+ typename Category =
+ BOOST_DEDUCED_TYPENAME category_of<T>::type >
+struct dispatch
+ : iostreams::select< // Disambiguation for Tru64.
+ is_convertible<Category, Tag1>, Tag1,
+ is_convertible<Category, Tag2>, Tag2,
+ is_convertible<Category, Tag3>, Tag3,
+ is_convertible<Category, Tag4>, Tag4,
+ is_convertible<Category, Tag5>, Tag5,
+ is_convertible<Category, Tag6>, Tag6
+ >
+ { };
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DISPATCH_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/double_object.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/double_object.hpp
new file mode 100644
index 0000000000..efb3b78601
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/double_object.hpp
@@ -0,0 +1,114 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definition of the class template
+// boost::iostreams::detail::double_object, which is similar to compressed pair
+// except that both members of the pair have the same type, and
+// compression occurs only if requested using a boolean template
+// parameter.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DOUBLE_OBJECT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DOUBLE_OBJECT_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <algorithm> // swap.
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/if.hpp>
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+# include <msl_utility>
+#else
+# include <boost/call_traits.hpp>
+#endif
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename T>
+class single_object_holder {
+public:
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+ typedef Metrowerks::call_traits<T> traits_type;
+#else
+ typedef boost::call_traits<T> traits_type;
+#endif
+ typedef typename traits_type::param_type param_type;
+ typedef typename traits_type::reference reference;
+ typedef typename traits_type::const_reference const_reference;
+ single_object_holder() { }
+ single_object_holder(param_type t) : first_(t) { }
+ reference first() { return first_; }
+ const_reference first() const { return first_; }
+ reference second() { return first_; }
+ const_reference second() const { return first_; }
+ void swap(single_object_holder& o)
+ { std::swap(first_, o.first_); }
+private:
+ T first_;
+};
+
+template<typename T>
+struct double_object_holder {
+public:
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+ typedef Metrowerks::call_traits<T> traits_type;
+#else
+ typedef boost::call_traits<T> traits_type;
+#endif
+ typedef typename traits_type::param_type param_type;
+ typedef typename traits_type::reference reference;
+ typedef typename traits_type::const_reference const_reference;
+ double_object_holder() { }
+ double_object_holder(param_type t1, param_type t2)
+ : first_(t1), second_(t2) { }
+ reference first() { return first_; }
+ const_reference first() const { return first_; }
+ reference second() { return second_; }
+ const_reference second() const { return second_; }
+ void swap(double_object_holder& d)
+ {
+ std::swap(first_, d.first_);
+ std::swap(second_, d.second_);
+ }
+private:
+ T first_, second_;
+};
+
+template<typename T, typename IsDouble>
+class double_object
+ : public mpl::if_<
+ IsDouble,
+ double_object_holder<T>,
+ single_object_holder<T>
+ >::type
+{
+private:
+ typedef typename
+ mpl::if_<
+ IsDouble,
+ double_object_holder<T>,
+ single_object_holder<T>
+ >::type base_type;
+public:
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+ typedef Metrowerks::call_traits<T> traits_type;
+#else
+ typedef boost::call_traits<T> traits_type;
+#endif
+ typedef typename traits_type::param_type param_type;
+ typedef typename traits_type::reference reference;
+ typedef typename traits_type::const_reference const_reference;
+ double_object() : base_type() {}
+ double_object(param_type t1, param_type t2)
+ : base_type(t1, t2) { }
+ bool is_double() const { return IsDouble::value; }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DOUBLE_OBJECT_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/enable_if_stream.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/enable_if_stream.hpp
new file mode 100644
index 0000000000..826e44d2a5
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/enable_if_stream.hpp
@@ -0,0 +1,32 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_ENABLE_IF_STREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_ENABLE_IF_STREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_NO_SFINAE.
+#include <boost/utility/enable_if.hpp>
+#include <boost/iostreams/traits_fwd.hpp> // is_std_io.
+
+#if !defined(BOOST_NO_SFINAE) && \
+ !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+# define BOOST_IOSTREAMS_ENABLE_IF_STREAM(T) \
+ , typename boost::enable_if< boost::iostreams::is_std_io<T> >::type* = 0 \
+ /**/
+# define BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) \
+ , typename boost::disable_if< boost::iostreams::is_std_io<T> >::type* = 0 \
+ /**/
+#else
+# define BOOST_IOSTREAMS_ENABLE_IF_STREAM(T)
+# define BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_ENABLE_IF_STREAM_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/error.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/error.hpp
new file mode 100644
index 0000000000..85cbd98fe2
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/error.hpp
@@ -0,0 +1,45 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_ERROR_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_ERROR_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/ios.hpp> // failure.
+
+namespace boost { namespace iostreams { namespace detail {
+
+inline BOOST_IOSTREAMS_FAILURE cant_read()
+{ return BOOST_IOSTREAMS_FAILURE("no read access"); }
+
+inline BOOST_IOSTREAMS_FAILURE cant_write()
+{ return BOOST_IOSTREAMS_FAILURE("no write access"); }
+
+inline BOOST_IOSTREAMS_FAILURE cant_seek()
+{ return BOOST_IOSTREAMS_FAILURE("no random access"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_read()
+{ return BOOST_IOSTREAMS_FAILURE("bad read"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_putback()
+{ return BOOST_IOSTREAMS_FAILURE("putback buffer full"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_write()
+{ return BOOST_IOSTREAMS_FAILURE("bad write"); }
+
+inline BOOST_IOSTREAMS_FAILURE write_area_exhausted()
+{ return BOOST_IOSTREAMS_FAILURE("write area exhausted"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_seek()
+{ return BOOST_IOSTREAMS_FAILURE("bad seek"); }
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_ERROR_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/execute.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/execute.hpp
new file mode 100644
index 0000000000..28e4217234
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/execute.hpp
@@ -0,0 +1,135 @@
+/*
+ * 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.)
+ *
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File: boost/iostreams/detail/execute.hpp
+ * Date: Thu Dec 06 13:21:54 MST 2007
+ * Copyright: 2007-2008 CodeRage, LLC
+ * Author: Jonathan Turkanis
+ * Contact: turkanis at coderage dot com
+
+ * Defines the overloaded function template
+ * boost::iostreams::detail::execute_all() and the function template
+ * boost::iostreams::detail::execute_foreach().
+ *
+ * execute_all() invokes a primary operation and performs a sequence of cleanup
+ * operations, returning the result of the primary operation if no exceptions
+ * are thrown. If one of the operations throws an exception, performs the
+ * remaining operations and rethrows the initial exception.
+ *
+ * execute_foreach() is a variant of std::foreach which invokes a function
+ * object for each item in a sequence, catching all execptions and rethrowing
+ * the first caught exception after the function object has been invoked on each
+ * item.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_EXECUTE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_EXECUTE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/limits.hpp> // MAX_EXECUTE_ARITY
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/utility/result_of.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+// Helper for class template execute_traits.
+template<typename Result>
+struct execute_traits_impl {
+ typedef Result result_type;
+ template<typename Op>
+ static Result execute(Op op) { return op(); }
+};
+
+// Specialization for void return. For simplicity, execute() returns int
+// for operations returning void. This could be avoided with additional work.
+template<>
+struct execute_traits_impl<void> {
+ typedef int result_type;
+ template<typename Op>
+ static int execute(Op op) { op(); return 0; }
+};
+
+// Deduces the result type of Op and allows uniform treatment of operations
+// returning void and non-void.
+template< typename Op,
+ typename Result = // VC6.5 workaround.
+ #if !defined(BOOST_NO_RESULT_OF) && \
+ !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+ typename boost::result_of<Op()>::type
+ #else
+ BOOST_DEDUCED_TYPENAME Op::result_type
+ #endif
+ >
+struct execute_traits
+ : execute_traits_impl<Result>
+ { };
+
+// Implementation with no cleanup operations.
+template<typename Op>
+typename execute_traits<Op>::result_type
+execute_all(Op op)
+{
+ return execute_traits<Op>::execute(op);
+}
+
+// Implementation with one or more cleanup operations
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template<typename Op, BOOST_PP_ENUM_PARAMS(n, typename C)> \
+ typename execute_traits<Op>::result_type \
+ execute_all(Op op, BOOST_PP_ENUM_BINARY_PARAMS(n, C, c)) \
+ { \
+ typename execute_traits<Op>::result_type r; \
+ try { \
+ r = boost::iostreams::detail::execute_all( \
+ op BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(n), c) \
+ ); \
+ } catch (...) { \
+ try { \
+ BOOST_PP_CAT(c, BOOST_PP_DEC(n))(); \
+ } catch (...) { } \
+ throw; \
+ } \
+ BOOST_PP_CAT(c, BOOST_PP_DEC(n))(); \
+ return r; \
+ } \
+ /**/
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_IOSTREAMS_MAX_EXECUTE_ARITY)
+#include BOOST_PP_LOCAL_ITERATE()
+#undef BOOST_PP_LOCAL_MACRO
+
+template<class InIt, class Op>
+Op execute_foreach(InIt first, InIt last, Op op)
+{
+ if (first == last)
+ return op;
+ try {
+ op(*first);
+ } catch (...) {
+ try {
+ ++first;
+ boost::iostreams::detail::execute_foreach(first, last, op);
+ } catch (...) { }
+ throw;
+ }
+ ++first;
+ return boost::iostreams::detail::execute_foreach(first, last, op);
+}
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_EXECUTE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/file_handle.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/file_handle.hpp
new file mode 100644
index 0000000000..d797efb29a
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/file_handle.hpp
@@ -0,0 +1,32 @@
+/*
+ * 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.)
+ *
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * File: boost/iostreams/detail/file_handle.hpp
+ * Date: Sun Jun 22 14:23:12 MDT 2008
+ * Copyright: 2008 CodeRage, LLC
+ * Author: Jonathan Turkanis
+ * Contact: turkanis at coderage dot com
+ *
+ * Defines the type boost::iostreams::detail::file_handle, representing an
+ * operating system file handle.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_FILE_HANDLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_FILE_HANDLE_HPP_INCLUDED
+
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ typedef void* file_handle; // A.k.a. HANDLE
+#else
+ typedef int file_handle;
+#endif
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_FILE_HANDLE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/forward.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/forward.hpp
new file mode 100644
index 0000000000..f5ed4f85dc
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/forward.hpp
@@ -0,0 +1,113 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_FORWARD_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_FORWARD_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC, BOOST_NO_SFINAE
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/limits.hpp>
+#include <boost/iostreams/detail/push_params.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+//------Macros for defining forwarding constructors and open overloads--------//
+
+//
+// Macro: BOOST_IOSTREAMS_FORWARD(class, impl, device, params, args)
+// Description: Defines constructors and overloads of 'open' which construct
+// a device using the specified argument list and pass it to the specified
+// helper function
+// class - The class name
+// impl - The helper function
+// device - The device type
+// params - The list of formal parameters trailing the device parameter in
+// the helper function's signature
+// params - The list of arguments passed to the helper function, following the
+// device argument
+//
+#define BOOST_IOSTREAMS_FORWARD(class, impl, device, params, args) \
+ class(const device& t params()) \
+ { this->impl(::boost::iostreams::detail::wrap(t) args()); } \
+ class(device& t params()) \
+ { this->impl(::boost::iostreams::detail::wrap(t) args()); } \
+ class(const ::boost::reference_wrapper<device>& ref params()) \
+ { this->impl(ref args()); } \
+ void open(const device& t params()) \
+ { this->impl(::boost::iostreams::detail::wrap(t) args()); } \
+ void open(device& t params()) \
+ { this->impl(::boost::iostreams::detail::wrap(t) args()); } \
+ void open(const ::boost::reference_wrapper<device>& ref params()) \
+ { this->impl(ref args()); } \
+ BOOST_PP_REPEAT_FROM_TO( \
+ 1, BOOST_PP_INC(BOOST_IOSTREAMS_MAX_FORWARDING_ARITY), \
+ BOOST_IOSTREAMS_FORWARDING_CTOR, (class, impl, device) \
+ ) \
+ BOOST_PP_REPEAT_FROM_TO( \
+ 1, BOOST_PP_INC(BOOST_IOSTREAMS_MAX_FORWARDING_ARITY), \
+ BOOST_IOSTREAMS_FORWARDING_FN, (class, impl, device) \
+ ) \
+ /**/
+#define BOOST_IOSTREAMS_FORWARDING_CTOR(z, n, tuple) \
+ template<BOOST_PP_ENUM_PARAMS_Z(z, n, typename U)> \
+ BOOST_PP_TUPLE_ELEM(3, 0, tuple) \
+ (BOOST_PP_ENUM_BINARY_PARAMS_Z(z, n, const U, &u) \
+ BOOST_IOSTREAMS_DISABLE_IF_SAME(U0, BOOST_PP_TUPLE_ELEM(3, 2, tuple))) \
+ { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+ ( BOOST_PP_TUPLE_ELEM(3, 2, tuple) \
+ (BOOST_PP_ENUM_PARAMS_Z(z, n, u)) ); } \
+ template< typename U100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), typename U) > \
+ BOOST_PP_TUPLE_ELEM(3, 0, tuple) \
+ ( U100& u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_DEC(n), const U, &u) \
+ BOOST_IOSTREAMS_DISABLE_IF_SAME(U100, BOOST_PP_TUPLE_ELEM(3, 2, tuple))) \
+ { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+ ( BOOST_PP_TUPLE_ELEM(3, 2, tuple) \
+ ( u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), u)) ); } \
+ /**/
+#define BOOST_IOSTREAMS_FORWARDING_FN(z, n, tuple) \
+ template<BOOST_PP_ENUM_PARAMS_Z(z, n, typename U)> \
+ void open(BOOST_PP_ENUM_BINARY_PARAMS_Z(z, n, const U, &u) \
+ BOOST_IOSTREAMS_DISABLE_IF_SAME(U0, BOOST_PP_TUPLE_ELEM(3, 2, tuple))) \
+ { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+ ( BOOST_PP_TUPLE_ELEM(3, 2, tuple) \
+ (BOOST_PP_ENUM_PARAMS_Z(z, n, u)) ); } \
+ template< typename U100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), typename U) > \
+ void open \
+ ( U100& u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_DEC(n), const U, &u) \
+ BOOST_IOSTREAMS_DISABLE_IF_SAME(U100, BOOST_PP_TUPLE_ELEM(3, 2, tuple))) \
+ { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+ ( u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), u) ); } \
+ /**/
+
+// Disable forwarding constructors if first parameter type is the same
+// as the device type
+#if !defined(BOOST_NO_SFINAE) && \
+ !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+# define BOOST_IOSTREAMS_DISABLE_IF_SAME(device, param) \
+ , typename boost::disable_if< boost::is_same<device, param> >::type* = 0 \
+ /**/
+#else
+# define BOOST_IOSTREAMS_DISABLE_IF_SAME(device, param)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_FORWARD_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/fstream.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/fstream.hpp
new file mode 100644
index 0000000000..848258d97c
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/fstream.hpp
@@ -0,0 +1,33 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_FSTREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_FSTREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <fstream>
+#else
+# include <fstream.h>
+#endif
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_BASIC_IFSTREAM(Ch, Tr) std::basic_ifstream<Ch, Tr>
+# define BOOST_IOSTREAMS_BASIC_OFSTREAM(Ch, Tr) std::basic_ofstream<Ch, Tr>
+# define BOOST_IOSTREAMS_BASIC_FSTREAM(Ch, Tr) std::basic_fstream<Ch, Tr>
+# define BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) std::basic_filebuf<Ch>
+#else
+# define BOOST_IOSTREAMS_BASIC_IFSTREAM(Ch, Tr) std::ifstream
+# define BOOST_IOSTREAMS_BASIC_OFSTREAM(Ch, Tr) std::ofstream
+# define BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) std::filebuf
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_FSTREAM_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/functional.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/functional.hpp
new file mode 100644
index 0000000000..7f345f5a86
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/functional.hpp
@@ -0,0 +1,192 @@
+/*
+ * 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.)
+ *
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File: boost/iostreams/detail/functional.hpp
+ * Date: Sun Dec 09 05:38:03 MST 2007
+ * Copyright: 2007-2008 CodeRage, LLC
+ * Author: Jonathan Turkanis
+ * Contact: turkanis at coderage dot com
+
+ * Defines several function objects and object generators for use with
+ * execute_all()
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_FUNCTIONAL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_FUNCTIONAL_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/close.hpp>
+#include <boost/iostreams/detail/ios.hpp> // BOOST_IOS
+
+namespace boost { namespace iostreams { namespace detail {
+
+ // Function objects and object generators for invoking
+ // boost::iostreams::close
+
+template<typename T>
+class device_close_operation {
+public:
+ typedef void result_type;
+ device_close_operation(T& t, BOOST_IOS::openmode which)
+ : t_(t), which_(which)
+ { }
+ void operator()() const { boost::iostreams::close(t_, which_); }
+private:
+ BOOST_DELETED_FUNCTION(device_close_operation& operator=(const device_close_operation&));
+ T& t_;
+ BOOST_IOS::openmode which_;
+};
+
+template<typename T, typename Sink>
+class filter_close_operation {
+public:
+ typedef void result_type;
+ filter_close_operation(T& t, Sink& snk, BOOST_IOS::openmode which)
+ : t_(t), snk_(snk), which_(which)
+ { }
+ void operator()() const { boost::iostreams::close(t_, snk_, which_); }
+private:
+ BOOST_DELETED_FUNCTION(filter_close_operation& operator=(const filter_close_operation&));
+ T& t_;
+ Sink& snk_;
+ BOOST_IOS::openmode which_;
+};
+
+template<typename T>
+device_close_operation<T>
+call_close(T& t, BOOST_IOS::openmode which)
+{ return device_close_operation<T>(t, which); }
+
+template<typename T, typename Sink>
+filter_close_operation<T, Sink>
+call_close(T& t, Sink& snk, BOOST_IOS::openmode which)
+{ return filter_close_operation<T, Sink>(t, snk, which); }
+
+ // Function objects and object generators for invoking
+ // boost::iostreams::detail::close_all
+
+template<typename T>
+class device_close_all_operation {
+public:
+ typedef void result_type;
+ device_close_all_operation(T& t) : t_(t) { }
+ device_close_all_operation(const device_close_all_operation& ohter) = default;
+ void operator()() const { detail::close_all(t_); }
+private:
+ BOOST_DELETED_FUNCTION(device_close_all_operation& operator=(const device_close_all_operation&));
+ T& t_;
+};
+
+template<typename T, typename Sink>
+class filter_close_all_operation {
+public:
+ typedef void result_type;
+ filter_close_all_operation(T& t, Sink& snk) : t_(t), snk_(snk) { }
+ void operator()() const { detail::close_all(t_, snk_); }
+private:
+ BOOST_DELETED_FUNCTION(filter_close_all_operation& operator=(const filter_close_all_operation&));
+ T& t_;
+ Sink& snk_;
+};
+
+template<typename T>
+device_close_all_operation<T> call_close_all(T& t)
+{ return device_close_all_operation<T>(t); }
+
+template<typename T, typename Sink>
+filter_close_all_operation<T, Sink>
+call_close_all(T& t, Sink& snk)
+{ return filter_close_all_operation<T, Sink>(t, snk); }
+
+ // Function object and object generator for invoking a
+ // member function void close(std::ios_base::openmode)
+
+template<typename T>
+class member_close_operation {
+public:
+ typedef void result_type;
+ member_close_operation(T& t, BOOST_IOS::openmode which)
+ : t_(t), which_(which)
+ { }
+ void operator()() const { t_.close(which_); }
+ member_close_operation(member_close_operation const& other) = default;
+private:
+ BOOST_DELETED_FUNCTION(member_close_operation& operator=(const member_close_operation&));
+ T& t_;
+ BOOST_IOS::openmode which_;
+};
+
+template<typename T>
+member_close_operation<T> call_member_close(T& t, BOOST_IOS::openmode which)
+{ return member_close_operation<T>(t, which); }
+
+ // Function object and object generator for invoking a
+ // member function void reset()
+
+template<typename T>
+class reset_operation {
+public:
+ reset_operation(T& t) : t_(t) { }
+ reset_operation(reset_operation const& other) = default;
+ void operator()() const { t_.reset(); }
+private:
+ BOOST_DELETED_FUNCTION(reset_operation& operator=(const reset_operation&));
+ T& t_;
+};
+
+template<typename T>
+reset_operation<T> call_reset(T& t) { return reset_operation<T>(t); }
+
+ // Function object and object generator for clearing a flag
+
+template<typename T>
+class clear_flags_operation {
+public:
+ typedef void result_type;
+ clear_flags_operation(T& t) : t_(t) { }
+ void operator()() const { t_ = 0; }
+private:
+ BOOST_DELETED_FUNCTION(clear_flags_operation& operator=(const clear_flags_operation&));
+ T& t_;
+};
+
+template<typename T>
+clear_flags_operation<T> clear_flags(T& t)
+{ return clear_flags_operation<T>(t); }
+
+ // Function object and generator for flushing a buffer
+
+// Function object for use with execute_all()
+template<typename Buffer, typename Device>
+class flush_buffer_operation {
+public:
+ typedef void result_type;
+ flush_buffer_operation(Buffer& buf, Device& dev, bool flush)
+ : buf_(buf), dev_(dev), flush_(flush)
+ { }
+ void operator()() const
+ {
+ if (flush_)
+ buf_.flush(dev_);
+ }
+private:
+ BOOST_DELETED_FUNCTION(flush_buffer_operation& operator=(const flush_buffer_operation&));
+ Buffer& buf_;
+ Device& dev_;
+ bool flush_;
+};
+
+template<typename Buffer, typename Device>
+flush_buffer_operation<Buffer, Device>
+flush_buffer(Buffer& buf, Device& dev, bool flush)
+{ return flush_buffer_operation<Buffer, Device>(buf, dev, flush); }
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_FUNCTIONAL_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/ios.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/ios.hpp
new file mode 100644
index 0000000000..b123ddeb58
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/ios.hpp
@@ -0,0 +1,65 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IOS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IOS_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# if !BOOST_WORKAROUND(__MWERKS__, <= 0x3003)
+# include <ios>
+# else
+# include <istream>
+# include <ostream>
+# endif
+#else
+# include <exception>
+# include <iosfwd>
+#endif
+
+namespace boost { namespace iostreams { namespace detail {
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------------------//
+# define BOOST_IOSTREAMS_BASIC_IOS(ch, tr) std::basic_ios< ch, tr >
+# if !BOOST_WORKAROUND(__MWERKS__, <= 0x3003) && \
+ !BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ /**/
+
+#define BOOST_IOS std::ios
+#define BOOST_IOSTREAMS_FAILURE std::ios::failure
+
+# else
+
+#define BOOST_IOS std::ios_base
+#define BOOST_IOSTREAMS_FAILURE std::ios_base::failure
+
+# endif
+#else // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-----------------------//
+
+#define BOOST_IOS std::ios
+#define BOOST_IOSTREAMS_BASIC_IOS(ch, tr) std::ios
+#define BOOST_IOSTREAMS_FAILURE boost::iostreams::detail::failure
+
+class failure : std::exception {
+public:
+ explicit failure(const std::string& what_arg) : what_(what_arg) { }
+ const char* what() const { return what_.c_str(); }
+private:
+ std::string what_;
+};
+
+#endif // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //----------------------//
+
+} } } // End namespace failure, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_IOS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/iostream.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/iostream.hpp
new file mode 100644
index 0000000000..1e19f08278
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/iostream.hpp
@@ -0,0 +1,34 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IOSTREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IOSTREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <istream>
+# include <ostream>
+#else
+# include <iostream.h>
+#endif
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_BASIC_ISTREAM(ch, tr) std::basic_istream< ch, tr >
+# define BOOST_IOSTREAMS_BASIC_OSTREAM(ch, tr) std::basic_ostream< ch, tr >
+# define BOOST_IOSTREAMS_BASIC_IOSTREAM(ch, tr) std::basic_iostream< ch, tr >
+#else
+# define BOOST_IOSTREAMS_BASIC_STREAMBUF(ch, tr) std::streambuf
+# define BOOST_IOSTREAMS_BASIC_ISTREAM(ch, tr) std::istream
+# define BOOST_IOSTREAMS_BASIC_OSTREAM(ch, tr) std::ostream
+# define BOOST_IOSTREAMS_BASIC_IOSTREAM(ch, tr) std::iostream
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_IOSTREAM_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/is_dereferenceable.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/is_dereferenceable.hpp
new file mode 100644
index 0000000000..06744abbdf
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/is_dereferenceable.hpp
@@ -0,0 +1,80 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// (C) Copyright David Abrahams 2004.
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
+
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+// is_dereferenceable<T> metafunction
+//
+// Requires: Given x of type T&, if the expression *x is well-formed
+// it must have complete type; otherwise, it must neither be ambiguous
+// nor violate access.
+
+// This namespace ensures that ADL doesn't mess things up.
+namespace is_dereferenceable_
+{
+ // a type returned from operator* when no increment is found in the
+ // type's own namespace
+ struct tag {};
+
+ // any soaks up implicit conversions and makes the following
+ // operator* less-preferred than any other such operator that
+ // might be found via ADL.
+ struct any { template <class T> any(T const&); };
+
+ // This is a last-resort operator* for when none other is found
+ tag operator*(any const&);
+
+# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202))
+# define BOOST_comma(a,b) (a)
+# else
+ // In case an operator++ is found that returns void, we'll use ++x,0
+ tag operator,(tag,int);
+# define BOOST_comma(a,b) (a,b)
+# endif
+
+ // two check overloads help us identify which operator++ was picked
+ char (& check_increment(tag) )[2];
+
+ template <class T>
+ char check_increment(T const&);
+
+ template <class T>
+ struct impl
+ {
+ static typename boost::remove_cv<T>::type& x;
+
+ BOOST_STATIC_CONSTANT(
+ bool
+ , value = sizeof(is_dereferenceable_::check_increment(BOOST_comma(*x,0))) == 1
+ );
+ };
+}
+
+# undef BOOST_comma
+
+template<typename T>
+struct is_dereferenceable
+ : public ::boost::integral_constant<bool, is_dereferenceable_::impl<T>::value >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_dereferenceable,(T))
+};
+
+} }
+
+
+} // End namespaces detail, iostreams, boost.
+
+#endif // BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/is_iterator_range.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/is_iterator_range.hpp
new file mode 100644
index 0000000000..39d845f4a3
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/is_iterator_range.hpp
@@ -0,0 +1,34 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IS_ITERATOR_RANGE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IS_ITERATOR_RANGE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/bool_trait_def.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost {
+
+// We avoid dependence on Boost.Range by using a forward declaration.
+template<typename Iterator>
+class iterator_range;
+
+namespace iostreams {
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_iterator_range, boost::iterator_range, 1)
+
+} // End namespace iostreams.
+
+} // End namespace boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_IS_ITERATOR_RANGE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/optional.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/optional.hpp
new file mode 100644
index 0000000000..867dfbda69
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/optional.hpp
@@ -0,0 +1,114 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Recent changes to Boost.Optional involving assigment broke Boost.Iostreams,
+// in a way which could be remedied only by relying on the deprecated reset
+// functions; with VC6, even reset didn't work. Until this problem is
+// understood, Iostreams will use a private version of optional with a smart
+// pointer interface.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_OPTIONAL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_OPTIONAL_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/aligned_storage.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+// Taken from <boost/optional.hpp>.
+template<class T>
+class aligned_storage
+{
+ // Borland ICEs if unnamed unions are used for this!
+ union dummy_u
+ {
+ char data[ sizeof(T) ];
+ BOOST_DEDUCED_TYPENAME type_with_alignment<
+ ::boost::alignment_of<T>::value >::type aligner_;
+ } dummy_ ;
+
+ public:
+
+ void const* address() const { return &dummy_.data[0]; }
+ void * address() { return &dummy_.data[0]; }
+};
+
+template<typename T>
+class optional {
+public:
+ typedef T element_type;
+ optional() : initialized_(false) { }
+ optional(const T& t) : initialized_(false) { reset(t); }
+ ~optional() { reset(); }
+ T& operator*()
+ {
+ BOOST_ASSERT(initialized_);
+ return *static_cast<T*>(address());
+ }
+ const T& operator*() const
+ {
+ BOOST_ASSERT(initialized_);
+ return *static_cast<const T*>(address());
+ }
+ T* operator->()
+ {
+ BOOST_ASSERT(initialized_);
+ return static_cast<T*>(address());
+ }
+ const T* operator->() const
+ {
+ BOOST_ASSERT(initialized_);
+ return static_cast<const T*>(address());
+ }
+ T* get()
+ {
+ BOOST_ASSERT(initialized_);
+ return static_cast<T*>(address());
+ }
+ const T* get() const
+ {
+ BOOST_ASSERT(initialized_);
+ return static_cast<const T*>(address());
+ }
+ void reset()
+ {
+ if (initialized_) {
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) || \
+ BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
+ /**/
+ T* t = static_cast<T*>(address());
+ t->~T();
+ #else
+ static_cast<T*>(address())->T::~T();
+ #endif
+ initialized_ = false;
+ }
+ }
+ void reset(const T& t)
+ {
+ reset();
+ new (address()) T(t);
+ initialized_ = true;
+ }
+private:
+ optional(const optional&);
+ optional& operator=(const optional&);
+ void* address() { return &storage_; }
+ const void* address() const { return &storage_; }
+ aligned_storage<T> storage_;
+ bool initialized_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_OPTIONAL_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/path.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/path.hpp
new file mode 100644
index 0000000000..a5d1ad330f
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/path.hpp
@@ -0,0 +1,214 @@
+/*
+ * 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.)
+ *
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * File: boost/iostreams/detail/path.hpp
+ * Date: Sat Jun 21 21:24:05 MDT 2008
+ * Copyright: 2008 CodeRage, LLC
+ * Author: Jonathan Turkanis
+ * Contact: turkanis at coderage dot com
+ *
+ * Defines the class boost::iostreams::detail::path, for storing a
+ * a std::string or std::wstring.
+ *
+ * This class allows interoperability with Boost.Filesystem without
+ * creating a dependence on Boost.Filesystem headers or implementation.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_PATH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_PATH_HPP_INCLUDED
+
+#include <cstring>
+#include <string>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# include <cwchar>
+#endif
+#include <boost/static_assert.hpp>
+#include <boost/type.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS //------------------------------------//
+
+class path {
+ template<typename T, typename V>
+ struct sfinae
+ {
+ typedef V type;
+ };
+public:
+
+ // Default constructor
+ path() : narrow_(), wide_(), is_wide_(false) { }
+
+ // Constructor taking a std::string
+ path(const std::string& p) : narrow_(p), wide_(), is_wide_(false) { }
+
+ // Constructor taking a C-style string
+ path(const char* p) : narrow_(p), wide_(), is_wide_(false) { }
+
+ // Constructor taking a boost::filesystem2::path or
+ // boost::filesystem2::wpath
+ template<typename Path>
+ explicit path(const Path& p, typename Path::external_string_type* = 0)
+ {
+ init(p.external_file_string());
+ }
+
+ // Constructor taking a boost::filesystem3::path (boost filesystem v3)
+ template<typename Path>
+ explicit path(const Path& p, typename Path::codecvt_type* = 0)
+ {
+ init(p.native());
+ }
+
+ // Copy constructor
+ path(const path& p)
+ : narrow_(p.narrow_), wide_(p.wide_), is_wide_(p.is_wide_)
+ { }
+
+ // Assignment operator taking another path
+ path& operator=(const path& p)
+ {
+ narrow_ = p.narrow_;
+ wide_ = p.wide_;
+ is_wide_ = p.is_wide_;
+ return *this;
+ }
+
+ // Assignment operator taking a std::string
+ path& operator=(const std::string& p)
+ {
+ narrow_ = p;
+ wide_.clear();
+ is_wide_ = false;
+ return *this;
+ }
+
+ // Assignment operator taking a C-style string
+ path& operator=(const char* p)
+ {
+ narrow_.assign(p);
+ wide_.clear();
+ is_wide_ = false;
+ return *this;
+ }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
+ // Assignment operator taking a boost::filesystem2::path or
+ // boost::filesystem2::wpath
+ // (not on Visual C++ 7.1/8.0, as it seems to have problems with
+ // SFINAE functions with the same parameters, doesn't seem
+ // worth working around).
+ template<typename Path>
+ typename sfinae<typename Path::external_string_type, path&>::type
+ operator=(const Path& p)
+ {
+ init(p.external_file_string());
+ return *this;
+ }
+#endif
+
+ // Assignment operator taking a boost::filesystem3::path
+ template<typename Path>
+ typename sfinae<typename Path::codecvt_type, path&>::type
+ operator=(const Path& p)
+ {
+ init(p.native());
+ return *this;
+ }
+
+ bool is_wide() const { return is_wide_; }
+
+ // Returns a representation of the underlying path as a std::string
+ // Requires: is_wide() returns false
+ const char* c_str() const { return narrow_.c_str(); }
+
+ // Returns a representation of the underlying path as a std::wstring
+ // Requires: is_wide() returns true
+ const wchar_t* c_wstr() const { return wide_.c_str(); }
+private:
+
+ // For wide-character paths, use a boost::filesystem::wpath instead of a
+ // std::wstring
+ path(const std::wstring&);
+ path& operator=(const std::wstring&);
+
+ void init(std::string const& file_path)
+ {
+ narrow_ = file_path;
+ wide_.clear();
+ is_wide_ = false;
+ }
+
+ void init(std::wstring const& file_path)
+ {
+ narrow_.clear();
+ wide_ = file_path;
+ is_wide_ = true;
+ }
+
+ std::string narrow_;
+ std::wstring wide_;
+ bool is_wide_;
+};
+
+inline bool operator==(const path& lhs, const path& rhs)
+{
+ return lhs.is_wide() ?
+ rhs.is_wide() && std::wcscmp(lhs.c_wstr(), rhs.c_wstr()) == 0 :
+ !rhs.is_wide() && std::strcmp(lhs.c_str(), rhs.c_str()) == 0;
+}
+
+#else // #ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS //---------------------------//
+
+class path {
+public:
+ path() { }
+ path(const std::string& p) : path_(p) { }
+ path(const char* p) : path_(p) { }
+ template<typename Path>
+ path(const Path& p) : path_(p.external_file_string()) { }
+ path(const path& p) : path_(p.path_) { }
+ path& operator=(const path& other)
+ {
+ path_ = other.path_;
+ return *this;
+ }
+ path& operator=(const std::string& p)
+ {
+ path_ = p;
+ return *this;
+ }
+ path& operator=(const char* p)
+ {
+ path_ = p;
+ return *this;
+ }
+ template<typename Path>
+ path& operator=(const Path& p)
+ {
+ path_ = p.external_file_string();
+ return *this;
+ }
+ bool is_wide() const { return false; }
+ const char* c_str() const { return path_.c_str(); }
+ const wchar_t* c_wstr() const { return 0; }
+private:
+ std::string path_;
+};
+
+inline bool operator==(const path& lhs, const path& rhs)
+{
+ return std::strcmp(lhs.c_str(), rhs.c_str()) == 0 ;
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS //--------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_PATH_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/push.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/push.hpp
new file mode 100644
index 0000000000..1a9393cb02
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/push.hpp
@@ -0,0 +1,153 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_PUSH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_PUSH_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/adapter/range_adapter.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/detail/push_params.hpp>
+#include <boost/iostreams/detail/resolve.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(name, mode, ch, helper).
+// Description: Defines overloads with name 'name' which forward to a function
+// 'helper' which takes a filter or devide by const reference.
+//
+#define BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(name, mode, ch, helper) \
+ BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, 0, ?) \
+ /**/
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_PUSH(name, mode, ch, helper).
+// Description: Defines constructors which forward to a function
+// 'helper' which takes a filter or device by const reference.
+//
+#define BOOST_IOSTREAMS_DEFINE_PUSH(name, mode, ch, helper) \
+ BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, 1, void) \
+ /**/
+
+//--------------------Definition of BOOST_IOSTREAMS_DEFINE_PUSH_IMPL----------//
+
+#define BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, arg, helper, has_return) \
+ this->helper( ::boost::iostreams::detail::resolve<mode, ch>(arg) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); \
+ /**/
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ /**/
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, has_return, result) \
+ template<typename CharType, typename TraitsType> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(::std::basic_streambuf<CharType, TraitsType>& sb BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, sb, helper, has_return); } \
+ template<typename CharType, typename TraitsType> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(::std::basic_istream<CharType, TraitsType>& is BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_STATIC_ASSERT((!is_convertible<mode, output>::value)); \
+ BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, is, helper, has_return); } \
+ template<typename CharType, typename TraitsType> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(::std::basic_ostream<CharType, TraitsType>& os BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_STATIC_ASSERT((!is_convertible<mode, input>::value)); \
+ BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, os, helper, has_return); } \
+ template<typename CharType, typename TraitsType> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(::std::basic_iostream<CharType, TraitsType>& io BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, io, helper, has_return); } \
+ template<typename Iter> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(const iterator_range<Iter>& rng BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_PP_EXPR_IF(has_return, return) \
+ this->helper( ::boost::iostreams::detail::range_adapter< \
+ mode, iterator_range<Iter> \
+ >(rng) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+ template<typename Pipeline, typename Concept> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(const ::boost::iostreams::pipeline<Pipeline, Concept>& p) \
+ { p.push(*this); } \
+ template<typename T> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(const T& t BOOST_IOSTREAMS_PUSH_PARAMS() BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)) \
+ { this->helper( ::boost::iostreams::detail::resolve<mode, ch>(t) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+ /**/
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, has_return, result) \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(::std::streambuf& sb BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, sb, helper, has_return); } \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(::std::istream& is BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_STATIC_ASSERT((!is_convertible<mode, output>::value)); \
+ BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, is, helper, has_return); } \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(::std::ostream& os BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_STATIC_ASSERT((!is_convertible<mode, input>::value)); \
+ BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, os, helper, has_return); } \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(::std::iostream& io BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, io, helper, has_return); } \
+ template<typename Iter> \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(const iterator_range<Iter>& rng BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_PP_EXPR_IF(has_return, return) \
+ this->helper( ::boost::iostreams::detail::range_adapter< \
+ mode, iterator_range<Iter> \
+ >(rng) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+ template<typename Pipeline, typename Concept> \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(const ::boost::iostreams::pipeline<Pipeline, Concept>& p) \
+ { p.push(*this); } \
+ template<typename T> \
+ BOOST_PP_EXPR_IF(has_return, result) \
+ name(const T& t BOOST_IOSTREAMS_PUSH_PARAMS() BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)) \
+ { this->helper( ::boost::iostreams::detail::resolve<mode, ch>(t) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+ /**/
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+#else // #if VC6, VC7.0, Borland 5.x
+# define BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, has_return, result) \
+ template<typename T> \
+ void BOOST_PP_CAT(name, _msvc_impl) \
+ ( ::boost::mpl::true_, const T& t BOOST_IOSTREAMS_PUSH_PARAMS() ) \
+ { t.push(*this); } \
+ template<typename T> \
+ void BOOST_PP_CAT(name, _msvc_impl) \
+ ( ::boost::mpl::false_, const T& t BOOST_IOSTREAMS_PUSH_PARAMS() ) \
+ { this->helper( ::boost::iostreams::detail::resolve<mode, ch>(t) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+ template<typename T> \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(const T& t BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { \
+ this->BOOST_PP_CAT(name, _msvc_impl) \
+ ( ::boost::iostreams::detail::is_pipeline<T>(), \
+ t BOOST_IOSTREAMS_PUSH_ARGS() ); \
+ } \
+ /**/
+#endif // #if VC6, VC7.0, Borland 5.x
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_PUSH_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/push_params.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/push_params.hpp
new file mode 100644
index 0000000000..8d8e5d74b3
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/push_params.hpp
@@ -0,0 +1,21 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_PUSH_PARAMS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_PUSH_PARAMS_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#define BOOST_IOSTREAMS_PUSH_PARAMS() \
+ , std::streamsize buffer_size = -1 , std::streamsize pback_size = -1 \
+ /**/
+
+#define BOOST_IOSTREAMS_PUSH_ARGS() , buffer_size, pback_size
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_PUSH_PARAMS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/resolve.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/resolve.hpp
new file mode 100644
index 0000000000..2d480950e1
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/resolve.hpp
@@ -0,0 +1,230 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_RESOLVE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_RESOLVE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // partial spec, put size_t in std.
+#include <cstddef> // std::size_t.
+#include <boost/detail/is_incrementable.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/adapter/mode_adapter.hpp>
+#include <boost/iostreams/detail/adapter/output_iterator_adapter.hpp>
+#include <boost/iostreams/detail/adapter/range_adapter.hpp>
+#include <boost/iostreams/detail/config/gcc.hpp>
+#include <boost/iostreams/detail/config/overload_resolution.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/detail/is_dereferenceable.hpp>
+#include <boost/iostreams/detail/is_iterator_range.hpp>
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp> // true_.
+#include <boost/mpl/if.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/type_traits/is_array.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1 C4224.
+
+namespace boost { namespace iostreams { namespace detail {
+
+//------------------Definition of resolve-------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //-------------------------//
+
+template<typename Mode, typename Ch, typename T>
+struct resolve_traits {
+ typedef typename
+ mpl::if_<
+ boost::detail::is_incrementable<T>,
+ output_iterator_adapter<Mode, Ch, T>,
+ const T&
+ >::type type;
+};
+
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-------------------------------//
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve( const T& t
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)
+
+ // I suspect that the compilers which require this workaround may
+ // be correct, but I'm not sure why :(
+ #if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) ||\
+ BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) || \
+ BOOST_WORKAROUND(BOOST_IOSTREAMS_GCC, BOOST_TESTED_AT(400)) ||\
+ BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(1110))
+ /**/
+ , typename disable_if< is_iterator_range<T> >::type* = 0
+ #endif
+ )
+{
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(t);
+}
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_streambuf<Ch, Tr> >
+resolve(std::basic_streambuf<Ch, Tr>& sb)
+{ return mode_adapter< Mode, std::basic_streambuf<Ch, Tr> >(wrap(sb)); }
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_istream<Ch, Tr> >
+resolve(std::basic_istream<Ch, Tr>& is)
+{ return mode_adapter< Mode, std::basic_istream<Ch, Tr> >(wrap(is)); }
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_ostream<Ch, Tr> >
+resolve(std::basic_ostream<Ch, Tr>& os)
+{ return mode_adapter< Mode, std::basic_ostream<Ch, Tr> >(wrap(os)); }
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_iostream<Ch, Tr> >
+resolve(std::basic_iostream<Ch, Tr>& io)
+{ return mode_adapter< Mode, std::basic_iostream<Ch, Tr> >(wrap(io)); }
+
+template<typename Mode, typename Ch, std::size_t N>
+array_adapter<Mode, Ch> resolve(Ch (&array)[N])
+{ return array_adapter<Mode, Ch>(array); }
+
+template<typename Mode, typename Ch, typename Iter>
+range_adapter< Mode, boost::iterator_range<Iter> >
+resolve(const boost::iterator_range<Iter>& rng)
+{ return range_adapter< Mode, boost::iterator_range<Iter> >(rng); }
+
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //---------------------//
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve( const T& t
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)
+ #if defined(__GNUC__)
+ , typename disable_if< is_iterator_range<T> >::type* = 0
+ #endif
+ )
+{
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(t);
+}
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::streambuf>
+resolve(std::streambuf& sb)
+{ return mode_adapter<Mode, std::streambuf>(wrap(sb)); }
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::istream>
+resolve(std::istream& is)
+{ return mode_adapter<Mode, std::istream>(wrap(is)); }
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::ostream>
+resolve(std::ostream& os)
+{ return mode_adapter<Mode, std::ostream>(wrap(os)); }
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::iostream>
+resolve(std::iostream& io)
+{ return mode_adapter<Mode, std::iostream>(wrap(io)); }
+
+template<typename Mode, typename Ch, std::size_t N>
+array_adapter<Mode, Ch> resolve(Ch (&array)[N])
+{ return array_adapter<Mode, Ch>(array); }
+
+template<typename Mode, typename Ch, typename Iter>
+range_adapter< Mode, boost::iterator_range<Iter> >
+resolve(const boost::iterator_range<Iter>& rng)
+{ return range_adapter< Mode, boost::iterator_range<Iter> >(rng); }
+
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------//
+#else // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //----------------//
+
+template<typename Mode, typename Ch, typename T>
+struct resolve_traits {
+ // Note: test for is_iterator_range must come before test for output
+ // iterator.
+ typedef typename
+ iostreams::select< // Disambiguation for Tru64.
+ is_std_io<T>,
+ mode_adapter<Mode, T>,
+ is_iterator_range<T>,
+ range_adapter<Mode, T>,
+ is_dereferenceable<T>,
+ output_iterator_adapter<Mode, Ch, T>,
+ is_array<T>,
+ array_adapter<Mode, T>,
+ else_,
+ #if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+ const T&
+ #else
+ T
+ #endif
+ >::type type;
+};
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(const T& t, mpl::true_)
+{ // Bad overload resolution.
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(wrap(const_cast<T&>(t)));
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(const T& t, mpl::false_)
+{
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(t);
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(const T& t BOOST_IOSTREAMS_DISABLE_IF_STREAM(T))
+{ return resolve<Mode, Ch>(t, is_std_io<T>()); }
+
+# if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \
+ !defined(__GNUC__) // ---------------------------------------------------//
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(T& t, mpl::true_)
+{
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(wrap(t));
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(T& t, mpl::false_)
+{
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(t);
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(T& t BOOST_IOSTREAMS_ENABLE_IF_STREAM(T))
+{ return resolve<Mode, Ch>(t, is_std_io<T>()); }
+
+# endif // Borland 5.x or GCC //--------------------------------//
+#endif // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //---------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // VC7.1 4224.
+
+#endif // BOOST_IOSTREAMS_DETAIL_RESOLVE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/select.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/select.hpp
new file mode 100644
index 0000000000..16c5973ad1
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/select.hpp
@@ -0,0 +1,86 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the metafunction select, which mimics the effect of a chain of
+// nested mpl if_'s.
+//
+// -----------------------------------------------------------------------------
+//
+// Usage:
+//
+// typedef typename select<
+// case1, type1,
+// case2, type2,
+// ...
+// true_, typen
+// >::type selection;
+//
+// Here case1, case2, ... are models of MPL::IntegralConstant with value type
+// bool, and n <= 12.
+
+#ifndef BOOST_IOSTREAMS_SELECT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SELECT_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/void.hpp>
+
+namespace boost { namespace iostreams {
+
+typedef mpl::true_ else_;
+
+template< typename Case1 = mpl::true_,
+ typename Type1 = mpl::void_,
+ typename Case2 = mpl::true_,
+ typename Type2 = mpl::void_,
+ typename Case3 = mpl::true_,
+ typename Type3 = mpl::void_,
+ typename Case4 = mpl::true_,
+ typename Type4 = mpl::void_,
+ typename Case5 = mpl::true_,
+ typename Type5 = mpl::void_,
+ typename Case6 = mpl::true_,
+ typename Type6 = mpl::void_,
+ typename Case7 = mpl::true_,
+ typename Type7 = mpl::void_,
+ typename Case8 = mpl::true_,
+ typename Type8 = mpl::void_,
+ typename Case9 = mpl::true_,
+ typename Type9 = mpl::void_,
+ typename Case10 = mpl::true_,
+ typename Type10 = mpl::void_,
+ typename Case11 = mpl::true_,
+ typename Type11 = mpl::void_,
+ typename Case12 = mpl::true_,
+ typename Type12 = mpl::void_ >
+struct select {
+ typedef typename
+ mpl::eval_if<
+ Case1, mpl::identity<Type1>, mpl::eval_if<
+ Case2, mpl::identity<Type2>, mpl::eval_if<
+ Case3, mpl::identity<Type3>, mpl::eval_if<
+ Case4, mpl::identity<Type4>, mpl::eval_if<
+ Case5, mpl::identity<Type5>, mpl::eval_if<
+ Case6, mpl::identity<Type6>, mpl::eval_if<
+ Case7, mpl::identity<Type7>, mpl::eval_if<
+ Case8, mpl::identity<Type8>, mpl::eval_if<
+ Case9, mpl::identity<Type9>, mpl::eval_if<
+ Case10, mpl::identity<Type10>, mpl::eval_if<
+ Case11, mpl::identity<Type11>, mpl::if_<
+ Case12, Type12, mpl::void_ > > > > > > > > > > >
+ >::type type;
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_SELECT_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/select_by_size.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/select_by_size.hpp
new file mode 100644
index 0000000000..e08ca3458b
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/select_by_size.hpp
@@ -0,0 +1,161 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+//
+// Intended as an alternative to type_traits::yes_type and type_traits::no_type.
+// Provides an arbitrary number of types (case_<0>, case_<1>, ...) for
+// determining the results of overload resultion using 'sizeof', plus a uniform
+// means of using the result. yes_type and no_type are typedefs for case_<1>
+// and case_<0>. A single case with negative argument, case_<-1>, is also
+// provided, for convenience.
+//
+// This header may be included any number of times, with
+// BOOST_SELECT_BY_SIZE_MAX_CASE defined to be the largest N such that case_<N>
+// is needed for a particular application. It defaults to 20.
+//
+// This header depends only on Boost.Config and Boost.Preprocessor. Dependence
+// on Type Traits or MPL was intentionally avoided, to leave open the
+// possibility that select_by_size could be used by these libraries.
+//
+// Example usage:
+//
+// #define BOOST_SELECT_BY_SIZE_MAX_CASE 7 // (Needed when default was 2)
+// #include <boost/utility/select_by_size.hpp>
+//
+// using namespace boost::utility;
+//
+// case_<0> helper(bool);
+// case_<1> helper(int);
+// case_<2> helper(unsigned);
+// case_<3> helper(long);
+// case_<4> helper(unsigned long);
+// case_<5> helper(float);
+// case_<6> helper(double);
+// case_<7> helper(const char*);
+//
+// struct test {
+// static const int value =
+// select_by_size< sizeof(helper(9876UL)) >::value;
+// BOOST_STATIC_ASSERT(value == 4);
+// };
+//
+// For compilers with integral constant expression problems, e.g. Borland 5.x,
+// one can also write
+//
+// struct test {
+// BOOST_SELECT_BY_SIZE(int, value, helper(9876UL));
+// };
+//
+// to define a static integral constant 'value' equal to
+//
+// select_by_size< sizeof(helper(9876UL)) >::value.
+//
+
+// Include guards surround all contents of this header except for explicit
+// specializations of select_by_size for case_<N> with N > 2.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_SELECT_BY_SIZE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_SELECT_BY_SIZE_HPP_INCLUDED
+
+// The lowest N for which select_by_size< sizeof(case_<N>) > has not been
+// specialized.
+#define SELECT_BY_SIZE_MAX_SPECIALIZED 20
+
+#include <boost/config.hpp> // BOOST_STATIC_CONSTANT.
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+
+/* Alternative implementation using max_align.
+
+#include <boost/type_traits/alignment_of.hpp>
+#include <boost/type_traits/type_with_alignment.hpp>
+
+namespace boost { namespace utility {
+
+template<int N>
+struct case_ { char c[(N + 1) * alignment_of<detail::max_align>::value]; };
+
+template<unsigned Size>
+struct select_by_size {
+ BOOST_STATIC_CONSTANT(int, value =
+ (Size / alignment_of<detail::max_align>::value - 1));
+};
+
+} } // End namespaces utility, boost.
+
+*/ // End alternate implementation.
+
+namespace boost { namespace iostreams { namespace detail {
+
+//--------------Definition of case_-------------------------------------------//
+
+template<int N> struct case_ { char c1; case_<N - 1> c2; };
+template<> struct case_<-1> { char c; };
+typedef case_<true> yes_type;
+typedef case_<false> no_type;
+
+//--------------Declaration of select_by_size---------------------------------//
+
+template<unsigned Size> struct select_by_size;
+
+} } } // End namespaces detail, iostreams, boost.
+
+//--------------Definition of SELECT_BY_SIZE_SPEC-----------------------------//
+
+// Sepecializes select_by_size for sizeof(case<n-1>). The decrement is used
+// here because the preprocessor library doesn't handle negative integers.
+#define SELECT_BY_SIZE_SPEC(n) \
+ namespace boost { namespace iostreams { namespace detail { \
+ static const int BOOST_PP_CAT(sizeof_case_, n) = sizeof(case_<n - 1>); \
+ template<> \
+ struct select_by_size< BOOST_PP_CAT(sizeof_case_, n) > { \
+ struct type { BOOST_STATIC_CONSTANT(int, value = n - 1); }; \
+ BOOST_STATIC_CONSTANT(int, value = type::value); \
+ }; \
+ } } } \
+ /**/
+
+//--------------Default specializations of select_by_size---------------------//
+
+#define BOOST_PP_LOCAL_MACRO(n) SELECT_BY_SIZE_SPEC(n)
+#define BOOST_PP_LOCAL_LIMITS (0, 20)
+#include BOOST_PP_LOCAL_ITERATE()
+#undef BOOST_PP_LOCAL_MACRO
+
+//--------------Definition of SELECT_BY_SIZE----------------------------------//
+
+#define BOOST_SELECT_BY_SIZE(type_, name, expr) \
+ BOOST_STATIC_CONSTANT( \
+ unsigned, \
+ BOOST_PP_CAT(boost_select_by_size_temp_, name) = sizeof(expr) \
+ ); \
+ BOOST_STATIC_CONSTANT( \
+ type_, \
+ name = \
+ ( ::boost::iostreams::detail::select_by_size< \
+ BOOST_PP_CAT(boost_select_by_size_temp_, name) \
+ >::value ) \
+ ) \
+ /**/
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_SELECT_BY_SIZE_HPP_INCLUDED
+
+//----------Specializations of SELECT_BY_SIZE (outside main inclued guards)---//
+
+#if defined(BOOST_SELECT_BY_SIZE_MAX_CASE) && \
+ BOOST_SELECT_BY_SIZE_MAX_CASE > SELECT_BY_SIZE_MAX_SPECIALIZED
+
+#define BOOST_PP_LOCAL_MACRO(n) SELECT_BY_SIZE_SPEC(n)
+#define BOOST_PP_LOCAL_LIMITS \
+ (SELECT_BY_SIZE_MAX_SPECIALIZED, BOOST_SELECT_BY_SIZE_MAX_CASE) \
+ /**/
+#include BOOST_PP_LOCAL_ITERATE()
+#undef BOOST_PP_LOCAL_MACRO
+#undef SELECT_BY_SIZE_MAX_SPECIALIZED
+#define SELECT_BY_SIZE_MAX_SPECIALIZED BOOST_SELECT_BY_SIZE_MAX_CASE
+
+#endif
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf.hpp
new file mode 100644
index 0000000000..f2e8081b20
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf.hpp
@@ -0,0 +1,34 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <streambuf>
+#else
+# include <streambuf.h>
+#endif
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_BASIC_STREAMBUF(ch, tr) std::basic_streambuf< ch, tr >
+# define BOOST_IOSTREAMS_PUBSYNC pubsync
+# define BOOST_IOSTREAMS_PUBSEEKOFF pubseekoff
+# define BOOST_IOSTREAMS_PUBSEEKPOS pubseekpos
+#else
+# define BOOST_IOSTREAMS_BASIC_STREAMBUF(ch, tr) std::streambuf
+# define BOOST_IOSTREAMS_PUBSYNC sync
+# define BOOST_IOSTREAMS_PUBSEEKOFF seekoff
+# define BOOST_IOSTREAMS_PUBSEEKPOS seekpos
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_STREAMBUF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/chainbuf.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/chainbuf.hpp
new file mode 100644
index 0000000000..c3714fe041
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/chainbuf.hpp
@@ -0,0 +1,113 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHAINBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHAINBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC, template friends.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/chain.hpp>
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/streambuf/linked_streambuf.hpp>
+#include <boost/iostreams/detail/translate_int_type.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/noncopyable.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+//--------------Definition of chainbuf----------------------------------------//
+
+//
+// Template name: chainbuf.
+// Description: Stream buffer which operates by delegating to the first
+// linked_streambuf in a chain.
+// Template parameters:
+// Chain - The chain type.
+//
+template<typename Chain, typename Mode, typename Access>
+class chainbuf
+ : public BOOST_IOSTREAMS_BASIC_STREAMBUF(
+ typename Chain::char_type,
+ typename Chain::traits_type
+ ),
+ public access_control<typename Chain::client_type, Access>,
+ private noncopyable
+{
+private:
+ typedef access_control<chain_client<Chain>, Access> client_type;
+public:
+ typedef typename Chain::char_type char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(typename Chain::traits_type)
+protected:
+ typedef linked_streambuf<char_type, traits_type> delegate_type;
+ chainbuf() { client_type::set_chain(&chain_); }
+ int_type underflow()
+ { sentry t(this); return translate(delegate().underflow()); }
+ int_type pbackfail(int_type c)
+ { sentry t(this); return translate(delegate().pbackfail(c)); }
+ std::streamsize xsgetn(char_type* s, std::streamsize n)
+ { sentry t(this); return delegate().xsgetn(s, n); }
+ int_type overflow(int_type c)
+ { sentry t(this); return translate(delegate().overflow(c)); }
+ std::streamsize xsputn(const char_type* s, std::streamsize n)
+ { sentry t(this); return delegate().xsputn(s, n); }
+ int sync() { sentry t(this); return delegate().sync(); }
+ pos_type seekoff( off_type off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out )
+ { sentry t(this); return delegate().seekoff(off, way, which); }
+ pos_type seekpos( pos_type sp,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out )
+ { sentry t(this); return delegate().seekpos(sp, which); }
+protected:
+ typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(
+ typename Chain::char_type,
+ typename Chain::traits_type
+ ) base_type;
+private:
+
+ // Translate from std int_type to chain's int_type.
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) std_traits;
+ typedef typename Chain::traits_type chain_traits;
+ static typename chain_traits::int_type
+ translate(typename std_traits::int_type c)
+ { return translate_int_type<std_traits, chain_traits>(c); }
+
+ delegate_type& delegate()
+ { return static_cast<delegate_type&>(chain_.front()); }
+ void get_pointers()
+ {
+ this->setg(delegate().eback(), delegate().gptr(), delegate().egptr());
+ this->setp(delegate().pbase(), delegate().epptr());
+ this->pbump((int) (delegate().pptr() - delegate().pbase()));
+ }
+ void set_pointers()
+ {
+ delegate().setg(this->eback(), this->gptr(), this->egptr());
+ delegate().setp(this->pbase(), this->epptr());
+ delegate().pbump((int) (this->pptr() - this->pbase()));
+ }
+ struct sentry {
+ sentry(chainbuf<Chain, Mode, Access>* buf) : buf_(buf)
+ { buf_->set_pointers(); }
+ ~sentry() { buf_->get_pointers(); }
+ chainbuf<Chain, Mode, Access>* buf_;
+ };
+ friend struct sentry;
+ Chain chain_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHAINBUF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/direct_streambuf.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/direct_streambuf.hpp
new file mode 100644
index 0000000000..69efe2b128
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/direct_streambuf.hpp
@@ -0,0 +1,311 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DIRECT_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DIRECT_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <cstddef>
+#include <typeinfo>
+#include <utility> // pair.
+#include <boost/config.hpp> // BOOST_DEDUCED_TYPENAME,
+#include <boost/iostreams/detail/char_traits.hpp> // member template friends.
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/execute.hpp>
+#include <boost/iostreams/detail/functional.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/detail/optional.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/streambuf/linked_streambuf.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/throw_exception.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template< typename T,
+ typename Tr =
+ BOOST_IOSTREAMS_CHAR_TRAITS(
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ ) >
+class direct_streambuf
+ : public linked_streambuf<BOOST_DEDUCED_TYPENAME char_type_of<T>::type, Tr>
+{
+public:
+ typedef typename char_type_of<T>::type char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+private:
+ typedef linked_streambuf<char_type, traits_type> base_type;
+ typedef typename category_of<T>::type category;
+ typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(
+ char_type, traits_type
+ ) streambuf_type;
+public: // stream needs access.
+ void open(const T& t, std::streamsize buffer_size,
+ std::streamsize pback_size);
+ bool is_open() const;
+ void close();
+ bool auto_close() const { return auto_close_; }
+ void set_auto_close(bool close) { auto_close_ = close; }
+ bool strict_sync() { return true; }
+
+ // Declared in linked_streambuf.
+ T* component() { return storage_.get(); }
+protected:
+ BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base_type)
+ direct_streambuf();
+
+ //--------------Virtual functions-----------------------------------------//
+
+ // Declared in linked_streambuf.
+ void close_impl(BOOST_IOS::openmode m);
+ const std::type_info& component_type() const { return typeid(T); }
+ void* component_impl() { return component(); }
+#ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+ public:
+#endif
+
+ // Declared in basic_streambuf.
+ int_type underflow();
+ int_type pbackfail(int_type c);
+ int_type overflow(int_type c);
+ pos_type seekoff( off_type off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which );
+ pos_type seekpos(pos_type sp, BOOST_IOS::openmode which);
+private:
+ pos_type seek_impl( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which );
+ void init_input(any_tag) { }
+ void init_input(input);
+ void init_output(any_tag) { }
+ void init_output(output);
+ void init_get_area();
+ void init_put_area();
+ bool one_head() const;
+ bool two_head() const;
+ optional<T> storage_;
+ char_type *ibeg_, *iend_, *obeg_, *oend_;
+ bool auto_close_;
+};
+
+//------------------Implementation of direct_streambuf------------------------//
+
+template<typename T, typename Tr>
+direct_streambuf<T, Tr>::direct_streambuf()
+ : ibeg_(0), iend_(0), obeg_(0), oend_(0), auto_close_(true)
+{ this->set_true_eof(true); }
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::open
+ (const T& t, std::streamsize, std::streamsize)
+{
+ storage_.reset(t);
+ init_input(category());
+ init_output(category());
+ setg(0, 0, 0);
+ setp(0, 0);
+ this->set_needs_close();
+}
+
+template<typename T, typename Tr>
+bool direct_streambuf<T, Tr>::is_open() const
+{ return ibeg_ != 0 || obeg_ != 0; }
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::close()
+{
+ base_type* self = this;
+ detail::execute_all( detail::call_member_close(*self, BOOST_IOS::in),
+ detail::call_member_close(*self, BOOST_IOS::out),
+ detail::call_reset(storage_) );
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::int_type
+direct_streambuf<T, Tr>::underflow()
+{
+ if (!ibeg_)
+ boost::throw_exception(cant_read());
+ if (!gptr())
+ init_get_area();
+ return gptr() != iend_ ?
+ traits_type::to_int_type(*gptr()) :
+ traits_type::eof();
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::int_type
+direct_streambuf<T, Tr>::pbackfail(int_type c)
+{
+ using namespace std;
+ if (!ibeg_)
+ boost::throw_exception(cant_read());
+ if (gptr() != 0 && gptr() != ibeg_) {
+ gbump(-1);
+ if (!traits_type::eq_int_type(c, traits_type::eof()))
+ *gptr() = traits_type::to_char_type(c);
+ return traits_type::not_eof(c);
+ }
+ boost::throw_exception(bad_putback());
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::int_type
+direct_streambuf<T, Tr>::overflow(int_type c)
+{
+ using namespace std;
+ if (!obeg_)
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("no write access"));
+ if (!pptr()) init_put_area();
+ if (!traits_type::eq_int_type(c, traits_type::eof())) {
+ if (pptr() == oend_)
+ boost::throw_exception(
+ BOOST_IOSTREAMS_FAILURE("write area exhausted")
+ );
+ *pptr() = traits_type::to_char_type(c);
+ pbump(1);
+ return c;
+ }
+ return traits_type::not_eof(c);
+}
+
+template<typename T, typename Tr>
+inline typename direct_streambuf<T, Tr>::pos_type
+direct_streambuf<T, Tr>::seekoff
+ (off_type off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{ return seek_impl(off, way, which); }
+
+template<typename T, typename Tr>
+inline typename direct_streambuf<T, Tr>::pos_type
+direct_streambuf<T, Tr>::seekpos
+ (pos_type sp, BOOST_IOS::openmode which)
+{
+ return seek_impl(position_to_offset(sp), BOOST_IOS::beg, which);
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::close_impl(BOOST_IOS::openmode which)
+{
+ if (which == BOOST_IOS::in && ibeg_ != 0) {
+ setg(0, 0, 0);
+ ibeg_ = iend_ = 0;
+ }
+ if (which == BOOST_IOS::out && obeg_ != 0) {
+ sync();
+ setp(0, 0);
+ obeg_ = oend_ = 0;
+ }
+ boost::iostreams::close(*storage_, which);
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::pos_type direct_streambuf<T, Tr>::seek_impl
+ (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{
+ using namespace std;
+ BOOST_IOS::openmode both = BOOST_IOS::in | BOOST_IOS::out;
+ if (two_head() && (which & both) == both)
+ boost::throw_exception(bad_seek());
+ stream_offset result = -1;
+ bool one = one_head();
+ if (one && (pptr() != 0 || gptr()== 0))
+ init_get_area(); // Switch to input mode, for code reuse.
+ if (one || ((which & BOOST_IOS::in) != 0 && ibeg_ != 0)) {
+ if (!gptr()) setg(ibeg_, ibeg_, iend_);
+ ptrdiff_t next = 0;
+ switch (way) {
+ case BOOST_IOS::beg: next = off; break;
+ case BOOST_IOS::cur: next = (gptr() - ibeg_) + off; break;
+ case BOOST_IOS::end: next = (iend_ - ibeg_) + off; break;
+ default: BOOST_ASSERT(0);
+ }
+ if (next < 0 || next > (iend_ - ibeg_))
+ boost::throw_exception(bad_seek());
+ setg(ibeg_, ibeg_ + next, iend_);
+ result = next;
+ }
+ if (!one && (which & BOOST_IOS::out) != 0 && obeg_ != 0) {
+ if (!pptr()) setp(obeg_, oend_);
+ ptrdiff_t next = 0;
+ switch (way) {
+ case BOOST_IOS::beg: next = off; break;
+ case BOOST_IOS::cur: next = (pptr() - obeg_) + off; break;
+ case BOOST_IOS::end: next = (oend_ - obeg_) + off; break;
+ default: BOOST_ASSERT(0);
+ }
+ if (next < 0 || next > (oend_ - obeg_))
+ boost::throw_exception(bad_seek());
+ pbump(static_cast<int>(next - (pptr() - obeg_)));
+ result = next;
+ }
+ return offset_to_position(result);
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_input(input)
+{
+ std::pair<char_type*, char_type*> p = input_sequence(*storage_);
+ ibeg_ = p.first;
+ iend_ = p.second;
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_output(output)
+{
+ std::pair<char_type*, char_type*> p = output_sequence(*storage_);
+ obeg_ = p.first;
+ oend_ = p.second;
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_get_area()
+{
+ setg(ibeg_, ibeg_, iend_);
+ if (one_head() && pptr()) {
+ gbump(static_cast<int>(pptr() - obeg_));
+ setp(0, 0);
+ }
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_put_area()
+{
+ setp(obeg_, oend_);
+ if (one_head() && gptr()) {
+ pbump(static_cast<int>(gptr() - ibeg_));
+ setg(0, 0, 0);
+ }
+}
+
+template<typename T, typename Tr>
+inline bool direct_streambuf<T, Tr>::one_head() const
+{ return ibeg_ && obeg_ && ibeg_ == obeg_; }
+
+template<typename T, typename Tr>
+inline bool direct_streambuf<T, Tr>::two_head() const
+{ return ibeg_ && obeg_ && ibeg_ != obeg_; }
+
+//----------------------------------------------------------------------------//
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DIRECT_STREAMBUF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/indirect_streambuf.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/indirect_streambuf.hpp
new file mode 100644
index 0000000000..90e1e11531
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/indirect_streambuf.hpp
@@ -0,0 +1,447 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// This material is heavily indebted to the discussion and code samples in
+// A. Langer and K. Kreft, "Standard C++ IOStreams and Locales",
+// Addison-Wesley, 2000, pp. 228-43.
+
+// User "GMSB" provided an optimization for small seeks.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_INDIRECT_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_INDIRECT_STREAMBUF_HPP_INCLUDED
+
+#include <algorithm> // min, max.
+#include <cassert>
+#include <exception>
+#include <typeinfo>
+#include <boost/config.hpp> // Member template friends.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/detail/adapter/concept_adapter.hpp>
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/double_object.hpp>
+#include <boost/iostreams/detail/execute.hpp>
+#include <boost/iostreams/detail/functional.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/detail/optional.hpp>
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/streambuf/linked_streambuf.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC, BCC 5.x
+
+namespace boost { namespace iostreams { namespace detail {
+
+//
+// Description: The implementation of basic_streambuf used by chains.
+//
+template<typename T, typename Tr, typename Alloc, typename Mode>
+class indirect_streambuf
+ : public linked_streambuf<BOOST_DEDUCED_TYPENAME char_type_of<T>::type, Tr>
+{
+public:
+ typedef typename char_type_of<T>::type char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+private:
+ typedef typename category_of<T>::type category;
+ typedef concept_adapter<T> wrapper;
+ typedef detail::basic_buffer<char_type, Alloc> buffer_type;
+ typedef indirect_streambuf<T, Tr, Alloc, Mode> my_type;
+ typedef detail::linked_streambuf<char_type, traits_type> base_type;
+ typedef linked_streambuf<char_type, Tr> streambuf_type;
+public:
+ indirect_streambuf();
+
+ void open(const T& t BOOST_IOSTREAMS_PUSH_PARAMS());
+ bool is_open() const;
+ void close();
+ bool auto_close() const;
+ void set_auto_close(bool close);
+ bool strict_sync();
+
+ // Declared in linked_streambuf.
+ T* component() { return &*obj(); }
+protected:
+ BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base_type)
+
+ //----------virtual functions---------------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+ void imbue(const std::locale& loc);
+#endif
+#ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+ public:
+#endif
+ int_type underflow();
+ int_type pbackfail(int_type c);
+ int_type overflow(int_type c);
+ int sync();
+ pos_type seekoff( off_type off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which );
+ pos_type seekpos(pos_type sp, BOOST_IOS::openmode which);
+
+ // Declared in linked_streambuf.
+ void set_next(streambuf_type* next);
+ void close_impl(BOOST_IOS::openmode m);
+ const std::type_info& component_type() const { return typeid(T); }
+ void* component_impl() { return component(); }
+private:
+
+ //----------Accessor functions--------------------------------------------//
+
+ wrapper& obj() { return *storage_; }
+ streambuf_type* next() const { return next_; }
+ buffer_type& in() { return buffer_.first(); }
+ buffer_type& out() { return buffer_.second(); }
+ bool can_read() const { return is_convertible<Mode, input>::value; }
+ bool can_write() const { return is_convertible<Mode, output>::value; }
+ bool output_buffered() const { return (flags_ & f_output_buffered) != 0; }
+ bool shared_buffer() const { return is_convertible<Mode, seekable>::value || is_convertible<Mode, dual_seekable>::value; }
+ void set_flags(int f) { flags_ = f; }
+
+ //----------State changing functions--------------------------------------//
+
+ virtual void init_get_area();
+ virtual void init_put_area();
+
+ //----------Utility function----------------------------------------------//
+
+ pos_type seek_impl( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which );
+ void sync_impl();
+
+ enum flag_type {
+ f_open = 1,
+ f_output_buffered = f_open << 1,
+ f_auto_close = f_output_buffered << 1
+ };
+
+ optional<wrapper> storage_;
+ streambuf_type* next_;
+ double_object<
+ buffer_type,
+ is_convertible<
+ Mode,
+ two_sequence
+ >
+ > buffer_;
+ std::streamsize pback_size_;
+ int flags_;
+};
+
+//--------------Implementation of indirect_streambuf--------------------------//
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+indirect_streambuf<T, Tr, Alloc, Mode>::indirect_streambuf()
+ : next_(0), pback_size_(0), flags_(f_auto_close) { }
+
+//--------------Implementation of open, is_open and close---------------------//
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::open
+ (const T& t, std::streamsize buffer_size, std::streamsize pback_size)
+{
+ using namespace std;
+
+ // Normalize buffer sizes.
+ buffer_size =
+ (buffer_size != -1) ?
+ buffer_size :
+ iostreams::optimal_buffer_size(t);
+ pback_size =
+ (pback_size != -1) ?
+ pback_size :
+ default_pback_buffer_size;
+
+ // Construct input buffer.
+ if (can_read()) {
+ pback_size_ = (std::max)(std::streamsize(2), pback_size); // STLPort needs 2.
+ std::streamsize size =
+ pback_size_ +
+ ( buffer_size ? buffer_size: std::streamsize(1) );
+ in().resize(static_cast<int>(size));
+ if (!shared_buffer())
+ init_get_area();
+ }
+
+ // Construct output buffer.
+ if (can_write() && !shared_buffer()) {
+ if (buffer_size != std::streamsize(0))
+ out().resize(static_cast<int>(buffer_size));
+ init_put_area();
+ }
+
+ storage_.reset(wrapper(t));
+ flags_ |= f_open;
+ if (can_write() && buffer_size > 1)
+ flags_ |= f_output_buffered;
+ this->set_true_eof(false);
+ this->set_needs_close();
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline bool indirect_streambuf<T, Tr, Alloc, Mode>::is_open() const
+{ return (flags_ & f_open) != 0; }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::close()
+{
+ using namespace std;
+ base_type* self = this;
+ detail::execute_all(
+ detail::call_member_close(*self, BOOST_IOS::in),
+ detail::call_member_close(*self, BOOST_IOS::out),
+ detail::call_reset(storage_),
+ detail::clear_flags(flags_)
+ );
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+bool indirect_streambuf<T, Tr, Alloc, Mode>::auto_close() const
+{ return (flags_ & f_auto_close) != 0; }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::set_auto_close(bool close)
+{ flags_ = (flags_ & ~f_auto_close) | (close ? f_auto_close : 0); }
+
+//--------------Implementation virtual functions------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::imbue(const std::locale& loc)
+{
+ if (is_open()) {
+ obj().imbue(loc);
+ if (next_)
+ next_->pubimbue(loc);
+ }
+}
+#endif
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::int_type
+indirect_streambuf<T, Tr, Alloc, Mode>::underflow()
+{
+ using namespace std;
+ if (!gptr()) init_get_area();
+ buffer_type& buf = in();
+ if (gptr() < egptr()) return traits_type::to_int_type(*gptr());
+
+ // Fill putback buffer.
+ std::streamsize keep =
+ (std::min)( static_cast<std::streamsize>(gptr() - eback()),
+ pback_size_ );
+ if (keep)
+ traits_type::move( buf.data() + (pback_size_ - keep),
+ gptr() - keep, keep );
+
+ // Set pointers to reasonable values in case read throws.
+ setg( buf.data() + pback_size_ - keep,
+ buf.data() + pback_size_,
+ buf.data() + pback_size_ );
+
+ // Read from source.
+ std::streamsize chars =
+ obj().read(buf.data() + pback_size_, buf.size() - pback_size_, next_);
+ if (chars == -1) {
+ this->set_true_eof(true);
+ chars = 0;
+ }
+ setg(eback(), gptr(), buf.data() + pback_size_ + chars);
+ return chars != 0 ?
+ traits_type::to_int_type(*gptr()) :
+ traits_type::eof();
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::int_type
+indirect_streambuf<T, Tr, Alloc, Mode>::pbackfail(int_type c)
+{
+ if (gptr() != eback()) {
+ gbump(-1);
+ if (!traits_type::eq_int_type(c, traits_type::eof()))
+ *gptr() = traits_type::to_char_type(c);
+ return traits_type::not_eof(c);
+ } else {
+ boost::throw_exception(bad_putback());
+ }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::int_type
+indirect_streambuf<T, Tr, Alloc, Mode>::overflow(int_type c)
+{
+ if ( (output_buffered() && pptr() == 0) ||
+ (shared_buffer() && gptr() != 0) )
+ {
+ init_put_area();
+ }
+ if (!traits_type::eq_int_type(c, traits_type::eof())) {
+ if (output_buffered()) {
+ if (pptr() == epptr()) {
+ sync_impl();
+ if (pptr() == epptr())
+ return traits_type::eof();
+ }
+ *pptr() = traits_type::to_char_type(c);
+ pbump(1);
+ } else {
+ char_type d = traits_type::to_char_type(c);
+ if (obj().write(&d, 1, next_) != 1)
+ return traits_type::eof();
+ }
+ }
+ return traits_type::not_eof(c);
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+int indirect_streambuf<T, Tr, Alloc, Mode>::sync()
+{
+ try { // sync() is no-throw.
+ sync_impl();
+ obj().flush(next_);
+ return 0;
+ } catch (...) { return -1; }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+bool indirect_streambuf<T, Tr, Alloc, Mode>::strict_sync()
+{
+ try { // sync() is no-throw.
+ sync_impl();
+ return obj().flush(next_);
+ } catch (...) { return false; }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline typename indirect_streambuf<T, Tr, Alloc, Mode>::pos_type
+indirect_streambuf<T, Tr, Alloc, Mode>::seekoff
+ (off_type off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{ return seek_impl(off, way, which); }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline typename indirect_streambuf<T, Tr, Alloc, Mode>::pos_type
+indirect_streambuf<T, Tr, Alloc, Mode>::seekpos
+ (pos_type sp, BOOST_IOS::openmode which)
+{
+ return seek_impl(position_to_offset(sp), BOOST_IOS::beg, which);
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::pos_type
+indirect_streambuf<T, Tr, Alloc, Mode>::seek_impl
+ (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{
+ if ( gptr() != 0 && way == BOOST_IOS::cur && which == BOOST_IOS::in &&
+ eback() - gptr() <= off && off <= egptr() - gptr() )
+ { // Small seek optimization
+ gbump(static_cast<int>(off));
+ return obj().seek(stream_offset(0), BOOST_IOS::cur, BOOST_IOS::in, next_) -
+ static_cast<off_type>(egptr() - gptr());
+ }
+ if (pptr() != 0)
+ this->BOOST_IOSTREAMS_PUBSYNC(); // sync() confuses VisualAge 6.
+ if (way == BOOST_IOS::cur && gptr())
+ off -= static_cast<off_type>(egptr() - gptr());
+ bool two_head = is_convertible<category, dual_seekable>::value ||
+ is_convertible<category, bidirectional_seekable>::value;
+ if (two_head) {
+ BOOST_IOS::openmode both = BOOST_IOS::in | BOOST_IOS::out;
+ if ((which & both) == both)
+ boost::throw_exception(bad_seek());
+ if (which & BOOST_IOS::in) {
+ setg(0, 0, 0);
+ }
+ if (which & BOOST_IOS::out) {
+ setp(0, 0);
+ }
+ }
+ else {
+ setg(0, 0, 0);
+ setp(0, 0);
+ }
+ return obj().seek(off, way, which, next_);
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline void indirect_streambuf<T, Tr, Alloc, Mode>::set_next
+ (streambuf_type* next)
+{ next_ = next; }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline void indirect_streambuf<T, Tr, Alloc, Mode>::close_impl
+ (BOOST_IOS::openmode which)
+{
+ if (which == BOOST_IOS::in && is_convertible<Mode, input>::value) {
+ setg(0, 0, 0);
+ }
+ if (which == BOOST_IOS::out && is_convertible<Mode, output>::value) {
+ sync();
+ setp(0, 0);
+ }
+ if ( !is_convertible<category, dual_use>::value ||
+ is_convertible<Mode, input>::value == (which == BOOST_IOS::in) )
+ {
+ obj().close(which, next_);
+ }
+}
+
+//----------State changing functions------------------------------------------//
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::sync_impl()
+{
+ std::streamsize avail, amt;
+ if ((avail = static_cast<std::streamsize>(pptr() - pbase())) > 0) {
+ if ((amt = obj().write(pbase(), avail, next())) == avail)
+ setp(out().begin(), out().end());
+ else {
+ const char_type* ptr = pptr();
+ setp(out().begin() + amt, out().end());
+ pbump(static_cast<int>(ptr - pptr()));
+ }
+ }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::init_get_area()
+{
+ if (shared_buffer() && pptr() != 0) {
+ sync_impl();
+ setp(0, 0);
+ }
+ setg(in().begin(), in().begin(), in().begin());
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::init_put_area()
+{
+ using namespace std;
+ if (shared_buffer() && gptr() != 0) {
+ obj().seek(static_cast<off_type>(gptr() - egptr()), BOOST_IOS::cur, BOOST_IOS::in, next_);
+ setg(0, 0, 0);
+ }
+ if (output_buffered())
+ setp(out().begin(), out().end());
+ else
+ setp(0, 0);
+}
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC, BCC 5.x
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_INDIRECT_STREAMBUF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/linked_streambuf.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/linked_streambuf.hpp
new file mode 100644
index 0000000000..9999ded62f
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/streambuf/linked_streambuf.hpp
@@ -0,0 +1,114 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_LINKED_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_LINKED_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <typeinfo>
+#include <boost/config.hpp> // member template friends.
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode.
+#include <boost/iostreams/detail/streambuf.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+class chain_base;
+
+template<typename Chain, typename Access, typename Mode> class chainbuf;
+
+#define BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base) \
+ using base::eback; using base::gptr; using base::egptr; \
+ using base::setg; using base::gbump; using base::pbase; \
+ using base::pptr; using base::epptr; using base::setp; \
+ using base::pbump; using base::underflow; using base::pbackfail; \
+ using base::xsgetn; using base::overflow; using base::xsputn; \
+ using base::sync; using base::seekoff; using base::seekpos; \
+ /**/
+
+template<typename Ch, typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch) >
+class linked_streambuf : public BOOST_IOSTREAMS_BASIC_STREAMBUF(Ch, Tr) {
+protected:
+ linked_streambuf() : flags_(0) { }
+ void set_true_eof(bool eof)
+ {
+ flags_ = (flags_ & ~f_true_eof) | (eof ? f_true_eof : 0);
+ }
+public:
+
+ // Should be called only after receiving an ordinary EOF indication,
+ // to confirm that it represents EOF rather than WOULD_BLOCK.
+ bool true_eof() const { return (flags_ & f_true_eof) != 0; }
+protected:
+
+ //----------grant friendship to chain_base and chainbuf-------------------//
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template< typename Self, typename ChT, typename TrT,
+ typename Alloc, typename Mode >
+ friend class chain_base;
+ template<typename Chain, typename Mode, typename Access>
+ friend class chainbuf;
+ template<typename U>
+ friend class member_close_operation;
+#else
+ public:
+ typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(Ch, Tr) base;
+ BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base)
+#endif
+ void close(BOOST_IOS::openmode which)
+ {
+ if ( which == BOOST_IOS::in &&
+ (flags_ & f_input_closed) == 0 )
+ {
+ flags_ |= f_input_closed;
+ close_impl(which);
+ }
+ if ( which == BOOST_IOS::out &&
+ (flags_ & f_output_closed) == 0 )
+ {
+ flags_ |= f_output_closed;
+ close_impl(which);
+ }
+ }
+ void set_needs_close()
+ {
+ flags_ &= ~(f_input_closed | f_output_closed);
+ }
+ virtual void set_next(linked_streambuf<Ch, Tr>* /* next */) { }
+ virtual void close_impl(BOOST_IOS::openmode) = 0;
+ virtual bool auto_close() const = 0;
+ virtual void set_auto_close(bool) = 0;
+ virtual bool strict_sync() = 0;
+ virtual const std::type_info& component_type() const = 0;
+ virtual void* component_impl() = 0;
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ private:
+#else
+ public:
+#endif
+private:
+ enum flag_type {
+ f_true_eof = 1,
+ f_input_closed = f_true_eof << 1,
+ f_output_closed = f_input_closed << 1
+ };
+ int flags_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_LINKED_STREAMBUF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/system_failure.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/system_failure.hpp
new file mode 100644
index 0000000000..bddcef12b8
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/system_failure.hpp
@@ -0,0 +1,86 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// (C) Copyright Jonathan Graehl 2004.
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Used by mapped_file.cpp.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_SYSTEM_FAILURE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_SYSTEM_FAILURE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <cstring>
+#include <string>
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure.
+
+#if defined(BOOST_NO_STDC_NAMESPACE) && !defined(__LIBCOMO__)
+namespace std { using ::strlen; }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+# endif
+# include <windows.h>
+#else
+# include <errno.h>
+# include <string.h>
+#endif
+
+namespace boost { namespace iostreams { namespace detail {
+
+inline BOOST_IOSTREAMS_FAILURE system_failure(const char* msg)
+{
+ std::string result;
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ DWORD err;
+ LPVOID lpMsgBuf;
+ if ( (err = ::GetLastError()) != NO_ERROR &&
+ ::FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ err,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPSTR) &lpMsgBuf,
+ 0,
+ NULL ) != 0 )
+ {
+ result.reserve(std::strlen(msg) + 2 + std::strlen((LPSTR)lpMsgBuf));
+ result.append(msg);
+ result.append(": ");
+ result.append((LPSTR) lpMsgBuf);
+ ::LocalFree(lpMsgBuf);
+ } else {
+ result += msg;
+ }
+#else
+ const char* system_msg = errno ? strerror(errno) : "";
+ result.reserve(std::strlen(msg) + 2 + std::strlen(system_msg));
+ result.append(msg);
+ result.append(": ");
+ result.append(system_msg);
+#endif
+ return BOOST_IOSTREAMS_FAILURE(result);
+}
+
+inline BOOST_IOSTREAMS_FAILURE system_failure(const std::string& msg)
+{ return system_failure(msg.c_str()); }
+
+inline void throw_system_failure(const char* msg)
+{ boost::throw_exception(system_failure(msg)); }
+
+inline void throw_system_failure(const std::string& msg)
+{ boost::throw_exception(system_failure(msg)); }
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_SYSTEM_FAILURE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/template_params.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/template_params.hpp
new file mode 100644
index 0000000000..b07012fb82
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/template_params.hpp
@@ -0,0 +1,26 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_TEMPLATE_PARAMS_HPP_INCLUDED
+
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+#define BOOST_IOSTREAMS_TEMPLATE_PARAMS(arity, param) \
+ BOOST_PP_EXPR_IF(arity, template<) \
+ BOOST_PP_ENUM_PARAMS(arity, typename param) \
+ BOOST_PP_EXPR_IF(arity, >) \
+ /**/
+
+#define BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, param) \
+ BOOST_PP_EXPR_IF(arity, <) \
+ BOOST_PP_ENUM_PARAMS(arity, param) \
+ BOOST_PP_EXPR_IF(arity, >) \
+ /**/
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/translate_int_type.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/translate_int_type.hpp
new file mode 100644
index 0000000000..ae48a2c46f
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/translate_int_type.hpp
@@ -0,0 +1,62 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<bool IsSame>
+struct translate_int_type_impl;
+
+//
+// Template name: translate_char.
+// Description: Translates a character or an end-of-file indicator from the
+// int_type of one character traits type to the int_type of another.
+//
+template<typename SourceTr, typename TargetTr>
+typename TargetTr::int_type
+translate_int_type(typename SourceTr::int_type c)
+{
+ typedef translate_int_type_impl<is_same<SourceTr, TargetTr>::value> impl;
+ return impl::template inner<SourceTr, TargetTr>::translate(c);
+}
+
+//----------------------------------------------------------------------------//
+
+template<>
+struct translate_int_type_impl<true> {
+ template<typename SourceTr, typename TargetTr>
+ struct inner {
+ static typename TargetTr::int_type
+ translate(typename SourceTr::int_type c) { return c; }
+ };
+};
+
+template<>
+struct translate_int_type_impl<false> {
+ template<typename SourceTr, typename TargetTr>
+ struct inner {
+ static typename TargetTr::int_type
+ translate(typename SourceTr::int_type c)
+ {
+ return SourceTr::eq_int_type(SourceTr::eof()) ?
+ TargetTr::eof() :
+ TargetTr::to_int_type(SourceTr::to_char_type(c));
+ }
+ };
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/wrap_unwrap.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/wrap_unwrap.hpp
new file mode 100644
index 0000000000..f5f97897f9
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/detail/wrap_unwrap.hpp
@@ -0,0 +1,98 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // SFINAE, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/traits_fwd.hpp> // is_std_io.
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/ref.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+//------------------Definition of wrap/unwrap traits--------------------------//
+
+template<typename T>
+struct wrapped_type
+ : mpl::if_<is_std_io<T>, reference_wrapper<T>, T>
+ { };
+
+template<typename T>
+struct unwrapped_type
+ : unwrap_reference<T>
+ { };
+
+template<typename T>
+struct unwrap_ios
+ : mpl::eval_if<
+ is_std_io<T>,
+ unwrap_reference<T>,
+ mpl::identity<T>
+ >
+ { };
+
+//------------------Definition of wrap----------------------------------------//
+
+#ifndef BOOST_NO_SFINAE //----------------------------------------------------//
+ template<typename T>
+ inline T wrap(const T& t BOOST_IOSTREAMS_DISABLE_IF_STREAM(T))
+ { return t; }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type
+ wrap(T& t BOOST_IOSTREAMS_ENABLE_IF_STREAM(T)) { return boost::ref(t); }
+#else // #ifndef BOOST_NO_SFINAE //-------------------------------------------//
+ template<typename T>
+ inline typename wrapped_type<T>::type // BCC 5.x needs namespace qualification.
+ wrap_impl(const T& t, mpl::true_) { return boost::ref(const_cast<T&>(t)); }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type // BCC 5.x needs namespace qualification.
+ wrap_impl(T& t, mpl::true_) { return boost::ref(t); }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type
+ wrap_impl(const T& t, mpl::false_) { return t; }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type
+ wrap_impl(T& t, mpl::false_) { return t; }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type
+ wrap(const T& t) { return wrap_impl(t, is_std_io<T>()); }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type
+ wrap(T& t) { return wrap_impl(t, is_std_io<T>()); }
+#endif // #ifndef BOOST_NO_SFINAE //------------------------------------------//
+
+//------------------Definition of unwrap--------------------------------------//
+
+template<typename T>
+typename unwrapped_type<T>::type&
+unwrap(const reference_wrapper<T>& ref) { return ref.get(); }
+
+template<typename T>
+typename unwrapped_type<T>::type& unwrap(T& t) { return t; }
+
+template<typename T>
+const typename unwrapped_type<T>::type& unwrap(const T& t) { return t; }
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/device/array.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/array.hpp
new file mode 100644
index 0000000000..768a5644a1
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/array.hpp
@@ -0,0 +1,133 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_ARRAY_HPP_INCLUDED
+#define BOOST_IOSTREAMS_ARRAY_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC, make sure size_t is in std.
+#include <boost/detail/workaround.hpp>
+#include <cstddef> // std::size_t.
+#include <utility> // pair.
+#include <boost/iostreams/categories.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename Mode, typename Ch>
+class array_adapter {
+public:
+ typedef Ch char_type;
+ typedef std::pair<char_type*, char_type*> pair_type;
+ struct category
+ : public Mode,
+ public device_tag,
+ public direct_tag
+ { };
+ array_adapter(char_type* begin, char_type* end);
+ array_adapter(char_type* begin, std::size_t length);
+ array_adapter(const char_type* begin, const char_type* end);
+ array_adapter(const char_type* begin, std::size_t length);
+ template<int N>
+ array_adapter(char_type (&ar)[N])
+ : begin_(ar), end_(ar + N)
+ { }
+ pair_type input_sequence();
+ pair_type output_sequence();
+private:
+ char_type* begin_;
+ char_type* end_;
+};
+
+} // End namespace detail.
+
+#define BOOST_IOSTREAMS_ARRAY(name, mode) \
+ template<typename Ch> \
+ struct BOOST_PP_CAT(basic_, name) : detail::array_adapter<mode, Ch> { \
+ private: \
+ typedef detail::array_adapter<mode, Ch> base_type; \
+ public: \
+ typedef typename base_type::char_type char_type; \
+ typedef typename base_type::category category; \
+ BOOST_PP_CAT(basic_, name)(char_type* begin, char_type* end) \
+ : base_type(begin, end) { } \
+ BOOST_PP_CAT(basic_, name)(char_type* begin, std::size_t length) \
+ : base_type(begin, length) { } \
+ BOOST_PP_CAT(basic_, name)(const char_type* begin, const char_type* end) \
+ : base_type(begin, end) { } \
+ BOOST_PP_CAT(basic_, name)(const char_type* begin, std::size_t length) \
+ : base_type(begin, length) { } \
+ template<int N> \
+ BOOST_PP_CAT(basic_, name)(Ch (&ar)[N]) \
+ : base_type(ar) { } \
+ }; \
+ typedef BOOST_PP_CAT(basic_, name)<char> name; \
+ typedef BOOST_PP_CAT(basic_, name)<wchar_t> BOOST_PP_CAT(w, name); \
+ /**/
+BOOST_IOSTREAMS_ARRAY(array_source, input_seekable)
+BOOST_IOSTREAMS_ARRAY(array_sink, output_seekable)
+BOOST_IOSTREAMS_ARRAY(array, seekable)
+#undef BOOST_IOSTREAMS_ARRAY
+
+
+//------------------Implementation of array_adapter---------------------------//
+
+namespace detail {
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+ (char_type* begin, char_type* end)
+ : begin_(begin), end_(end)
+ { }
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+ (char_type* begin, std::size_t length)
+ : begin_(begin), end_(begin + length)
+ { }
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+ (const char_type* begin, const char_type* end)
+ : begin_(const_cast<char_type*>(begin)), // Treated as read-only.
+ end_(const_cast<char_type*>(end)) // Treated as read-only.
+{ BOOST_STATIC_ASSERT((!is_convertible<Mode, output>::value)); }
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+ (const char_type* begin, std::size_t length)
+ : begin_(const_cast<char_type*>(begin)), // Treated as read-only.
+ end_(const_cast<char_type*>(begin) + length) // Treated as read-only.
+{ BOOST_STATIC_ASSERT((!is_convertible<Mode, output>::value)); }
+
+template<typename Mode, typename Ch>
+typename array_adapter<Mode, Ch>::pair_type
+array_adapter<Mode, Ch>::input_sequence()
+{ BOOST_STATIC_ASSERT((is_convertible<Mode, input>::value));
+ return pair_type(begin_, end_); }
+
+template<typename Mode, typename Ch>
+typename array_adapter<Mode, Ch>::pair_type
+array_adapter<Mode, Ch>::output_sequence()
+{ BOOST_STATIC_ASSERT((is_convertible<Mode, output>::value));
+ return pair_type(begin_, end_); }
+
+} // End namespace detail.
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_ARRAY_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/device/back_inserter.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/back_inserter.hpp
new file mode 100644
index 0000000000..669c889e0a
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/back_inserter.hpp
@@ -0,0 +1,41 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_BACK_INSERTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_BACK_INSERTER_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+#include <boost/iostreams/categories.hpp>
+
+namespace boost { namespace iostreams {
+
+template<typename Container>
+class back_insert_device {
+public:
+ typedef typename Container::value_type char_type;
+ typedef sink_tag category;
+ back_insert_device(Container& cnt) : container(&cnt) { }
+ std::streamsize write(const char_type* s, std::streamsize n)
+ {
+ container->insert(container->end(), s, s + n);
+ return n;
+ }
+protected:
+ Container* container;
+};
+
+template<typename Container>
+back_insert_device<Container> back_inserter(Container& cnt)
+{ return back_insert_device<Container>(cnt); }
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_BACK_INSERTER_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/device/file.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/file.hpp
new file mode 100644
index 0000000000..3eb0301647
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/file.hpp
@@ -0,0 +1,191 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FILE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+# include <locale>
+#endif
+#include <string> // pathnames, char_traits.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, seekdir, int types.
+#include <boost/iostreams/detail/fstream.hpp>
+#include <boost/iostreams/operations.hpp> // seek.
+#include <boost/shared_ptr.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+template<typename Ch>
+class basic_file {
+public:
+ typedef Ch char_type;
+ struct category
+ : public seekable_device_tag,
+ public closable_tag,
+ public localizable_tag,
+ public flushable_tag
+ { };
+ basic_file( const std::string& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out,
+ BOOST_IOS::openmode base_mode =
+ BOOST_IOS::in | BOOST_IOS::out );
+ std::streamsize read(char_type* s, std::streamsize n);
+ bool putback(char_type c);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out );
+ void open( const std::string& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out,
+ BOOST_IOS::openmode base_mode =
+ BOOST_IOS::in | BOOST_IOS::out );
+ bool is_open() const;
+ void close();
+ bool flush();
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+ void imbue(const std::locale& loc) { pimpl_->file_.pubimbue(loc); }
+#endif
+private:
+ struct impl {
+ impl(const std::string& path, BOOST_IOS::openmode mode)
+ { file_.open(path.c_str(), mode); }
+ ~impl() { if (file_.is_open()) file_.close(); }
+ BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) file_;
+ };
+ shared_ptr<impl> pimpl_;
+};
+
+typedef basic_file<char> file;
+typedef basic_file<wchar_t> wfile;
+
+template<typename Ch>
+struct basic_file_source : private basic_file<Ch> {
+ typedef Ch char_type;
+ struct category
+ : input_seekable,
+ device_tag,
+ closable_tag
+ { };
+ using basic_file<Ch>::read;
+ using basic_file<Ch>::putback;
+ using basic_file<Ch>::seek;
+ using basic_file<Ch>::is_open;
+ using basic_file<Ch>::close;
+ basic_file_source( const std::string& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in )
+ : basic_file<Ch>(path, mode & ~BOOST_IOS::out, BOOST_IOS::in)
+ { }
+ void open( const std::string& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::in )
+ {
+ basic_file<Ch>::open(path, mode & ~BOOST_IOS::out, BOOST_IOS::in);
+ }
+};
+
+typedef basic_file_source<char> file_source;
+typedef basic_file_source<wchar_t> wfile_source;
+
+template<typename Ch>
+struct basic_file_sink : private basic_file<Ch> {
+ typedef Ch char_type;
+ struct category
+ : output_seekable,
+ device_tag,
+ closable_tag,
+ flushable_tag
+ { };
+ using basic_file<Ch>::write;
+ using basic_file<Ch>::seek;
+ using basic_file<Ch>::is_open;
+ using basic_file<Ch>::close;
+ using basic_file<Ch>::flush;
+ basic_file_sink( const std::string& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::out )
+ : basic_file<Ch>(path, mode & ~BOOST_IOS::in, BOOST_IOS::out)
+ { }
+ void open( const std::string& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::out )
+ {
+ basic_file<Ch>::open(path, mode & ~BOOST_IOS::in, BOOST_IOS::out);
+ }
+};
+
+typedef basic_file_sink<char> file_sink;
+typedef basic_file_sink<wchar_t> wfile_sink;
+
+//------------------Implementation of basic_file------------------------------//
+
+template<typename Ch>
+basic_file<Ch>::basic_file
+ ( const std::string& path, BOOST_IOS::openmode mode,
+ BOOST_IOS::openmode base_mode )
+{
+ open(path, mode, base_mode);
+}
+
+template<typename Ch>
+inline std::streamsize basic_file<Ch>::read
+ (char_type* s, std::streamsize n)
+{
+ std::streamsize result = pimpl_->file_.sgetn(s, n);
+ return result != 0 ? result : -1;
+}
+
+template<typename Ch>
+inline bool basic_file<Ch>::putback(char_type c)
+{
+ return !!pimpl_->file_.sputbackc(c);
+}
+
+template<typename Ch>
+inline std::streamsize basic_file<Ch>::write
+ (const char_type* s, std::streamsize n)
+{ return pimpl_->file_.sputn(s, n); }
+
+template<typename Ch>
+std::streampos basic_file<Ch>::seek
+ ( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode )
+{ return iostreams::seek(pimpl_->file_, off, way); }
+
+template<typename Ch>
+void basic_file<Ch>::open
+ ( const std::string& path, BOOST_IOS::openmode mode,
+ BOOST_IOS::openmode base_mode )
+{
+ pimpl_.reset(new impl(path, mode | base_mode));
+}
+
+template<typename Ch>
+bool basic_file<Ch>::is_open() const { return pimpl_->file_.is_open(); }
+
+template<typename Ch>
+void basic_file<Ch>::close() { pimpl_->file_.close(); }
+
+template<typename Ch>
+bool basic_file<Ch>::flush()
+{ return pimpl_->file_.BOOST_IOSTREAMS_PUBSYNC() == 0; }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC
+
+#endif // #ifndef BOOST_IOSTREAMS_FILE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/device/file_descriptor.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/file_descriptor.hpp
new file mode 100644
index 0000000000..5d6af12814
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/file_descriptor.hpp
@@ -0,0 +1,325 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Inspired by fdstream.hpp, (C) Copyright Nicolai M. Josuttis 2001,
+// available at http://www.josuttis.com/cppcode/fdstream.html.
+
+#ifndef BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <string>
+#include <boost/cstdint.hpp> // intmax_t.
+#include <boost/iostreams/categories.hpp> // tags.
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/file_handle.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, seekdir, int types.
+#include <boost/iostreams/detail/path.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/shared_ptr.hpp>
+
+// Must come last.
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4251) // Missing DLL interface for shared_ptr
+#endif
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost { namespace iostreams {
+
+// Forward declarations
+class file_descriptor_source;
+class file_descriptor_sink;
+namespace detail { struct file_descriptor_impl; }
+
+enum file_descriptor_flags
+{
+ never_close_handle = 0,
+ close_handle = 3
+};
+
+class BOOST_IOSTREAMS_DECL file_descriptor {
+public:
+ friend class file_descriptor_source;
+ friend class file_descriptor_sink;
+ typedef detail::file_handle handle_type;
+ typedef char char_type;
+ struct category
+ : seekable_device_tag,
+ closable_tag
+ { };
+
+ // Default constructor
+ file_descriptor();
+
+ // Constructors taking file desciptors
+ file_descriptor(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ file_descriptor(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+ // Constructors taking file desciptors
+ explicit file_descriptor(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ explicit file_descriptor(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+ // Constructor taking a std:: string
+ explicit file_descriptor( const std::string& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out );
+
+ // Constructor taking a C-style string
+ explicit file_descriptor( const char* path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out );
+
+ // Constructor taking a Boost.Filesystem path
+ template<typename Path>
+ explicit file_descriptor( const Path& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out )
+ {
+ init();
+ open(detail::path(path), mode);
+ }
+
+ // Copy constructor
+ file_descriptor(const file_descriptor& other);
+
+ // open overloads taking file descriptors
+ void open(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ void open(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+ // open overloads taking file descriptors
+ void open(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ void open(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+ // open overload taking a std::string
+ void open( const std::string& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out );
+
+ // open overload taking C-style string
+ void open( const char* path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out );
+
+ // open overload taking a Boost.Filesystem path
+ template<typename Path>
+ void open( const Path& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out )
+ { open(detail::path(path), mode); }
+
+ bool is_open() const;
+ void close();
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+ handle_type handle() const;
+private:
+ void init();
+
+ // open overload taking a detail::path
+ void open( const detail::path& path,
+ BOOST_IOS::openmode,
+ BOOST_IOS::openmode = BOOST_IOS::openmode(0) );
+
+ typedef detail::file_descriptor_impl impl_type;
+ shared_ptr<impl_type> pimpl_;
+};
+
+class BOOST_IOSTREAMS_DECL file_descriptor_source : private file_descriptor {
+public:
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ typedef void* handle_type; // A.k.a HANDLE
+#else
+ typedef int handle_type;
+#endif
+ typedef char char_type;
+ struct category
+ : input_seekable,
+ device_tag,
+ closable_tag
+ { };
+ using file_descriptor::is_open;
+ using file_descriptor::close;
+ using file_descriptor::read;
+ using file_descriptor::seek;
+ using file_descriptor::handle;
+
+ // Default constructor
+ file_descriptor_source() { }
+
+ // Constructors taking file desciptors
+ explicit file_descriptor_source(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ explicit file_descriptor_source(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+ // Constructors taking file desciptors
+ explicit file_descriptor_source(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ explicit file_descriptor_source(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+ // Constructor taking a std:: string
+ explicit file_descriptor_source( const std::string& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::in );
+
+ // Constructor taking a C-style string
+ explicit file_descriptor_source( const char* path,
+ BOOST_IOS::openmode mode = BOOST_IOS::in );
+
+ // Constructor taking a Boost.Filesystem path
+ template<typename Path>
+ explicit file_descriptor_source( const Path& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::in )
+ { open(detail::path(path), mode); }
+
+ // Copy constructor
+ file_descriptor_source(const file_descriptor_source& other);
+
+ // Constructors taking file desciptors
+ void open(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ void open(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+ // open overloads taking file descriptors
+ void open(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ void open(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+ // open overload taking a std::string
+ void open(const std::string& path, BOOST_IOS::openmode mode = BOOST_IOS::in);
+
+ // open overload taking C-style string
+ void open(const char* path, BOOST_IOS::openmode mode = BOOST_IOS::in);
+
+ // open overload taking a Boost.Filesystem path
+ template<typename Path>
+ void open(const Path& path, BOOST_IOS::openmode mode = BOOST_IOS::in);
+private:
+
+ // open overload taking a detail::path
+ void open(const detail::path& path, BOOST_IOS::openmode);
+};
+
+class BOOST_IOSTREAMS_DECL file_descriptor_sink : private file_descriptor {
+public:
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ typedef void* handle_type; // A.k.a HANDLE
+#else
+ typedef int handle_type;
+#endif
+ typedef char char_type;
+ struct category
+ : output_seekable,
+ device_tag,
+ closable_tag
+ { };
+ using file_descriptor::is_open;
+ using file_descriptor::close;
+ using file_descriptor::write;
+ using file_descriptor::seek;
+ using file_descriptor::handle;
+
+ // Default constructor
+ file_descriptor_sink() { }
+
+ // Constructors taking file desciptors
+ file_descriptor_sink(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ file_descriptor_sink(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+ // Constructors taking file desciptors
+ explicit file_descriptor_sink(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ explicit file_descriptor_sink(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+ // Constructor taking a std:: string
+ explicit file_descriptor_sink( const std::string& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::out );
+
+ // Constructor taking a C-style string
+ explicit file_descriptor_sink( const char* path,
+ BOOST_IOS::openmode mode = BOOST_IOS::out );
+
+ // Constructor taking a Boost.Filesystem path
+ template<typename Path>
+ explicit file_descriptor_sink( const Path& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::out )
+ { open(detail::path(path), mode); }
+
+ // Copy constructor
+ file_descriptor_sink(const file_descriptor_sink& other);
+
+ // open overloads taking file descriptors
+ void open(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ void open(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+ // open overloads taking file descriptors
+ void open(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ void open(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+ // open overload taking a std::string
+ void open( const std::string& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::out );
+
+ // open overload taking C-style string
+ void open( const char* path,
+ BOOST_IOS::openmode mode = BOOST_IOS::out );
+
+ // open overload taking a Boost.Filesystem path
+ template<typename Path>
+ void open( const Path& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::out )
+ { open(detail::path(path), mode); }
+private:
+
+ // open overload taking a detail::path
+ void open(const detail::path& path, BOOST_IOS::openmode);
+};
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+#if defined(BOOST_MSVC)
+# pragma warning(pop) // pops #pragma warning(disable:4251)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/device/mapped_file.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/mapped_file.hpp
new file mode 100644
index 0000000000..783954e7c0
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/mapped_file.hpp
@@ -0,0 +1,611 @@
+// (C) Copyright Jorge Lodos 2008.
+// (C) Copyright Jonathan Turkanis 2003.
+// (C) Copyright Craig Henderson 2002. 'boost/memmap.hpp' from sandbox
+// 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.)
+
+#ifndef BOOST_IOSTREAMS_MAPPED_FILE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_MAPPED_FILE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // make sure size_t is in std.
+#include <cstddef> // size_t.
+#include <string> // pathnames.
+#include <utility> // pair.
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/close.hpp>
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, failure
+#include <boost/iostreams/detail/path.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+// Must come last.
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4251) // Missing DLL interface for shared_ptr
+#endif
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost { namespace iostreams {
+
+//------------------Definition of mapped_file_base and mapped_file_params-----//
+
+// Forward declarations
+class mapped_file_source;
+class mapped_file_sink;
+class mapped_file;
+namespace detail { class mapped_file_impl; }
+
+class mapped_file_base {
+public:
+ enum mapmode {
+ readonly = 1,
+ readwrite = 2,
+ priv = 4
+ };
+};
+
+// Bitmask operations for mapped_file_base::mapmode
+mapped_file_base::mapmode
+operator|(mapped_file_base::mapmode a, mapped_file_base::mapmode b);
+
+mapped_file_base::mapmode
+operator&(mapped_file_base::mapmode a, mapped_file_base::mapmode b);
+
+mapped_file_base::mapmode
+operator^(mapped_file_base::mapmode a, mapped_file_base::mapmode b);
+
+mapped_file_base::mapmode
+operator~(mapped_file_base::mapmode a);
+
+mapped_file_base::mapmode
+operator|=(mapped_file_base::mapmode& a, mapped_file_base::mapmode b);
+
+mapped_file_base::mapmode
+operator&=(mapped_file_base::mapmode& a, mapped_file_base::mapmode b);
+
+mapped_file_base::mapmode
+operator^=(mapped_file_base::mapmode& a, mapped_file_base::mapmode b);
+
+//------------------Definition of mapped_file_params--------------------------//
+
+namespace detail {
+
+struct mapped_file_params_base {
+ mapped_file_params_base()
+ : flags(static_cast<mapped_file_base::mapmode>(0)),
+ mode(), offset(0), length(static_cast<std::size_t>(-1)),
+ new_file_size(0), hint(0)
+ { }
+private:
+ friend class mapped_file_impl;
+ void normalize();
+public:
+ mapped_file_base::mapmode flags;
+ BOOST_IOS::openmode mode; // Deprecated
+ stream_offset offset;
+ std::size_t length;
+ stream_offset new_file_size;
+ const char* hint;
+};
+
+} // End namespace detail.
+
+// This template allows Boost.Filesystem paths to be specified when creating or
+// reopening a memory mapped file, without creating a dependence on
+// Boost.Filesystem. Possible values of Path include std::string,
+// boost::filesystem::path, boost::filesystem::wpath,
+// and boost::iostreams::detail::path (used to store either a std::string or a
+// std::wstring).
+template<typename Path>
+struct basic_mapped_file_params
+ : detail::mapped_file_params_base
+{
+ typedef detail::mapped_file_params_base base_type;
+
+ // For wide paths, instantiate basic_mapped_file_params
+ // with boost::filesystem::wpath
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+ BOOST_STATIC_ASSERT((!is_same<Path, std::wstring>::value));
+#endif
+
+ // Default constructor
+ basic_mapped_file_params() { }
+
+ // Construction from a Path
+ explicit basic_mapped_file_params(const Path& p) : path(p) { }
+
+ // Construction from a path of a different type
+ template<typename PathT>
+ explicit basic_mapped_file_params(const PathT& p) : path(p) { }
+
+ // Copy constructor
+ basic_mapped_file_params(const basic_mapped_file_params& other)
+ : base_type(other), path(other.path)
+ { }
+
+ basic_mapped_file_params& operator=(const basic_mapped_file_params& other) = default;
+
+ // Templated copy constructor
+ template<typename PathT>
+ basic_mapped_file_params(const basic_mapped_file_params<PathT>& other)
+ : base_type(other), path(other.path)
+ { }
+
+ typedef Path path_type;
+ Path path;
+};
+
+typedef basic_mapped_file_params<std::string> mapped_file_params;
+
+//------------------Definition of mapped_file_source--------------------------//
+
+class BOOST_IOSTREAMS_DECL mapped_file_source : public mapped_file_base {
+private:
+ struct safe_bool_helper { int x; };
+ typedef int safe_bool_helper::* safe_bool;
+ typedef detail::mapped_file_impl impl_type;
+ typedef basic_mapped_file_params<detail::path> param_type;
+ friend class mapped_file;
+ friend class detail::mapped_file_impl;
+ friend struct boost::iostreams::operations<mapped_file_source>;
+public:
+ typedef char char_type;
+ struct category
+ : public source_tag,
+ public direct_tag,
+ public closable_tag
+ { };
+ typedef std::size_t size_type;
+ typedef const char* iterator;
+ BOOST_STATIC_CONSTANT(size_type, max_length = static_cast<size_type>(-1));
+
+ // Default constructor
+ mapped_file_source();
+
+ // Constructor taking a parameters object
+ template<typename Path>
+ explicit mapped_file_source(const basic_mapped_file_params<Path>& p);
+
+ // Constructor taking a list of parameters
+ template<typename Path>
+ explicit mapped_file_source( const Path& path,
+ size_type length = max_length,
+ boost::intmax_t offset = 0 );
+
+ // Copy Constructor
+ mapped_file_source(const mapped_file_source& other);
+
+ //--------------Stream interface------------------------------------------//
+
+ template<typename Path>
+ void open(const basic_mapped_file_params<Path>& p);
+
+ template<typename Path>
+ void open( const Path& path,
+ size_type length = max_length,
+ boost::intmax_t offset = 0 );
+
+ bool is_open() const;
+ void close();
+ operator safe_bool() const;
+ bool operator!() const;
+ mapmode flags() const;
+
+ //--------------Container interface---------------------------------------//
+
+ size_type size() const;
+ const char* data() const;
+ iterator begin() const;
+ iterator end() const;
+
+ //--------------Query admissible offsets----------------------------------//
+
+ // Returns the allocation granularity for virtual memory. Values passed
+ // as offsets must be multiples of this value.
+ static int alignment();
+
+private:
+ void init();
+ void open_impl(const param_type& p);
+
+ boost::shared_ptr<impl_type> pimpl_;
+};
+
+//------------------Definition of mapped_file---------------------------------//
+
+class BOOST_IOSTREAMS_DECL mapped_file : public mapped_file_base {
+private:
+ typedef mapped_file_source delegate_type;
+ typedef delegate_type::safe_bool safe_bool;
+ typedef basic_mapped_file_params<detail::path> param_type;
+ friend struct boost::iostreams::operations<mapped_file >;
+ friend class mapped_file_sink;
+public:
+ typedef char char_type;
+ struct category
+ : public seekable_device_tag,
+ public direct_tag,
+ public closable_tag
+ { };
+ typedef mapped_file_source::size_type size_type;
+ typedef char* iterator;
+ typedef const char* const_iterator;
+ BOOST_STATIC_CONSTANT(size_type, max_length = delegate_type::max_length);
+
+ // Default constructor
+ mapped_file() { }
+
+ // Construstor taking a parameters object
+ template<typename Path>
+ explicit mapped_file(const basic_mapped_file_params<Path>& p);
+
+ // Constructor taking a list of parameters
+ template<typename Path>
+ mapped_file( const Path& path,
+ mapmode flags,
+ size_type length = max_length,
+ stream_offset offset = 0 );
+
+ // Constructor taking a list of parameters, including a
+ // std::ios_base::openmode (deprecated)
+ template<typename Path>
+ explicit mapped_file( const Path& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out,
+ size_type length = max_length,
+ stream_offset offset = 0 );
+
+ // Copy Constructor
+ mapped_file(const mapped_file& other);
+
+ //--------------Conversion to mapped_file_source (deprecated)-------------//
+
+ operator mapped_file_source&() { return delegate_; }
+ operator const mapped_file_source&() const { return delegate_; }
+
+ //--------------Stream interface------------------------------------------//
+
+ // open overload taking a parameters object
+ template<typename Path>
+ void open(const basic_mapped_file_params<Path>& p);
+
+ // open overload taking a list of parameters
+ template<typename Path>
+ void open( const Path& path,
+ mapmode mode,
+ size_type length = max_length,
+ stream_offset offset = 0 );
+
+ // open overload taking a list of parameters, including a
+ // std::ios_base::openmode (deprecated)
+ template<typename Path>
+ void open( const Path& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out,
+ size_type length = max_length,
+ stream_offset offset = 0 );
+
+ bool is_open() const { return delegate_.is_open(); }
+ void close() { delegate_.close(); }
+ operator safe_bool() const { return delegate_; }
+ bool operator!() const { return !delegate_; }
+ mapmode flags() const { return delegate_.flags(); }
+
+ //--------------Container interface---------------------------------------//
+
+ size_type size() const { return delegate_.size(); }
+ char* data() const;
+ const char* const_data() const { return delegate_.data(); }
+ iterator begin() const { return data(); }
+ const_iterator const_begin() const { return const_data(); }
+ iterator end() const;
+ const_iterator const_end() const { return const_data() + size(); }
+
+ //--------------Query admissible offsets----------------------------------//
+
+ // Returns the allocation granularity for virtual memory. Values passed
+ // as offsets must be multiples of this value.
+ static int alignment() { return mapped_file_source::alignment(); }
+
+ //--------------File access----------------------------------------------//
+
+ void resize(stream_offset new_size);
+private:
+ delegate_type delegate_;
+};
+
+//------------------Definition of mapped_file_sink----------------------------//
+
+class BOOST_IOSTREAMS_DECL mapped_file_sink : private mapped_file {
+public:
+ friend struct boost::iostreams::operations<mapped_file_sink>;
+ using mapped_file::mapmode;
+ using mapped_file::readonly;
+ using mapped_file::readwrite;
+ using mapped_file::priv;
+ using mapped_file::char_type;
+ struct category
+ : public sink_tag,
+ public direct_tag,
+ public closable_tag
+ { };
+ using mapped_file::size_type;
+ using mapped_file::iterator;
+ using mapped_file::max_length;
+ using mapped_file::is_open;
+ using mapped_file::close;
+ using mapped_file::operator safe_bool;
+ using mapped_file::operator !;
+ using mapped_file::flags;
+ using mapped_file::size;
+ using mapped_file::data;
+ using mapped_file::begin;
+ using mapped_file::end;
+ using mapped_file::alignment;
+ using mapped_file::resize;
+
+ // Default constructor
+ mapped_file_sink() { }
+
+ // Constructor taking a parameters object
+ template<typename Path>
+ explicit mapped_file_sink(const basic_mapped_file_params<Path>& p);
+
+ // Constructor taking a list of parameters
+ template<typename Path>
+ explicit mapped_file_sink( const Path& path,
+ size_type length = max_length,
+ boost::intmax_t offset = 0,
+ mapmode flags = readwrite );
+
+ // Copy Constructor
+ mapped_file_sink(const mapped_file_sink& other);
+
+ // open overload taking a parameters object
+ template<typename Path>
+ void open(const basic_mapped_file_params<Path>& p);
+
+ // open overload taking a list of parameters
+ template<typename Path>
+ void open( const Path& path,
+ size_type length = max_length,
+ boost::intmax_t offset = 0,
+ mapmode flags = readwrite );
+};
+
+//------------------Implementation of mapped_file_source----------------------//
+
+template<typename Path>
+mapped_file_source::mapped_file_source(const basic_mapped_file_params<Path>& p)
+{ init(); open(p); }
+
+template<typename Path>
+mapped_file_source::mapped_file_source(
+ const Path& path, size_type length, boost::intmax_t offset)
+{ init(); open(path, length, offset); }
+
+template<typename Path>
+void mapped_file_source::open(const basic_mapped_file_params<Path>& p)
+{
+ param_type params(p);
+ if (params.flags) {
+ if (params.flags != mapped_file::readonly)
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid flags"));
+ } else {
+ if (params.mode & BOOST_IOS::out)
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid mode"));
+ params.mode |= BOOST_IOS::in;
+ }
+ open_impl(params);
+}
+
+template<typename Path>
+void mapped_file_source::open(
+ const Path& path, size_type length, boost::intmax_t offset)
+{
+ param_type p(path);
+ p.length = length;
+ p.offset = offset;
+ open(p);
+}
+
+//------------------Implementation of mapped_file-----------------------------//
+
+template<typename Path>
+mapped_file::mapped_file(const basic_mapped_file_params<Path>& p)
+{ open(p); }
+
+template<typename Path>
+mapped_file::mapped_file(
+ const Path& path, mapmode flags,
+ size_type length, stream_offset offset )
+{ open(path, flags, length, offset); }
+
+template<typename Path>
+mapped_file::mapped_file(
+ const Path& path, BOOST_IOS::openmode mode,
+ size_type length, stream_offset offset )
+{ open(path, mode, length, offset); }
+
+template<typename Path>
+void mapped_file::open(const basic_mapped_file_params<Path>& p)
+{ delegate_.open_impl(p); }
+
+template<typename Path>
+void mapped_file::open(
+ const Path& path, mapmode flags,
+ size_type length, stream_offset offset )
+{
+ param_type p(path);
+ p.flags = flags;
+ p.length = length;
+ p.offset = offset;
+ open(p);
+}
+
+template<typename Path>
+void mapped_file::open(
+ const Path& path, BOOST_IOS::openmode mode,
+ size_type length, stream_offset offset )
+{
+ param_type p(path);
+ p.mode = mode;
+ p.length = length;
+ p.offset = offset;
+ open(p);
+}
+
+inline char* mapped_file::data() const
+{ return (flags() != readonly) ? const_cast<char*>(delegate_.data()) : 0; }
+
+inline mapped_file::iterator mapped_file::end() const
+{ return (flags() != readonly) ? data() + size() : 0; }
+
+//------------------Implementation of mapped_file_sink------------------------//
+
+template<typename Path>
+mapped_file_sink::mapped_file_sink(const basic_mapped_file_params<Path>& p)
+{ open(p); }
+
+template<typename Path>
+mapped_file_sink::mapped_file_sink(
+ const Path& path, size_type length,
+ boost::intmax_t offset, mapmode flags )
+{ open(path, length, offset, flags); }
+
+template<typename Path>
+void mapped_file_sink::open(const basic_mapped_file_params<Path>& p)
+{
+ param_type params(p);
+ if (params.flags) {
+ if (params.flags & mapped_file::readonly)
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid flags"));
+ } else {
+ if (params.mode & BOOST_IOS::in)
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid mode"));
+ params.mode |= BOOST_IOS::out;
+ }
+ mapped_file::open(params);
+}
+
+template<typename Path>
+void mapped_file_sink::open(
+ const Path& path, size_type length,
+ boost::intmax_t offset, mapmode flags )
+{
+ param_type p(path);
+ p.flags = flags;
+ p.length = length;
+ p.offset = offset;
+ open(p);
+}
+
+//------------------Specialization of direct_impl-----------------------------//
+
+template<>
+struct operations<mapped_file_source>
+ : boost::iostreams::detail::close_impl<closable_tag>
+{
+ static std::pair<char*, char*>
+ input_sequence(mapped_file_source& src)
+ {
+ return std::make_pair( const_cast<char*>(src.begin()),
+ const_cast<char*>(src.end()) );
+ }
+};
+
+template<>
+struct operations<mapped_file>
+ : boost::iostreams::detail::close_impl<closable_tag>
+{
+ static std::pair<char*, char*>
+ input_sequence(mapped_file& file)
+ {
+ return std::make_pair(file.begin(), file.end());
+ }
+ static std::pair<char*, char*>
+ output_sequence(mapped_file& file)
+ {
+ return std::make_pair(file.begin(), file.end());
+ }
+};
+
+template<>
+struct operations<mapped_file_sink>
+ : boost::iostreams::detail::close_impl<closable_tag>
+{
+ static std::pair<char*, char*>
+ output_sequence(mapped_file_sink& sink)
+ {
+ return std::make_pair(sink.begin(), sink.end());
+ }
+};
+
+//------------------Definition of mapmode operators---------------------------//
+
+inline mapped_file::mapmode
+operator|(mapped_file::mapmode a, mapped_file::mapmode b)
+{
+ return static_cast<mapped_file::mapmode>
+ (static_cast<int>(a) | static_cast<int>(b));
+}
+
+inline mapped_file::mapmode
+operator&(mapped_file::mapmode a, mapped_file::mapmode b)
+{
+ return static_cast<mapped_file::mapmode>
+ (static_cast<int>(a) & static_cast<int>(b));
+}
+
+inline mapped_file::mapmode
+operator^(mapped_file::mapmode a, mapped_file::mapmode b)
+{
+ return static_cast<mapped_file::mapmode>
+ (static_cast<int>(a) ^ static_cast<int>(b));
+}
+
+inline mapped_file::mapmode
+operator~(mapped_file::mapmode a)
+{
+ return static_cast<mapped_file::mapmode>(~static_cast<int>(a));
+}
+
+inline mapped_file::mapmode
+operator|=(mapped_file::mapmode& a, mapped_file::mapmode b)
+{
+ return a = a | b;
+}
+
+inline mapped_file::mapmode
+operator&=(mapped_file::mapmode& a, mapped_file::mapmode b)
+{
+ return a = a & b;
+}
+
+inline mapped_file::mapmode
+operator^=(mapped_file::mapmode& a, mapped_file::mapmode b)
+{
+ return a = a ^ b;
+}
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+#if defined(BOOST_MSVC)
+# pragma warning(pop) // pops #pragma warning(disable:4251)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_MAPPED_FILE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/device/null.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/null.hpp
new file mode 100644
index 0000000000..a3943d7436
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/device/null.hpp
@@ -0,0 +1,66 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Inspired by Daryle Walker's nullbuf from his More I/O submission.
+
+#ifndef BOOST_IOSTREAMS_NULL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_NULL_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, streamsize.
+#include <boost/iostreams/positioning.hpp>
+
+namespace boost { namespace iostreams {
+
+template<typename Ch, typename Mode>
+class basic_null_device {
+public:
+ typedef Ch char_type;
+ struct category
+ : public Mode,
+ public device_tag,
+ public closable_tag
+ { };
+ std::streamsize read(Ch*, std::streamsize) { return -1; }
+ std::streamsize write(const Ch*, std::streamsize n) { return n; }
+ std::streampos seek( stream_offset, BOOST_IOS::seekdir,
+ BOOST_IOS::openmode =
+ BOOST_IOS::in | BOOST_IOS::out )
+ { return -1; }
+ void close() { }
+ void close(BOOST_IOS::openmode) { }
+};
+
+template<typename Ch>
+struct basic_null_source : private basic_null_device<Ch, input> {
+ typedef Ch char_type;
+ typedef source_tag category;
+ using basic_null_device<Ch, input>::read;
+ using basic_null_device<Ch, input>::close;
+};
+
+typedef basic_null_source<char> null_source;
+typedef basic_null_source<wchar_t> wnull_source;
+
+template<typename Ch>
+struct basic_null_sink : private basic_null_device<Ch, output> {
+ typedef Ch char_type;
+ typedef sink_tag category;
+ using basic_null_device<Ch, output>::write;
+ using basic_null_device<Ch, output>::close;
+};
+
+typedef basic_null_sink<char> null_sink;
+typedef basic_null_sink<wchar_t> wnull_sink;
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_NULL_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/bzip2.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/bzip2.hpp
new file mode 100644
index 0000000000..b9c04a7ce1
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/bzip2.hpp
@@ -0,0 +1,418 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Note: custom allocators are not supported on VC6, since that compiler
+// had trouble finding the function zlib_base::do_init.
+
+#ifndef BOOST_IOSTREAMS_BZIP2_HPP_INCLUDED
+#define BOOST_IOSTREAMS_BZIP2_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <cassert>
+#include <memory> // allocator.
+#include <new> // bad_alloc.
+#include <boost/config.hpp> // MSVC, STATIC_CONSTANT, DEDUCED_TYPENAME, DINKUM.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp> // buffer size.
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/bzip2.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure, streamsize.
+#include <boost/iostreams/filter/symmetric.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+// Must come last.
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4251 4231 4660)
+#endif
+#include <boost/config/abi_prefix.hpp>
+
+// Temporary fix.
+#undef small
+
+namespace boost { namespace iostreams {
+
+namespace bzip2 {
+
+ // Typedefs.
+
+typedef void* (*alloc_func)(void*, int, int);
+typedef void (*free_func)(void*, void*);
+
+ // Status codes
+
+BOOST_IOSTREAMS_DECL extern const int ok;
+BOOST_IOSTREAMS_DECL extern const int run_ok;
+BOOST_IOSTREAMS_DECL extern const int flush_ok;
+BOOST_IOSTREAMS_DECL extern const int finish_ok;
+BOOST_IOSTREAMS_DECL extern const int stream_end;
+BOOST_IOSTREAMS_DECL extern const int sequence_error;
+BOOST_IOSTREAMS_DECL extern const int param_error;
+BOOST_IOSTREAMS_DECL extern const int mem_error;
+BOOST_IOSTREAMS_DECL extern const int data_error;
+BOOST_IOSTREAMS_DECL extern const int data_error_magic;
+BOOST_IOSTREAMS_DECL extern const int io_error;
+BOOST_IOSTREAMS_DECL extern const int unexpected_eof;
+BOOST_IOSTREAMS_DECL extern const int outbuff_full;
+BOOST_IOSTREAMS_DECL extern const int config_error;
+
+ // Action codes
+
+BOOST_IOSTREAMS_DECL extern const int finish;
+BOOST_IOSTREAMS_DECL extern const int run;
+
+ // Default values
+
+const int default_block_size = 9;
+const int default_work_factor = 30;
+const bool default_small = false;
+
+} // End namespace bzip2.
+
+//
+// Class name: bzip2_params.
+// Description: Encapsulates the parameters passed to deflateInit2
+// to customize compression.
+//
+struct bzip2_params {
+
+ // Non-explicit constructor for compression.
+ bzip2_params( int block_size_ = bzip2::default_block_size,
+ int work_factor_ = bzip2::default_work_factor )
+ : block_size(block_size_), work_factor(work_factor_)
+ { }
+
+ // Constructor for decompression.
+ bzip2_params(bool small)
+ : small(small), work_factor(0)
+ { }
+
+ union {
+ int block_size; // For compression.
+ bool small; // For decompression.
+ };
+ int work_factor;
+};
+
+//
+// Class name: bzip2_error.
+// Description: Subclass of std::ios_base::failure thrown to indicate
+// bzip2 errors other than out-of-memory conditions.
+//
+class BOOST_IOSTREAMS_DECL bzip2_error : public BOOST_IOSTREAMS_FAILURE {
+public:
+ explicit bzip2_error(int error);
+ int error() const { return error_; }
+ static void check BOOST_PREVENT_MACRO_SUBSTITUTION(int error);
+private:
+ int error_;
+};
+
+namespace detail {
+
+template<typename Alloc>
+struct bzip2_allocator_traits {
+#ifndef BOOST_NO_STD_ALLOCATOR
+#if defined(BOOST_NO_CXX11_ALLOCATOR)
+ typedef typename Alloc::template rebind<char>::other type;
+#else
+ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<char> type;
+#endif
+#else
+ typedef std::allocator<char> type;
+#endif
+};
+
+template< typename Alloc,
+ typename Base = // VC6 workaround (C2516)
+ BOOST_DEDUCED_TYPENAME bzip2_allocator_traits<Alloc>::type >
+struct bzip2_allocator : private Base {
+private:
+#if defined(BOOST_NO_CXX11_ALLOCATOR) || defined(BOOST_NO_STD_ALLOCATOR)
+ typedef typename Base::size_type size_type;
+#else
+ typedef typename std::allocator_traits<Base>::size_type size_type;
+#endif
+public:
+ BOOST_STATIC_CONSTANT(bool, custom =
+ (!is_same<std::allocator<char>, Base>::value));
+ typedef typename bzip2_allocator_traits<Alloc>::type allocator_type;
+ static void* allocate(void* self, int items, int size);
+ static void deallocate(void* self, void* address);
+};
+
+class BOOST_IOSTREAMS_DECL bzip2_base {
+public:
+ typedef char char_type;
+protected:
+ bzip2_base(const bzip2_params& params);
+ ~bzip2_base();
+ bzip2_params& params() { return params_; }
+ bool& ready() { return ready_; }
+ template<typename Alloc>
+ void init( bool compress,
+ bzip2_allocator<Alloc>& alloc )
+ {
+ bool custom = bzip2_allocator<Alloc>::custom;
+ do_init( compress,
+ custom ? bzip2_allocator<Alloc>::allocate : 0,
+ custom ? bzip2_allocator<Alloc>::deallocate : 0,
+ custom ? &alloc : 0 );
+ }
+ void before( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end );
+ void after(const char*& src_begin, char*& dest_begin);
+ int check_end(const char* src_begin, const char* dest_begin);
+ int compress(int action);
+ int decompress();
+ void end(bool compress);
+private:
+ void do_init( bool compress,
+ bzip2::alloc_func,
+ bzip2::free_func,
+ void* derived );
+ bzip2_params params_;
+ void* stream_; // Actual type: bz_stream*.
+ bool ready_;
+};
+
+//
+// Template name: bzip2_compressor_impl
+// Description: Model of SymmetricFilter implementing compression by
+// delegating to the libbzip2 function BZ_bzCompress.
+//
+template<typename Alloc = std::allocator<char> >
+class bzip2_compressor_impl
+ : public bzip2_base,
+ #if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+ public
+ #endif
+ bzip2_allocator<Alloc>
+{
+public:
+ bzip2_compressor_impl(const bzip2_params&);
+ bool filter( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush );
+ void close();
+private:
+ void init();
+ bool eof_; // Guard to make sure filter() isn't called after it returns false.
+};
+
+//
+// Template name: bzip2_compressor
+// Description: Model of SymmetricFilter implementing decompression by
+// delegating to the libbzip2 function BZ_bzDecompress.
+//
+template<typename Alloc = std::allocator<char> >
+class bzip2_decompressor_impl
+ : public bzip2_base,
+ #if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+ public
+ #endif
+ bzip2_allocator<Alloc>
+{
+public:
+ bzip2_decompressor_impl(bool small = bzip2::default_small);
+ bool filter( const char*& begin_in, const char* end_in,
+ char*& begin_out, char* end_out, bool flush );
+ void close();
+private:
+ void init();
+ bool eof_; // Guard to make sure filter() isn't called after it returns false.
+};
+
+} // End namespace detail.
+
+//
+// Template name: bzip2_compressor
+// Description: Model of InputFilter and OutputFilter implementing
+// compression using libbzip2.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_bzip2_compressor
+ : symmetric_filter<detail::bzip2_compressor_impl<Alloc>, Alloc>
+{
+private:
+ typedef detail::bzip2_compressor_impl<Alloc> impl_type;
+ typedef symmetric_filter<impl_type, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ basic_bzip2_compressor( const bzip2_params& = bzip2::default_block_size,
+ std::streamsize buffer_size = default_device_buffer_size );
+};
+BOOST_IOSTREAMS_PIPABLE(basic_bzip2_compressor, 1)
+
+typedef basic_bzip2_compressor<> bzip2_compressor;
+
+//
+// Template name: bzip2_decompressor
+// Description: Model of InputFilter and OutputFilter implementing
+// decompression using libbzip2.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_bzip2_decompressor
+ : symmetric_filter<detail::bzip2_decompressor_impl<Alloc>, Alloc>
+{
+private:
+ typedef detail::bzip2_decompressor_impl<Alloc> impl_type;
+ typedef symmetric_filter<impl_type, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ basic_bzip2_decompressor( bool small = bzip2::default_small,
+ std::streamsize buffer_size = default_device_buffer_size );
+};
+BOOST_IOSTREAMS_PIPABLE(basic_bzip2_decompressor, 1)
+
+typedef basic_bzip2_decompressor<> bzip2_decompressor;
+
+//----------------------------------------------------------------------------//
+
+//------------------Implementation of bzip2_allocator-------------------------//
+
+namespace detail {
+
+template<typename Alloc, typename Base>
+void* bzip2_allocator<Alloc, Base>::allocate(void* self, int items, int size)
+{
+ size_type len = items * size;
+ char* ptr =
+ static_cast<allocator_type*>(self)->allocate
+ (len + sizeof(size_type)
+ #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+ , (char*)0
+ #endif
+ );
+ *reinterpret_cast<size_type*>(ptr) = len;
+ return ptr + sizeof(size_type);
+}
+
+template<typename Alloc, typename Base>
+void bzip2_allocator<Alloc, Base>::deallocate(void* self, void* address)
+{
+ char* ptr = reinterpret_cast<char*>(address) - sizeof(size_type);
+ size_type len = *reinterpret_cast<size_type*>(ptr) + sizeof(size_type);
+ static_cast<allocator_type*>(self)->deallocate(ptr, len);
+}
+
+//------------------Implementation of bzip2_compressor_impl-------------------//
+
+template<typename Alloc>
+bzip2_compressor_impl<Alloc>::bzip2_compressor_impl(const bzip2_params& p)
+ : bzip2_base(p), eof_(false) { }
+
+template<typename Alloc>
+bool bzip2_compressor_impl<Alloc>::filter
+ ( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush )
+{
+ if (!ready()) init();
+ if (eof_) return false;
+ before(src_begin, src_end, dest_begin, dest_end);
+ int result = compress(flush ? bzip2::finish : bzip2::run);
+ after(src_begin, dest_begin);
+ bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(result);
+ return !(eof_ = result == bzip2::stream_end);
+}
+
+template<typename Alloc>
+void bzip2_compressor_impl<Alloc>::close()
+{
+ try {
+ end(true);
+ } catch (...) {
+ eof_ = false;
+ throw;
+ }
+ eof_ = false;
+}
+
+template<typename Alloc>
+inline void bzip2_compressor_impl<Alloc>::init()
+{ bzip2_base::init(true, static_cast<bzip2_allocator<Alloc>&>(*this)); }
+
+//------------------Implementation of bzip2_decompressor_impl-----------------//
+
+template<typename Alloc>
+bzip2_decompressor_impl<Alloc>::bzip2_decompressor_impl(bool small)
+ : bzip2_base(bzip2_params(small)), eof_(false) { }
+
+template<typename Alloc>
+bool bzip2_decompressor_impl<Alloc>::filter
+ ( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush )
+{
+ if (eof_) {
+ // reset the stream if there are more characters
+ if(src_begin == src_end)
+ return false;
+ else
+ close();
+ }
+ if (!ready())
+ init();
+ before(src_begin, src_end, dest_begin, dest_end);
+ int result = decompress();
+ if(result == bzip2::ok && flush)
+ result = check_end(src_begin, dest_begin);
+ after(src_begin, dest_begin);
+ bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(result);
+ eof_ = result == bzip2::stream_end;
+ return true;
+}
+
+template<typename Alloc>
+void bzip2_decompressor_impl<Alloc>::close()
+{
+ try {
+ end(false);
+ } catch (...) {
+ eof_ = false;
+ throw;
+ }
+ eof_ = false;
+}
+
+template<typename Alloc>
+inline void bzip2_decompressor_impl<Alloc>::init()
+{ bzip2_base::init(false, static_cast<bzip2_allocator<Alloc>&>(*this)); }
+} // End namespace detail.
+
+//------------------Implementation of bzip2_decompressor----------------------//
+
+template<typename Alloc>
+basic_bzip2_compressor<Alloc>::basic_bzip2_compressor
+ (const bzip2_params& p, std::streamsize buffer_size)
+ : base_type(buffer_size, p)
+ { }
+
+//------------------Implementation of bzip2_decompressor----------------------//
+
+template<typename Alloc>
+basic_bzip2_decompressor<Alloc>::basic_bzip2_decompressor
+ (bool small, std::streamsize buffer_size)
+ : base_type(buffer_size, small)
+ { }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // Pops abi_suffix.hpp pragmas.
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_BZIP2_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/gzip.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/gzip.hpp
new file mode 100644
index 0000000000..e236983e0b
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/gzip.hpp
@@ -0,0 +1,757 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definitions of the class templates gzip_compressor and
+// gzip_decompressor for reading and writing files in the gzip file format
+// (RFC 1952). Based in part on work of Jonathan de Halleux; see [...]
+
+#ifndef BOOST_IOSTREAMS_GZIP_HPP_INCLUDED
+#define BOOST_IOSTREAMS_GZIP_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // STATIC_CONSTANT, STDC_NAMESPACE,
+ // DINKUMWARE_STDLIB, __STL_CONFIG_H.
+#include <algorithm> // min.
+#include <boost/assert.hpp>
+#include <cstdio> // EOF.
+#include <cstddef> // size_t.
+#include <ctime> // std::time_t.
+#include <memory> // allocator.
+#include <boost/config.hpp> // Put size_t in std.
+#include <boost/detail/workaround.hpp>
+#include <boost/cstdint.hpp> // uint8_t, uint32_t.
+#include <boost/iostreams/checked_operations.hpp>
+#include <boost/iostreams/constants.hpp> // buffer size.
+#include <boost/iostreams/detail/adapter/non_blocking_adapter.hpp>
+#include <boost/iostreams/detail/adapter/range_adapter.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure, streamsize.
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/filter/zlib.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/putback.hpp>
+#include <boost/throw_exception.hpp>
+
+// Must come last.
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4244) // Possible truncation
+# pragma warning(disable:4251) // Missing DLL interface for std::string
+# pragma warning(disable:4309) // Truncation of constant value.
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::time_t; }
+#endif
+
+namespace boost { namespace iostreams {
+
+//------------------Definitions of constants----------------------------------//
+
+namespace gzip {
+
+using namespace boost::iostreams::zlib;
+
+ // Error codes used by gzip_error.
+
+const int zlib_error = 1;
+const int bad_crc = 2; // Recorded crc doesn't match data.
+const int bad_length = 3; // Recorded length doesn't match data.
+const int bad_header = 4; // Malformed header.
+const int bad_footer = 5; // Malformed footer.
+const int bad_method = 6; // Unsupported compression method.
+
+namespace magic {
+
+ // Magic numbers used by gzip header.
+
+const int id1 = 0x1f;
+const int id2 = 0x8b;
+
+} // End namespace magic.
+
+namespace method {
+
+ // Codes used for the 'CM' byte of the gzip header.
+
+const int deflate = 8;
+
+} // End namespace method.
+
+namespace flags {
+
+ // Codes used for the 'FLG' byte of the gzip header.
+
+const int text = 1;
+const int header_crc = 2;
+const int extra = 4;
+const int name = 8;
+const int comment = 16;
+
+} // End namespace flags.
+
+namespace extra_flags {
+
+ // Codes used for the 'XFL' byte of the gzip header.
+
+const int best_compression = 2;
+const int best_speed = 4;
+
+} // End namespace extra_flags.
+
+ // Codes used for the 'OS' byte of the gzip header.
+
+const int os_fat = 0;
+const int os_amiga = 1;
+const int os_vms = 2;
+const int os_unix = 3;
+const int os_vm_cms = 4;
+const int os_atari = 5;
+const int os_hpfs = 6;
+const int os_macintosh = 7;
+const int os_z_system = 8;
+const int os_cp_m = 9;
+const int os_tops_20 = 10;
+const int os_ntfs = 11;
+const int os_qdos = 12;
+const int os_acorn = 13;
+const int os_unknown = 255;
+
+} // End namespace gzip.
+
+//------------------Definition of gzip_params---------------------------------//
+
+//
+// Class name: gzip_params.
+// Description: Subclass of zlib_params with an additional field
+// representing a file name.
+//
+struct gzip_params : zlib_params {
+
+ // Non-explicit constructor.
+ gzip_params( int level = gzip::default_compression,
+ int method = gzip::deflated,
+ int window_bits = gzip::default_window_bits,
+ int mem_level = gzip::default_mem_level,
+ int strategy = gzip::default_strategy,
+ std::string file_name_ = "",
+ std::string comment_ = "",
+ std::time_t mtime_ = 0 )
+ : zlib_params(level, method, window_bits, mem_level, strategy),
+ file_name(file_name_), comment(comment_), mtime(mtime_)
+ { }
+ std::string file_name;
+ std::string comment;
+ std::time_t mtime;
+};
+
+//------------------Definition of gzip_error----------------------------------//
+
+//
+// Class name: gzip_error.
+// Description: Subclass of std::ios_base::failure thrown to indicate
+// zlib errors other than out-of-memory conditions.
+//
+class gzip_error : public BOOST_IOSTREAMS_FAILURE {
+public:
+ explicit gzip_error(int error)
+ : BOOST_IOSTREAMS_FAILURE("gzip error"),
+ error_(error), zlib_error_code_(zlib::okay) { }
+ explicit gzip_error(const zlib_error& e)
+ : BOOST_IOSTREAMS_FAILURE("gzip error"),
+ error_(gzip::zlib_error), zlib_error_code_(e.error())
+ { }
+ int error() const { return error_; }
+ int zlib_error_code() const { return zlib_error_code_; }
+private:
+ int error_;
+ int zlib_error_code_;
+};
+
+//------------------Definition of gzip_compressor-----------------------------//
+
+//
+// Template name: gzip_compressor
+// Description: Model of OutputFilter implementing compression in the
+// gzip format.
+//
+template<typename Alloc = std::allocator<char> >
+class basic_gzip_compressor : basic_zlib_compressor<Alloc> {
+private:
+ typedef basic_zlib_compressor<Alloc> base_type;
+public:
+ typedef char char_type;
+ struct category
+ : dual_use,
+ filter_tag,
+ multichar_tag,
+ closable_tag
+ { };
+ basic_gzip_compressor( const gzip_params& = gzip::default_compression,
+ std::streamsize buffer_size = default_device_buffer_size );
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ {
+ std::streamsize result = 0;
+
+ // Read header.
+ if (!(flags_ & f_header_done))
+ result += read_string(s, n, header_);
+
+ // Read body.
+ if (!(flags_ & f_body_done)) {
+
+ // Read from basic_zlib_filter.
+ std::streamsize amt = base_type::read(src, s + result, n - result);
+ if (amt != -1) {
+ result += amt;
+ if (amt < n - result) { // Double-check for EOF.
+ amt = base_type::read(src, s + result, n - result);
+ if (amt != -1)
+ result += amt;
+ }
+ }
+ if (amt == -1)
+ prepare_footer();
+ }
+
+ // Read footer.
+ if ((flags_ & f_body_done) != 0 && result < n)
+ result += read_string(s + result, n - result, footer_);
+
+ return result != 0 ? result : -1;
+ }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ {
+ if (!(flags_ & f_header_done)) {
+ std::streamsize amt =
+ static_cast<std::streamsize>(header_.size() - offset_);
+ offset_ += boost::iostreams::write_if(snk, header_.data() + offset_, amt);
+ if (offset_ == header_.size())
+ flags_ |= f_header_done;
+ else
+ return 0;
+ }
+ return base_type::write(snk, s, n);
+ }
+
+ template<typename Sink>
+ void close(Sink& snk, BOOST_IOS::openmode m)
+ {
+ try {
+ if (m == BOOST_IOS::out && !(flags_ & f_header_done))
+ this->write(snk, 0, 0);
+
+ // Close zlib compressor.
+ base_type::close(snk, m);
+
+ if (m == BOOST_IOS::out) {
+ if (flags_ & f_header_done) {
+
+ // Write final fields of gzip file format.
+ write_long(this->crc(), snk);
+ write_long(this->total_in(), snk);
+ }
+ }
+ } catch(...) {
+ close_impl();
+ throw;
+ }
+ close_impl();
+ }
+private:
+ static gzip_params normalize_params(gzip_params p);
+ void prepare_footer();
+ std::streamsize read_string(char* s, std::streamsize n, std::string& str);
+
+ template<typename Sink>
+ static void write_long(long n, Sink& next, boost::mpl::true_)
+ {
+ boost::iostreams::put(next, static_cast<char>(0xFF & n));
+ boost::iostreams::put(next, static_cast<char>(0xFF & (n >> 8)));
+ boost::iostreams::put(next, static_cast<char>(0xFF & (n >> 16)));
+ boost::iostreams::put(next, static_cast<char>(0xFF & (n >> 24)));
+ }
+ template<typename Sink>
+ static void write_long(long, Sink&, boost::mpl::false_)
+ {
+ }
+ template<typename Sink>
+ static void write_long(long n, Sink& next)
+ {
+ typedef typename category_of<Sink>::type category;
+ typedef is_convertible<category, output> can_write;
+ write_long(n, next, can_write());
+ }
+
+ void close_impl()
+ {
+ footer_.clear();
+ offset_ = 0;
+ flags_ = 0;
+ }
+
+ enum state_type {
+ f_header_done = 1,
+ f_body_done = f_header_done << 1,
+ f_footer_done = f_body_done << 1
+ };
+ std::string header_;
+ std::string footer_;
+ std::size_t offset_;
+ int flags_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_gzip_compressor, 1)
+
+typedef basic_gzip_compressor<> gzip_compressor;
+
+//------------------Definition of helper templates for decompression----------//
+
+namespace detail {
+
+// Processes gzip headers
+class BOOST_IOSTREAMS_DECL gzip_header {
+public:
+ gzip_header() { reset(); }
+
+ // Members for processing header data
+ void process(char c);
+ bool done() const { return state_ == s_done; }
+ void reset();
+
+ // Members for accessing header data
+ std::string file_name() const { return file_name_; }
+ std::string comment() const { return comment_; }
+ bool text() const { return (flags_ & gzip::flags::text) != 0; }
+ int os() const { return os_; }
+ std::time_t mtime() const { return mtime_; }
+private:
+ enum state_type {
+ s_id1 = 1,
+ s_id2 = s_id1 + 1,
+ s_cm = s_id2 + 1,
+ s_flg = s_cm + 1,
+ s_mtime = s_flg + 1,
+ s_xfl = s_mtime + 1,
+ s_os = s_xfl + 1,
+ s_xlen = s_os + 1,
+ s_extra = s_xlen + 1,
+ s_name = s_extra + 1,
+ s_comment = s_name + 1,
+ s_hcrc = s_comment + 1,
+ s_done = s_hcrc + 1
+ };
+ std::string file_name_;
+ std::string comment_;
+ int os_;
+ std::time_t mtime_;
+ int flags_;
+ int state_;
+ int offset_; // Offset within fixed-length region.
+ int xlen_; // Bytes remaining in extra field.
+};
+
+// Processes gzip footers
+class BOOST_IOSTREAMS_DECL gzip_footer {
+public:
+ gzip_footer() { reset(); }
+
+ // Members for processing footer data
+ void process(char c);
+ bool done() const { return state_ == s_done; }
+ void reset();
+
+ // Members for accessing footer data
+ zlib::ulong crc() const { return crc_; }
+ zlib::ulong uncompressed_size() const { return isize_; }
+private:
+ enum state_type {
+ s_crc = 1,
+ s_isize = s_crc + 1,
+ s_done = s_isize + 1
+ };
+ zlib::ulong crc_;
+ zlib::ulong isize_;
+ int state_;
+ int offset_;
+};
+
+} // End namespace boost::iostreams::detail.
+
+//------------------Definition of basic_gzip_decompressor---------------------//
+
+//
+// Template name: basic_gzip_decompressor
+// Description: Model of InputFilter implementing compression in the
+// gzip format.
+//
+template<typename Alloc = std::allocator<char> >
+class basic_gzip_decompressor : basic_zlib_decompressor<Alloc> {
+private:
+ typedef basic_zlib_decompressor<Alloc> base_type;
+ typedef typename base_type::string_type string_type;
+public:
+ typedef char char_type;
+ struct category
+ : dual_use,
+ filter_tag,
+ multichar_tag,
+ closable_tag
+ { };
+ basic_gzip_decompressor( int window_bits = gzip::default_window_bits,
+ std::streamsize buffer_size = default_device_buffer_size );
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ {
+ std::streamsize result = 0;
+ while(result < n) {
+ if(state_ == s_start) {
+ state_ = s_header;
+ header_.reset();
+ footer_.reset();
+ }
+ if (state_ == s_header) {
+ int c = s[result++];
+ header_.process(c);
+ if (header_.done())
+ state_ = s_body;
+ } else if (state_ == s_body) {
+ try {
+ std::streamsize amt =
+ base_type::write(snk, s + result, n - result);
+ result += amt;
+ if (!this->eof()) {
+ break;
+ } else {
+ state_ = s_footer;
+ }
+ } catch (const zlib_error& e) {
+ boost::throw_exception(gzip_error(e));
+ }
+ } else { // state_ == s_footer
+ if (footer_.done()) {
+ if (footer_.crc() != this->crc())
+ boost::throw_exception(gzip_error(gzip::bad_crc));
+
+ base_type::close(snk, BOOST_IOS::out);
+ state_ = s_start;
+ } else {
+ int c = s[result++];
+ footer_.process(c);
+ }
+ }
+ }
+ return result;
+ }
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ {
+ typedef char_traits<char> traits_type;
+ std::streamsize result = 0;
+ peekable_source<Source> peek(src, putback_);
+ while (result < n && state_ != s_done) {
+ if (state_ == s_start) {
+ state_ = s_header;
+ header_.reset();
+ footer_.reset();
+ }
+ if (state_ == s_header) {
+ int c = boost::iostreams::get(peek);
+ if (traits_type::is_eof(c)) {
+ boost::throw_exception(gzip_error(gzip::bad_header));
+ } else if (traits_type::would_block(c)) {
+ break;
+ }
+ header_.process(c);
+ if (header_.done())
+ state_ = s_body;
+ } else if (state_ == s_body) {
+ try {
+ std::streamsize amt =
+ base_type::read(peek, s + result, n - result);
+ if (amt != -1) {
+ result += amt;
+ if (amt < n - result)
+ break;
+ } else {
+ peek.putback(this->unconsumed_input());
+ state_ = s_footer;
+ }
+ } catch (const zlib_error& e) {
+ boost::throw_exception(gzip_error(e));
+ }
+ } else { // state_ == s_footer
+ int c = boost::iostreams::get(peek);
+ if (traits_type::is_eof(c)) {
+ boost::throw_exception(gzip_error(gzip::bad_footer));
+ } else if (traits_type::would_block(c)) {
+ break;
+ }
+ footer_.process(c);
+ if (footer_.done()) {
+ if (footer_.crc() != this->crc())
+ boost::throw_exception(gzip_error(gzip::bad_crc));
+ c = boost::iostreams::get(peek);
+ if (traits_type::is_eof(c)) {
+ state_ = s_done;
+ } else {
+ peek.putback(c);
+ base_type::close(peek, BOOST_IOS::in);
+ state_ = s_start;
+ header_.reset();
+ footer_.reset();
+ }
+ }
+ }
+ }
+ if (peek.has_unconsumed_input()) {
+ putback_ = peek.unconsumed_input();
+ } else {
+ putback_.clear();
+ }
+ return result != 0 || state_ != s_done ?
+ result :
+ -1;
+ }
+
+ template<typename Source>
+ void close(Source& src, BOOST_IOS::openmode m)
+ {
+ try {
+ base_type::close(src, m);
+ } catch (const zlib_error& e) {
+ state_ = s_start;
+ boost::throw_exception(gzip_error(e));
+ }
+ if (m == BOOST_IOS::out) {
+ if (state_ == s_start || state_ == s_header)
+ boost::throw_exception(gzip_error(gzip::bad_header));
+ else if (state_ == s_body)
+ boost::throw_exception(gzip_error(gzip::bad_footer));
+ else if (state_ == s_footer) {
+ if (!footer_.done())
+ boost::throw_exception(gzip_error(gzip::bad_footer));
+ else if(footer_.crc() != this->crc())
+ boost::throw_exception(gzip_error(gzip::bad_crc));
+ } else {
+ BOOST_ASSERT(!"Bad state");
+ }
+ }
+ state_ = s_start;
+ }
+
+ std::string file_name() const { return header_.file_name(); }
+ std::string comment() const { return header_.comment(); }
+ bool text() const { return header_.text(); }
+ int os() const { return header_.os(); }
+ std::time_t mtime() const { return header_.mtime(); }
+private:
+ static gzip_params make_params(int window_bits);
+
+ // Source adapter allowing an arbitrary character sequence to be put back.
+ template<typename Source>
+ struct peekable_source {
+ typedef char char_type;
+ struct category : source_tag, peekable_tag { };
+ explicit peekable_source(Source& src, const string_type& putback = "")
+ : src_(src), putback_(putback), offset_(0)
+ { }
+ std::streamsize read(char* s, std::streamsize n)
+ {
+ std::streamsize result = 0;
+
+ // Copy characters from putback buffer
+ std::streamsize pbsize =
+ static_cast<std::streamsize>(putback_.size());
+ if (offset_ < pbsize) {
+ result = (std::min)(n, pbsize - offset_);
+ BOOST_IOSTREAMS_CHAR_TRAITS(char)::copy(
+ s, putback_.data() + offset_, result);
+ offset_ += result;
+ if (result == n)
+ return result;
+ }
+
+ // Read characters from src_
+ std::streamsize amt =
+ boost::iostreams::read(src_, s + result, n - result);
+ return amt != -1 ?
+ result + amt :
+ result ? result : -1;
+ }
+ bool putback(char c)
+ {
+ if (offset_) {
+ putback_[--offset_] = c;
+ } else {
+ boost::throw_exception(
+ boost::iostreams::detail::bad_putback());
+ }
+ return true;
+ }
+ void putback(const string_type& s)
+ {
+ putback_.replace(0, offset_, s);
+ offset_ = 0;
+ }
+
+ // Returns true if some characters have been putback but not re-read.
+ bool has_unconsumed_input() const
+ {
+ return offset_ < static_cast<std::streamsize>(putback_.size());
+ }
+
+ // Returns the sequence of characters that have been put back but not re-read.
+ string_type unconsumed_input() const
+ {
+ return string_type(putback_, offset_, putback_.size() - offset_);
+ }
+ Source& src_;
+ string_type putback_;
+ std::streamsize offset_;
+ };
+
+ enum state_type {
+ s_start = 1,
+ s_header = s_start + 1,
+ s_body = s_header + 1,
+ s_footer = s_body + 1,
+ s_done = s_footer + 1
+ };
+ detail::gzip_header header_;
+ detail::gzip_footer footer_;
+ string_type putback_;
+ int state_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_gzip_decompressor, 1)
+
+typedef basic_gzip_decompressor<> gzip_decompressor;
+
+//------------------Implementation of gzip_compressor-------------------------//
+
+template<typename Alloc>
+basic_gzip_compressor<Alloc>::basic_gzip_compressor
+ (const gzip_params& p, std::streamsize buffer_size)
+ : base_type(normalize_params(p), buffer_size),
+ offset_(0), flags_(0)
+{
+ // Calculate gzip header.
+ bool has_name = !p.file_name.empty();
+ bool has_comment = !p.comment.empty();
+
+ std::string::size_type length =
+ 10 +
+ (has_name ? p.file_name.size() + 1 : 0) +
+ (has_comment ? p.comment.size() + 1 : 0);
+ // + 2; // Header crc confuses gunzip.
+ int flags =
+ //gzip::flags::header_crc +
+ (has_name ? gzip::flags::name : 0) +
+ (has_comment ? gzip::flags::comment : 0);
+ int extra_flags =
+ ( p.level == zlib::best_compression ?
+ gzip::extra_flags::best_compression :
+ 0 ) +
+ ( p.level == zlib::best_speed ?
+ gzip::extra_flags::best_speed :
+ 0 );
+ header_.reserve(length);
+ header_ += gzip::magic::id1; // ID1.
+ header_ += static_cast<char>(gzip::magic::id2); // ID2.
+ header_ += gzip::method::deflate; // CM.
+ header_ += static_cast<char>(flags); // FLG.
+ header_ += static_cast<char>(0xFF & p.mtime); // MTIME.
+ header_ += static_cast<char>(0xFF & (p.mtime >> 8));
+ header_ += static_cast<char>(0xFF & (p.mtime >> 16));
+ header_ += static_cast<char>(0xFF & (p.mtime >> 24));
+ header_ += static_cast<char>(extra_flags); // XFL.
+ header_ += static_cast<char>(gzip::os_unknown); // OS.
+ if (has_name) {
+ header_ += p.file_name;
+ header_ += '\0';
+ }
+ if (has_comment) {
+ header_ += p.comment;
+ header_ += '\0';
+ }
+}
+
+template<typename Alloc>
+gzip_params basic_gzip_compressor<Alloc>::normalize_params(gzip_params p)
+{
+ p.noheader = true;
+ p.calculate_crc = true;
+ return p;
+}
+
+template<typename Alloc>
+void basic_gzip_compressor<Alloc>::prepare_footer()
+{
+ boost::iostreams::back_insert_device<std::string> out(footer_);
+ write_long(this->crc(), out);
+ write_long(this->total_in(), out);
+ flags_ |= f_body_done;
+ offset_ = 0;
+}
+
+template<typename Alloc>
+std::streamsize basic_gzip_compressor<Alloc>::read_string
+ (char* s, std::streamsize n, std::string& str)
+{
+ std::streamsize avail =
+ static_cast<std::streamsize>(str.size() - offset_);
+ std::streamsize amt = (std::min)(avail, n);
+ std::copy( str.data() + offset_,
+ str.data() + offset_ + amt,
+ s );
+ offset_ += amt;
+ if ( !(flags_ & f_header_done) &&
+ offset_ == static_cast<std::size_t>(str.size()) )
+ {
+ flags_ |= f_header_done;
+ }
+ return amt;
+}
+
+//------------------Implementation of gzip_decompressor-----------------------//
+
+template<typename Alloc>
+basic_gzip_decompressor<Alloc>::basic_gzip_decompressor
+ (int window_bits, std::streamsize buffer_size)
+ : base_type(make_params(window_bits), buffer_size),
+ state_(s_start)
+ { }
+
+template<typename Alloc>
+gzip_params basic_gzip_decompressor<Alloc>::make_params(int window_bits)
+{
+ gzip_params p;
+ p.window_bits = window_bits;
+ p.noheader = true;
+ p.calculate_crc = true;
+ return p;
+}
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_GZIP_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/lzma.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/lzma.hpp
new file mode 100644
index 0000000000..94cd2b3b54
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/lzma.hpp
@@ -0,0 +1,372 @@
+// (C) Copyright Milan Svoboda 2008.
+// Originally developed under the fusecompress project.
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Note: custom allocators are not supported on VC6, since that compiler
+// had trouble finding the function lzma_base::do_init.
+
+#ifndef BOOST_IOSTREAMS_LZMA_HPP_INCLUDED
+#define BOOST_IOSTREAMS_LZMA_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <cassert>
+#include <iosfwd> // streamsize.
+#include <memory> // allocator, bad_alloc.
+#include <new>
+#include <boost/config.hpp> // MSVC, STATIC_CONSTANT, DEDUCED_TYPENAME, DINKUM.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp> // buffer size.
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure, streamsize.
+#include <boost/iostreams/filter/symmetric.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+// Must come last.
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4251 4231 4660) // Dependencies not exported.
+#endif
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace lzma {
+
+typedef void* (*alloc_func)(void*, size_t, size_t);
+typedef void (*free_func)(void*, void*);
+
+ // Compression levels
+
+BOOST_IOSTREAMS_DECL extern const uint32_t no_compression;
+BOOST_IOSTREAMS_DECL extern const uint32_t best_speed;
+BOOST_IOSTREAMS_DECL extern const uint32_t best_compression;
+BOOST_IOSTREAMS_DECL extern const uint32_t default_compression;
+
+ // Status codes
+
+BOOST_IOSTREAMS_DECL extern const int okay;
+BOOST_IOSTREAMS_DECL extern const int stream_end;
+BOOST_IOSTREAMS_DECL extern const int unsupported_check;
+BOOST_IOSTREAMS_DECL extern const int mem_error;
+BOOST_IOSTREAMS_DECL extern const int options_error;
+BOOST_IOSTREAMS_DECL extern const int data_error;
+BOOST_IOSTREAMS_DECL extern const int buf_error;
+BOOST_IOSTREAMS_DECL extern const int prog_error;
+
+ // Flush codes
+
+BOOST_IOSTREAMS_DECL extern const int finish;
+BOOST_IOSTREAMS_DECL extern const int full_flush;
+BOOST_IOSTREAMS_DECL extern const int sync_flush;
+BOOST_IOSTREAMS_DECL extern const int run;
+
+ // Code for current OS
+
+ // Null pointer constant.
+
+const int null = 0;
+
+ // Default values
+
+} // End namespace lzma.
+
+//
+// Class name: lzma_params.
+// Description: Encapsulates the parameters passed to lzmadec_init
+// to customize compression and decompression.
+//
+struct lzma_params {
+
+ // Non-explicit constructor.
+ lzma_params( uint32_t level = lzma::default_compression )
+ : level(level)
+ { }
+ uint32_t level;
+};
+
+//
+// Class name: lzma_error.
+// Description: Subclass of std::ios::failure thrown to indicate
+// lzma errors other than out-of-memory conditions.
+//
+class BOOST_IOSTREAMS_DECL lzma_error : public BOOST_IOSTREAMS_FAILURE {
+public:
+ explicit lzma_error(int error);
+ int error() const { return error_; }
+ static void check BOOST_PREVENT_MACRO_SUBSTITUTION(int error);
+private:
+ int error_;
+};
+
+namespace detail {
+
+template<typename Alloc>
+struct lzma_allocator_traits {
+#ifndef BOOST_NO_STD_ALLOCATOR
+#if defined(BOOST_NO_CXX11_ALLOCATOR)
+ typedef typename Alloc::template rebind<char>::other type;
+#else
+ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<char> type;
+#endif
+#else
+ typedef std::allocator<char> type;
+#endif
+};
+
+template< typename Alloc,
+ typename Base = // VC6 workaround (C2516)
+ BOOST_DEDUCED_TYPENAME lzma_allocator_traits<Alloc>::type >
+struct lzma_allocator : private Base {
+private:
+#if defined(BOOST_NO_CXX11_ALLOCATOR) || defined(BOOST_NO_STD_ALLOCATOR)
+ typedef typename Base::size_type size_type;
+#else
+ typedef typename std::allocator_traits<Base>::size_type size_type;
+#endif
+public:
+ BOOST_STATIC_CONSTANT(bool, custom =
+ (!is_same<std::allocator<char>, Base>::value));
+ typedef typename lzma_allocator_traits<Alloc>::type allocator_type;
+ static void* allocate(void* self, size_t items, size_t size);
+ static void deallocate(void* self, void* address);
+};
+
+class BOOST_IOSTREAMS_DECL lzma_base {
+public:
+ typedef char char_type;
+protected:
+ lzma_base();
+ ~lzma_base();
+ void* stream() { return stream_; }
+ template<typename Alloc>
+ void init( const lzma_params& p,
+ bool compress,
+ lzma_allocator<Alloc>& zalloc )
+ {
+ bool custom = lzma_allocator<Alloc>::custom;
+ do_init( p, compress,
+ custom ? lzma_allocator<Alloc>::allocate : 0,
+ custom ? lzma_allocator<Alloc>::deallocate : 0,
+ &zalloc );
+ }
+ void before( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end );
+ void after( const char*& src_begin, char*& dest_begin,
+ bool compress );
+ int deflate(int action);
+ int inflate(int action);
+ void reset(bool compress, bool realloc);
+private:
+ void do_init( const lzma_params& p, bool compress,
+ lzma::alloc_func,
+ lzma::free_func,
+ void* derived );
+ void* stream_; // Actual type: lzmadec_stream*.
+ uint32_t level;
+};
+
+//
+// Template name: lzma_compressor_impl
+// Description: Model of C-Style Filter implementing compression by
+// delegating to the lzma function deflate.
+//
+template<typename Alloc = std::allocator<char> >
+class lzma_compressor_impl : public lzma_base, public lzma_allocator<Alloc> {
+public:
+ lzma_compressor_impl(const lzma_params& = lzma::default_compression);
+ ~lzma_compressor_impl();
+ bool filter( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush );
+ void close();
+};
+
+//
+// Template name: lzma_compressor_impl
+// Description: Model of C-Style Filte implementing decompression by
+// delegating to the lzma function inflate.
+//
+template<typename Alloc = std::allocator<char> >
+class lzma_decompressor_impl : public lzma_base, public lzma_allocator<Alloc> {
+public:
+ lzma_decompressor_impl(const lzma_params&);
+ lzma_decompressor_impl();
+ ~lzma_decompressor_impl();
+ bool filter( const char*& begin_in, const char* end_in,
+ char*& begin_out, char* end_out, bool flush );
+ void close();
+};
+
+} // End namespace detail.
+
+//
+// Template name: lzma_compressor
+// Description: Model of InputFilter and OutputFilter implementing
+// compression using lzma.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_lzma_compressor
+ : symmetric_filter<detail::lzma_compressor_impl<Alloc>, Alloc>
+{
+private:
+ typedef detail::lzma_compressor_impl<Alloc> impl_type;
+ typedef symmetric_filter<impl_type, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ basic_lzma_compressor( const lzma_params& = lzma::default_compression,
+ std::streamsize buffer_size = default_device_buffer_size );
+};
+BOOST_IOSTREAMS_PIPABLE(basic_lzma_compressor, 1)
+
+typedef basic_lzma_compressor<> lzma_compressor;
+
+//
+// Template name: lzma_decompressor
+// Description: Model of InputFilter and OutputFilter implementing
+// decompression using lzma.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_lzma_decompressor
+ : symmetric_filter<detail::lzma_decompressor_impl<Alloc>, Alloc>
+{
+private:
+ typedef detail::lzma_decompressor_impl<Alloc> impl_type;
+ typedef symmetric_filter<impl_type, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ basic_lzma_decompressor( std::streamsize buffer_size = default_device_buffer_size );
+ basic_lzma_decompressor( const lzma_params& p,
+ std::streamsize buffer_size = default_device_buffer_size );
+};
+BOOST_IOSTREAMS_PIPABLE(basic_lzma_decompressor, 1)
+
+typedef basic_lzma_decompressor<> lzma_decompressor;
+
+//----------------------------------------------------------------------------//
+
+//------------------Implementation of lzma_allocator--------------------------//
+
+namespace detail {
+
+template<typename Alloc, typename Base>
+void* lzma_allocator<Alloc, Base>::allocate
+ (void* self, size_t items, size_t size)
+{
+ size_type len = items * size;
+ char* ptr =
+ static_cast<allocator_type*>(self)->allocate
+ (len + sizeof(size_type)
+ #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+ , (char*)0
+ #endif
+ );
+ *reinterpret_cast<size_type*>(ptr) = len;
+ return ptr + sizeof(size_type);
+}
+
+template<typename Alloc, typename Base>
+void lzma_allocator<Alloc, Base>::deallocate(void* self, void* address)
+{
+ char* ptr = reinterpret_cast<char*>(address) - sizeof(size_type);
+ size_type len = *reinterpret_cast<size_type*>(ptr) + sizeof(size_type);
+ static_cast<allocator_type*>(self)->deallocate(ptr, len);
+}
+
+//------------------Implementation of lzma_compressor_impl--------------------//
+
+template<typename Alloc>
+lzma_compressor_impl<Alloc>::lzma_compressor_impl(const lzma_params& p)
+{ init(p, true, static_cast<lzma_allocator<Alloc>&>(*this)); }
+
+template<typename Alloc>
+lzma_compressor_impl<Alloc>::~lzma_compressor_impl()
+{ reset(true, false); }
+
+template<typename Alloc>
+bool lzma_compressor_impl<Alloc>::filter
+ ( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush )
+{
+ before(src_begin, src_end, dest_begin, dest_end);
+ int result = deflate(flush ? lzma::finish : lzma::run);
+ after(src_begin, dest_begin, true);
+ lzma_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(result);
+ return result != lzma::stream_end;
+}
+
+template<typename Alloc>
+void lzma_compressor_impl<Alloc>::close() { reset(true, true); }
+
+//------------------Implementation of lzma_decompressor_impl------------------//
+
+template<typename Alloc>
+lzma_decompressor_impl<Alloc>::lzma_decompressor_impl(const lzma_params& p)
+{ init(p, false, static_cast<lzma_allocator<Alloc>&>(*this)); }
+
+template<typename Alloc>
+lzma_decompressor_impl<Alloc>::~lzma_decompressor_impl()
+{ reset(false, false); }
+
+template<typename Alloc>
+lzma_decompressor_impl<Alloc>::lzma_decompressor_impl()
+{
+ lzma_params p;
+ init(p, false, static_cast<lzma_allocator<Alloc>&>(*this));
+}
+
+template<typename Alloc>
+bool lzma_decompressor_impl<Alloc>::filter
+ ( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush )
+{
+ before(src_begin, src_end, dest_begin, dest_end);
+ int result = inflate(flush ? lzma::finish : lzma::run);
+ after(src_begin, dest_begin, false);
+ lzma_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(result);
+ return result != lzma::stream_end;
+}
+
+template<typename Alloc>
+void lzma_decompressor_impl<Alloc>::close() { reset(false, true); }
+
+} // End namespace detail.
+
+//------------------Implementation of lzma_compressor-----------------------//
+
+template<typename Alloc>
+basic_lzma_compressor<Alloc>::basic_lzma_compressor
+ (const lzma_params& p, std::streamsize buffer_size)
+ : base_type(buffer_size, p) { }
+
+//------------------Implementation of lzma_decompressor-----------------------//
+
+template<typename Alloc>
+basic_lzma_decompressor<Alloc>::basic_lzma_decompressor
+ (std::streamsize buffer_size)
+ : base_type(buffer_size) { }
+
+template<typename Alloc>
+basic_lzma_decompressor<Alloc>::basic_lzma_decompressor
+ (const lzma_params& p, std::streamsize buffer_size)
+ : base_type(buffer_size, p) { }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // Pops abi_suffix.hpp pragmas.
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_LZMA_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/symmetric.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/symmetric.hpp
new file mode 100644
index 0000000000..f18089f4fb
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/symmetric.hpp
@@ -0,0 +1,311 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definitions of the class templates symmetric_filter,
+// which models DualUseFilter based on a model of the Symmetric Filter.
+
+//
+// Roughly, a Symmetric Filter is a class type with the following interface:
+//
+// struct symmetric_filter {
+// typedef xxx char_type;
+//
+// bool filter( const char*& begin_in, const char* end_in,
+// char*& begin_out, char* end_out, bool flush )
+// {
+// // Consume as many characters as possible from the interval
+// // [begin_in, end_in), without exhausting the output range
+// // [begin_out, end_out). If flush is true, write as mush output
+// // as possible.
+// // A return value of true indicates that filter should be called
+// // again. More precisely, if flush is false, a return value of
+// // false indicates that the natural end of stream has been reached
+// // and that all filtered data has been forwarded; if flush is
+// // true, a return value of false indicates that all filtered data
+// // has been forwarded.
+// }
+// void close() { /* Reset filter's state. */ }
+// };
+//
+// Symmetric Filter filters need not be CopyConstructable.
+//
+
+#ifndef BOOST_IOSTREAMS_SYMMETRIC_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SYMMETRIC_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <memory> // allocator.
+#include <boost/config.hpp> // BOOST_DEDUCED_TYPENAME.
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/constants.hpp> // buffer size.
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/limits.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+#include <boost/iostreams/detail/template_params.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp> // read, write.
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/shared_ptr.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+template< typename SymmetricFilter,
+ typename Alloc =
+ std::allocator<
+ BOOST_DEDUCED_TYPENAME char_type_of<SymmetricFilter>::type
+ > >
+class symmetric_filter {
+public:
+ typedef typename char_type_of<SymmetricFilter>::type char_type;
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) traits_type;
+ typedef std::basic_string<char_type, traits_type, Alloc> string_type;
+ struct category
+ : dual_use,
+ filter_tag,
+ multichar_tag,
+ closable_tag
+ { };
+
+ // Expands to a sequence of ctors which forward to impl.
+ #define BOOST_PP_LOCAL_MACRO(n) \
+ BOOST_IOSTREAMS_TEMPLATE_PARAMS(n, T) \
+ explicit symmetric_filter( \
+ std::streamsize buffer_size BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM_BINARY_PARAMS(n, const T, &t) ) \
+ : pimpl_(new impl(buffer_size BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM_PARAMS(n, t))) \
+ { BOOST_ASSERT(buffer_size > 0); } \
+ /**/
+ #define BOOST_PP_LOCAL_LIMITS (0, BOOST_IOSTREAMS_MAX_FORWARDING_ARITY)
+ #include BOOST_PP_LOCAL_ITERATE()
+ #undef BOOST_PP_LOCAL_MACRO
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ {
+ using namespace std;
+ if (!(state() & f_read))
+ begin_read();
+
+ buffer_type& buf = pimpl_->buf_;
+ int status = (state() & f_eof) != 0 ? f_eof : f_good;
+ char_type *next_s = s,
+ *end_s = s + n;
+ while (true)
+ {
+ // Invoke filter if there are unconsumed characters in buffer or if
+ // filter must be flushed.
+ bool flush = status == f_eof;
+ if (buf.ptr() != buf.eptr() || flush) {
+ const char_type* next = buf.ptr();
+ bool done =
+ !filter().filter(next, buf.eptr(), next_s, end_s, flush);
+ buf.ptr() = buf.data() + (next - buf.data());
+ if (done)
+ return detail::check_eof(
+ static_cast<std::streamsize>(next_s - s)
+ );
+ }
+
+ // If no more characters are available without blocking, or
+ // if read request has been satisfied, return.
+ if ( (status == f_would_block && buf.ptr() == buf.eptr()) ||
+ next_s == end_s )
+ {
+ return static_cast<std::streamsize>(next_s - s);
+ }
+
+ // Fill buffer.
+ if (status == f_good)
+ status = fill(src);
+ }
+ }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ {
+ if (!(state() & f_write))
+ begin_write();
+
+ buffer_type& buf = pimpl_->buf_;
+ const char_type *next_s, *end_s;
+ for (next_s = s, end_s = s + n; next_s != end_s; ) {
+ if (buf.ptr() == buf.eptr() && !flush(snk))
+ break;
+ if(!filter().filter(next_s, end_s, buf.ptr(), buf.eptr(), false)) {
+ flush(snk);
+ break;
+ }
+ }
+ return static_cast<std::streamsize>(next_s - s);
+ }
+
+ template<typename Sink>
+ void close(Sink& snk, BOOST_IOS::openmode mode)
+ {
+ if (mode == BOOST_IOS::out) {
+
+ if (!(state() & f_write))
+ begin_write();
+
+ // Repeatedly invoke filter() with no input.
+ try {
+ buffer_type& buf = pimpl_->buf_;
+ char_type dummy;
+ const char_type* end = &dummy;
+ bool again = true;
+ while (again) {
+ if (buf.ptr() != buf.eptr())
+ again = filter().filter( end, end, buf.ptr(),
+ buf.eptr(), true );
+ flush(snk);
+ }
+ } catch (...) {
+ try { close_impl(); } catch (...) { }
+ throw;
+ }
+ close_impl();
+ } else {
+ close_impl();
+ }
+ }
+ SymmetricFilter& filter() { return *pimpl_; }
+ string_type unconsumed_input() const;
+
+// Give impl access to buffer_type on Tru64
+#if !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+ private:
+#endif
+ typedef detail::buffer<char_type, Alloc> buffer_type;
+private:
+ buffer_type& buf() { return pimpl_->buf_; }
+ const buffer_type& buf() const { return pimpl_->buf_; }
+ int& state() { return pimpl_->state_; }
+ void begin_read();
+ void begin_write();
+
+ template<typename Source>
+ int fill(Source& src)
+ {
+ std::streamsize amt = iostreams::read(src, buf().data(), buf().size());
+ if (amt == -1) {
+ state() |= f_eof;
+ return f_eof;
+ }
+ buf().set(0, amt);
+ return amt != 0 ? f_good : f_would_block;
+ }
+
+ // Attempts to write the contents of the buffer the given Sink.
+ // Returns true if at least on character was written.
+ template<typename Sink>
+ bool flush(Sink& snk)
+ {
+ typedef typename iostreams::category_of<Sink>::type category;
+ typedef is_convertible<category, output> can_write;
+ return flush(snk, can_write());
+ }
+
+ template<typename Sink>
+ bool flush(Sink& snk, mpl::true_)
+ {
+ std::streamsize amt =
+ static_cast<std::streamsize>(buf().ptr() - buf().data());
+ std::streamsize result =
+ boost::iostreams::write(snk, buf().data(), amt);
+ if (result < amt && result > 0)
+ traits_type::move(buf().data(), buf().data() + result, amt - result);
+ buf().set(amt - result, buf().size());
+ return result != 0;
+ }
+
+ template<typename Sink>
+ bool flush(Sink&, mpl::false_) { return true;}
+
+ void close_impl();
+
+ enum flag_type {
+ f_read = 1,
+ f_write = f_read << 1,
+ f_eof = f_write << 1,
+ f_good,
+ f_would_block
+ };
+
+ struct impl : SymmetricFilter {
+
+ // Expands to a sequence of ctors which forward to SymmetricFilter.
+ #define BOOST_PP_LOCAL_MACRO(n) \
+ BOOST_IOSTREAMS_TEMPLATE_PARAMS(n, T) \
+ impl( std::streamsize buffer_size BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM_BINARY_PARAMS(n, const T, &t) ) \
+ : SymmetricFilter(BOOST_PP_ENUM_PARAMS(n, t)), \
+ buf_(buffer_size), state_(0) \
+ { } \
+ /**/
+ #define BOOST_PP_LOCAL_LIMITS (0, BOOST_IOSTREAMS_MAX_FORWARDING_ARITY)
+ #include BOOST_PP_LOCAL_ITERATE()
+ #undef BOOST_PP_LOCAL_MACRO
+
+ buffer_type buf_;
+ int state_;
+ };
+
+ shared_ptr<impl> pimpl_;
+};
+BOOST_IOSTREAMS_PIPABLE(symmetric_filter, 2)
+
+//------------------Implementation of symmetric_filter----------------//
+
+template<typename SymmetricFilter, typename Alloc>
+void symmetric_filter<SymmetricFilter, Alloc>::begin_read()
+{
+ BOOST_ASSERT(!(state() & f_write));
+ state() |= f_read;
+ buf().set(0, 0);
+}
+
+template<typename SymmetricFilter, typename Alloc>
+void symmetric_filter<SymmetricFilter, Alloc>::begin_write()
+{
+ BOOST_ASSERT(!(state() & f_read));
+ state() |= f_write;
+ buf().set(0, buf().size());
+}
+
+template<typename SymmetricFilter, typename Alloc>
+void symmetric_filter<SymmetricFilter, Alloc>::close_impl()
+{
+ state() = 0;
+ buf().set(0, 0);
+ filter().close();
+}
+
+template<typename SymmetricFilter, typename Alloc>
+typename symmetric_filter<SymmetricFilter, Alloc>::string_type
+symmetric_filter<SymmetricFilter, Alloc>::unconsumed_input() const
+{ return string_type(buf().ptr(), buf().eptr()); }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_SYMMETRIC_FILTER_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/zlib.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/zlib.hpp
new file mode 100644
index 0000000000..e57870a510
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/filter/zlib.hpp
@@ -0,0 +1,431 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Note: custom allocators are not supported on VC6, since that compiler
+// had trouble finding the function zlib_base::do_init.
+
+#ifndef BOOST_IOSTREAMS_ZLIB_HPP_INCLUDED
+#define BOOST_IOSTREAMS_ZLIB_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <cassert>
+#include <iosfwd> // streamsize.
+#include <memory> // allocator, bad_alloc.
+#include <new>
+#include <boost/config.hpp> // MSVC, STATIC_CONSTANT, DEDUCED_TYPENAME, DINKUM.
+#include <boost/cstdint.hpp> // uint*_t
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp> // buffer size.
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/config/zlib.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure, streamsize.
+#include <boost/iostreams/filter/symmetric.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+// Must come last.
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4251 4275 4231 4660) // Dependencies not exported.
+#endif
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace zlib {
+ // Typedefs
+
+typedef uint32_t uint;
+typedef uint8_t byte;
+typedef uint32_t ulong;
+
+// Prefix 'x' prevents symbols from being redefined when Z_PREFIX is defined
+typedef void* (*xalloc_func)(void*, zlib::uint, zlib::uint);
+typedef void (*xfree_func)(void*, void*);
+
+ // Compression levels
+
+BOOST_IOSTREAMS_DECL extern const int no_compression;
+BOOST_IOSTREAMS_DECL extern const int best_speed;
+BOOST_IOSTREAMS_DECL extern const int best_compression;
+BOOST_IOSTREAMS_DECL extern const int default_compression;
+
+ // Compression methods
+
+BOOST_IOSTREAMS_DECL extern const int deflated;
+
+ // Compression strategies
+
+BOOST_IOSTREAMS_DECL extern const int default_strategy;
+BOOST_IOSTREAMS_DECL extern const int filtered;
+BOOST_IOSTREAMS_DECL extern const int huffman_only;
+
+ // Status codes
+
+BOOST_IOSTREAMS_DECL extern const int okay;
+BOOST_IOSTREAMS_DECL extern const int stream_end;
+BOOST_IOSTREAMS_DECL extern const int stream_error;
+BOOST_IOSTREAMS_DECL extern const int version_error;
+BOOST_IOSTREAMS_DECL extern const int data_error;
+BOOST_IOSTREAMS_DECL extern const int mem_error;
+BOOST_IOSTREAMS_DECL extern const int buf_error;
+
+ // Flush codes
+
+BOOST_IOSTREAMS_DECL extern const int finish;
+BOOST_IOSTREAMS_DECL extern const int no_flush;
+BOOST_IOSTREAMS_DECL extern const int sync_flush;
+
+ // Code for current OS
+
+//BOOST_IOSTREAMS_DECL extern const int os_code;
+
+ // Null pointer constant.
+
+const int null = 0;
+
+ // Default values
+
+const int default_window_bits = 15;
+const int default_mem_level = 8;
+const bool default_crc = false;
+const bool default_noheader = false;
+
+} // End namespace zlib.
+
+//
+// Class name: zlib_params.
+// Description: Encapsulates the parameters passed to deflateInit2
+// and inflateInit2 to customize compression and decompression.
+//
+struct zlib_params {
+
+ // Non-explicit constructor.
+ zlib_params( int level_ = zlib::default_compression,
+ int method_ = zlib::deflated,
+ int window_bits_ = zlib::default_window_bits,
+ int mem_level_ = zlib::default_mem_level,
+ int strategy_ = zlib::default_strategy,
+ bool noheader_ = zlib::default_noheader,
+ bool calculate_crc_ = zlib::default_crc )
+ : level(level_), method(method_), window_bits(window_bits_),
+ mem_level(mem_level_), strategy(strategy_),
+ noheader(noheader_), calculate_crc(calculate_crc_)
+ { }
+ int level;
+ int method;
+ int window_bits;
+ int mem_level;
+ int strategy;
+ bool noheader;
+ bool calculate_crc;
+};
+
+//
+// Class name: zlib_error.
+// Description: Subclass of std::ios::failure thrown to indicate
+// zlib errors other than out-of-memory conditions.
+//
+class BOOST_IOSTREAMS_DECL zlib_error : public BOOST_IOSTREAMS_FAILURE {
+public:
+ explicit zlib_error(int error);
+ int error() const { return error_; }
+ static void check BOOST_PREVENT_MACRO_SUBSTITUTION(int error);
+private:
+ int error_;
+};
+
+namespace detail {
+
+template<typename Alloc>
+struct zlib_allocator_traits {
+#ifndef BOOST_NO_STD_ALLOCATOR
+#if defined(BOOST_NO_CXX11_ALLOCATOR)
+ typedef typename Alloc::template rebind<char>::other type;
+#else
+ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<char> type;
+#endif
+#else
+ typedef std::allocator<char> type;
+#endif
+};
+
+template< typename Alloc,
+ typename Base = // VC6 workaround (C2516)
+ BOOST_DEDUCED_TYPENAME zlib_allocator_traits<Alloc>::type >
+struct zlib_allocator : private Base {
+private:
+#if defined(BOOST_NO_CXX11_ALLOCATOR) || defined(BOOST_NO_STD_ALLOCATOR)
+ typedef typename Base::size_type size_type;
+#else
+ typedef typename std::allocator_traits<Base>::size_type size_type;
+#endif
+public:
+ BOOST_STATIC_CONSTANT(bool, custom =
+ (!is_same<std::allocator<char>, Base>::value));
+ typedef typename zlib_allocator_traits<Alloc>::type allocator_type;
+ static void* allocate(void* self, zlib::uint items, zlib::uint size);
+ static void deallocate(void* self, void* address);
+};
+
+class BOOST_IOSTREAMS_DECL zlib_base {
+public:
+ typedef char char_type;
+protected:
+ zlib_base();
+ ~zlib_base();
+ void* stream() { return stream_; }
+ template<typename Alloc>
+ void init( const zlib_params& p,
+ bool compress,
+ zlib_allocator<Alloc>& zalloc )
+ {
+ bool custom = zlib_allocator<Alloc>::custom;
+ do_init( p, compress,
+ custom ? zlib_allocator<Alloc>::allocate : 0,
+ custom ? zlib_allocator<Alloc>::deallocate : 0,
+ &zalloc );
+ }
+ void before( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end );
+ void after( const char*& src_begin, char*& dest_begin,
+ bool compress );
+ int xdeflate(int flush); // Prefix 'x' prevents symbols from being
+ int xinflate(int flush); // redefined when Z_PREFIX is defined
+ void reset(bool compress, bool realloc);
+public:
+ zlib::ulong crc() const { return crc_; }
+ int total_in() const { return total_in_; }
+ int total_out() const { return total_out_; }
+private:
+ void do_init( const zlib_params& p, bool compress,
+ zlib::xalloc_func,
+ zlib::xfree_func,
+ void* derived );
+ void* stream_; // Actual type: z_stream*.
+ bool calculate_crc_;
+ zlib::ulong crc_;
+ zlib::ulong crc_imp_;
+ int total_in_;
+ int total_out_;
+};
+
+//
+// Template name: zlib_compressor_impl
+// Description: Model of C-Style Filte implementing compression by
+// delegating to the zlib function deflate.
+//
+template<typename Alloc = std::allocator<char> >
+class zlib_compressor_impl : public zlib_base, public zlib_allocator<Alloc> {
+public:
+ zlib_compressor_impl(const zlib_params& = zlib::default_compression);
+ ~zlib_compressor_impl();
+ bool filter( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush );
+ void close();
+};
+
+//
+// Template name: zlib_compressor
+// Description: Model of C-Style Filte implementing decompression by
+// delegating to the zlib function inflate.
+//
+template<typename Alloc = std::allocator<char> >
+class zlib_decompressor_impl : public zlib_base, public zlib_allocator<Alloc> {
+public:
+ zlib_decompressor_impl(const zlib_params&);
+ zlib_decompressor_impl(int window_bits = zlib::default_window_bits);
+ ~zlib_decompressor_impl();
+ bool filter( const char*& begin_in, const char* end_in,
+ char*& begin_out, char* end_out, bool flush );
+ void close();
+ bool eof() const { return eof_; }
+private:
+ bool eof_;
+};
+
+} // End namespace detail.
+
+//
+// Template name: zlib_compressor
+// Description: Model of InputFilter and OutputFilter implementing
+// compression using zlib.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_zlib_compressor
+ : symmetric_filter<detail::zlib_compressor_impl<Alloc>, Alloc>
+{
+private:
+ typedef detail::zlib_compressor_impl<Alloc> impl_type;
+ typedef symmetric_filter<impl_type, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ basic_zlib_compressor( const zlib_params& = zlib::default_compression,
+ std::streamsize buffer_size = default_device_buffer_size );
+ zlib::ulong crc() { return this->filter().crc(); }
+ int total_in() { return this->filter().total_in(); }
+};
+BOOST_IOSTREAMS_PIPABLE(basic_zlib_compressor, 1)
+
+typedef basic_zlib_compressor<> zlib_compressor;
+
+//
+// Template name: zlib_decompressor
+// Description: Model of InputFilter and OutputFilter implementing
+// decompression using zlib.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_zlib_decompressor
+ : symmetric_filter<detail::zlib_decompressor_impl<Alloc>, Alloc>
+{
+private:
+ typedef detail::zlib_decompressor_impl<Alloc> impl_type;
+ typedef symmetric_filter<impl_type, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ basic_zlib_decompressor( int window_bits = zlib::default_window_bits,
+ std::streamsize buffer_size = default_device_buffer_size );
+ basic_zlib_decompressor( const zlib_params& p,
+ std::streamsize buffer_size = default_device_buffer_size );
+ zlib::ulong crc() { return this->filter().crc(); }
+ int total_out() { return this->filter().total_out(); }
+ bool eof() { return this->filter().eof(); }
+};
+BOOST_IOSTREAMS_PIPABLE(basic_zlib_decompressor, 1)
+
+typedef basic_zlib_decompressor<> zlib_decompressor;
+
+//----------------------------------------------------------------------------//
+
+//------------------Implementation of zlib_allocator--------------------------//
+
+namespace detail {
+
+template<typename Alloc, typename Base>
+void* zlib_allocator<Alloc, Base>::allocate
+ (void* self, zlib::uint items, zlib::uint size)
+{
+ size_type len = items * size;
+ char* ptr =
+ static_cast<allocator_type*>(self)->allocate
+ (len + sizeof(size_type)
+ #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+ , (char*)0
+ #endif
+ );
+ *reinterpret_cast<size_type*>(ptr) = len;
+ return ptr + sizeof(size_type);
+}
+
+template<typename Alloc, typename Base>
+void zlib_allocator<Alloc, Base>::deallocate(void* self, void* address)
+{
+ char* ptr = reinterpret_cast<char*>(address) - sizeof(size_type);
+ size_type len = *reinterpret_cast<size_type*>(ptr) + sizeof(size_type);
+ static_cast<allocator_type*>(self)->deallocate(ptr, len);
+}
+
+//------------------Implementation of zlib_compressor_impl--------------------//
+
+template<typename Alloc>
+zlib_compressor_impl<Alloc>::zlib_compressor_impl(const zlib_params& p)
+{ init(p, true, static_cast<zlib_allocator<Alloc>&>(*this)); }
+
+template<typename Alloc>
+zlib_compressor_impl<Alloc>::~zlib_compressor_impl()
+{ reset(true, false); }
+
+template<typename Alloc>
+bool zlib_compressor_impl<Alloc>::filter
+ ( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush )
+{
+ before(src_begin, src_end, dest_begin, dest_end);
+ int result = xdeflate(flush ? zlib::finish : zlib::no_flush);
+ after(src_begin, dest_begin, true);
+ zlib_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(result);
+ return result != zlib::stream_end;
+}
+
+template<typename Alloc>
+void zlib_compressor_impl<Alloc>::close() { reset(true, true); }
+
+//------------------Implementation of zlib_decompressor_impl------------------//
+
+template<typename Alloc>
+zlib_decompressor_impl<Alloc>::zlib_decompressor_impl(const zlib_params& p)
+ : eof_(false)
+{ init(p, false, static_cast<zlib_allocator<Alloc>&>(*this)); }
+
+template<typename Alloc>
+zlib_decompressor_impl<Alloc>::~zlib_decompressor_impl()
+{ reset(false, false); }
+
+template<typename Alloc>
+zlib_decompressor_impl<Alloc>::zlib_decompressor_impl(int window_bits)
+{
+ zlib_params p;
+ p.window_bits = window_bits;
+ init(p, false, static_cast<zlib_allocator<Alloc>&>(*this));
+}
+
+template<typename Alloc>
+bool zlib_decompressor_impl<Alloc>::filter
+ ( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool /* flush */ )
+{
+ before(src_begin, src_end, dest_begin, dest_end);
+ int result = xinflate(zlib::sync_flush);
+ after(src_begin, dest_begin, false);
+ zlib_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(result);
+ return !(eof_ = result == zlib::stream_end);
+}
+
+template<typename Alloc>
+void zlib_decompressor_impl<Alloc>::close() {
+ eof_ = false;
+ reset(false, true);
+}
+
+} // End namespace detail.
+
+//------------------Implementation of zlib_decompressor-----------------------//
+
+template<typename Alloc>
+basic_zlib_compressor<Alloc>::basic_zlib_compressor
+ (const zlib_params& p, std::streamsize buffer_size)
+ : base_type(buffer_size, p) { }
+
+//------------------Implementation of zlib_decompressor-----------------------//
+
+template<typename Alloc>
+basic_zlib_decompressor<Alloc>::basic_zlib_decompressor
+ (int window_bits, std::streamsize buffer_size)
+ : base_type(buffer_size, window_bits) { }
+
+template<typename Alloc>
+basic_zlib_decompressor<Alloc>::basic_zlib_decompressor
+ (const zlib_params& p, std::streamsize buffer_size)
+ : base_type(buffer_size, p) { }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // Pops abi_suffix.hpp pragmas.
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_ZLIB_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/filtering_stream.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/filtering_stream.hpp
new file mode 100644
index 0000000000..8621ef96b2
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/filtering_stream.hpp
@@ -0,0 +1,187 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FILTER_STREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILTER_STREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <memory> // allocator.
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/iostream.hpp> // standard streams.
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/detail/streambuf.hpp> // pubsync.
+#include <boost/iostreams/filtering_streambuf.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+//--------------Definition of filtered_istream--------------------------------//
+
+namespace detail {
+
+template<typename Mode, typename Ch, typename Tr>
+struct filtering_stream_traits {
+ typedef typename
+ iostreams::select< // Disambiguation for Tru64
+ mpl::and_<
+ is_convertible<Mode, input>,
+ is_convertible<Mode, output>
+ >,
+ BOOST_IOSTREAMS_BASIC_IOSTREAM(Ch, Tr),
+ is_convertible<Mode, input>,
+ BOOST_IOSTREAMS_BASIC_ISTREAM(Ch, Tr),
+ else_,
+ BOOST_IOSTREAMS_BASIC_OSTREAM(Ch, Tr)
+ >::type stream_type;
+ typedef typename
+ iostreams::select< // Dismbiguation required for Tru64.
+ mpl::and_<
+ is_convertible<Mode, input>,
+ is_convertible<Mode, output>
+ >,
+ iostream_tag,
+ is_convertible<Mode, input>,
+ istream_tag,
+ else_,
+ ostream_tag
+ >::type stream_tag;
+};
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC == 1700)
+# pragma warning(push)
+// https://connect.microsoft.com/VisualStudio/feedback/details/733720/
+# pragma warning(disable: 4250)
+#endif
+
+template<typename Chain, typename Access>
+class filtering_stream_base
+ : public access_control<
+ boost::iostreams::detail::chain_client<Chain>,
+ Access
+ >,
+ public filtering_stream_traits<
+ typename Chain::mode,
+ typename Chain::char_type,
+ typename Chain::traits_type
+ >::stream_type
+{
+public:
+ typedef Chain chain_type;
+ typedef access_control<
+ boost::iostreams::detail::chain_client<Chain>,
+ Access
+ > client_type;
+protected:
+ typedef typename
+ filtering_stream_traits<
+ typename Chain::mode,
+ typename Chain::char_type,
+ typename Chain::traits_type
+ >::stream_type stream_type;
+ filtering_stream_base() : stream_type(0) { this->set_chain(&chain_); }
+private:
+ void notify() { this->rdbuf(chain_.empty() ? 0 : &chain_.front()); }
+ Chain chain_;
+};
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC == 1700)
+# pragma warning(pop)
+#endif
+
+} // End namespace detail.
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(name_, chain_type_, default_char_)
+// Description: Defines a template derived from std::basic_streambuf which uses
+// a chain to perform i/o. The template has the following parameters:
+// Mode - the i/o mode.
+// Ch - The character type.
+// Tr - The character traits type.
+// Alloc - The allocator type.
+// Access - Indicates accessibility of the chain interface; must be either
+// public_ or protected_; defaults to public_.
+// Macro parameters:
+// name_ - The name of the template to be defined.
+// chain_type_ - The name of the chain template.
+// default_char_ - The default value for the char template parameter.
+//
+#define BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(name_, chain_type_, default_char_) \
+ template< typename Mode, \
+ typename Ch = default_char_, \
+ typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch), \
+ typename Alloc = std::allocator<Ch>, \
+ typename Access = public_ > \
+ class name_ \
+ : public boost::iostreams::detail::filtering_stream_base< \
+ chain_type_<Mode, Ch, Tr, Alloc>, Access \
+ > \
+ { \
+ public: \
+ typedef Ch char_type; \
+ struct category \
+ : Mode, \
+ closable_tag, \
+ detail::filtering_stream_traits<Mode, Ch, Tr>::stream_tag \
+ { }; \
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr) \
+ typedef Mode mode; \
+ typedef chain_type_<Mode, Ch, Tr, Alloc> chain_type; \
+ name_() { } \
+ BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(name_, mode, Ch, push_impl) \
+ ~name_() { \
+ if (this->is_complete()) \
+ this->rdbuf()->BOOST_IOSTREAMS_PUBSYNC(); \
+ } \
+ private: \
+ typedef access_control< \
+ boost::iostreams::detail::chain_client< \
+ chain_type_<Mode, Ch, Tr, Alloc> \
+ >, \
+ Access \
+ > client_type; \
+ template<typename T> \
+ void push_impl(const T& t BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { client_type::push(t BOOST_IOSTREAMS_PUSH_ARGS()); } \
+ }; \
+ /**/
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC == 1700)
+# pragma warning(push)
+// https://connect.microsoft.com/VisualStudio/feedback/details/733720/
+# pragma warning(disable: 4250)
+#endif
+
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(filtering_stream, boost::iostreams::chain, char)
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(wfiltering_stream, boost::iostreams::chain, wchar_t)
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC == 1700)
+# pragma warning(pop)
+#endif
+
+typedef filtering_stream<input> filtering_istream;
+typedef filtering_stream<output> filtering_ostream;
+typedef wfiltering_stream<input> filtering_wistream;
+typedef wfiltering_stream<output> filtering_wostream;
+
+//----------------------------------------------------------------------------//
+
+} } // End namespace iostreams, boost
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC
+
+#endif // #ifndef BOOST_IOSTREAMS_FILTER_STREAM_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/filtering_streambuf.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/filtering_streambuf.hpp
new file mode 100644
index 0000000000..affe4a71c4
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/filtering_streambuf.hpp
@@ -0,0 +1,70 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FILTERING_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILTERING_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <exception>
+#include <memory> // allocator.
+#include <boost/iostreams/chain.hpp>
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/streambuf.hpp> // pubsync.
+#include <boost/iostreams/detail/streambuf/chainbuf.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace iostreams {
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_FILTERBUF(name_, chain_type_, default_char_)
+// Description: Defines a template derived from std::basic_streambuf which uses
+// a chain to perform i/o. The template has the following parameters:
+// Ch - The character type.
+// Tr - The character traits type.
+// Alloc - The allocator type.
+// Access - Indicates accessibility of the chain interface; must be either
+// public_ or protected_; defaults to public_.
+//
+#define BOOST_IOSTREAMS_DEFINE_FILTER_STREAMBUF(name_, chain_type_, default_char_) \
+ template< typename Mode, \
+ typename Ch = default_char_, \
+ typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch), \
+ typename Alloc = std::allocator<Ch>, \
+ typename Access = public_ > \
+ class name_ : public boost::iostreams::detail::chainbuf< \
+ chain_type_<Mode, Ch, Tr, Alloc>, Mode, Access \
+ > \
+ { \
+ public: \
+ typedef Ch char_type; \
+ struct category \
+ : Mode, closable_tag, streambuf_tag \
+ { }; \
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr) \
+ typedef Mode mode; \
+ typedef chain_type_<Mode, Ch, Tr, Alloc> chain_type; \
+ name_() { } \
+ BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(name_, mode, Ch, push_impl) \
+ ~name_() { if (this->is_complete()) this->BOOST_IOSTREAMS_PUBSYNC(); } \
+ }; \
+ /**/
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAMBUF(filtering_streambuf, boost::iostreams::chain, char)
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAMBUF(filtering_wstreambuf, boost::iostreams::chain, wchar_t)
+
+typedef filtering_streambuf<input> filtering_istreambuf;
+typedef filtering_streambuf<output> filtering_ostreambuf;
+typedef filtering_wstreambuf<input> filtering_wistreambuf;
+typedef filtering_wstreambuf<output> filtering_wostreambuf;
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_FILTERING_STREAMBUF_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/flush.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/flush.hpp
new file mode 100644
index 0000000000..5212a448f1
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/flush.hpp
@@ -0,0 +1,125 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FLUSH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FLUSH_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct flush_device_impl;
+
+template<typename T>
+struct flush_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+bool flush(T& t)
+{ return detail::flush_device_impl<T>::flush(detail::unwrap(t)); }
+
+template<typename T, typename Sink>
+bool flush(T& t, Sink& snk)
+{ return detail::flush_filter_impl<T>::flush(detail::unwrap(t), snk); }
+
+namespace detail {
+
+//------------------Definition of flush_device_impl---------------------------//
+
+template<typename T>
+struct flush_device_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ flush_device_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, ostream_tag, streambuf_tag, flushable_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct flush_device_impl<ostream_tag> {
+ template<typename T>
+ static bool flush(T& t)
+ { return t.rdbuf()->BOOST_IOSTREAMS_PUBSYNC() == 0; }
+};
+
+template<>
+struct flush_device_impl<streambuf_tag> {
+ template<typename T>
+ static bool flush(T& t)
+ { return t.BOOST_IOSTREAMS_PUBSYNC() == 0; }
+};
+
+template<>
+struct flush_device_impl<flushable_tag> {
+ template<typename T>
+ static bool flush(T& t) { return t.flush(); }
+};
+
+template<>
+struct flush_device_impl<any_tag> {
+ template<typename T>
+ static bool flush(T&) { return true; }
+};
+
+//------------------Definition of flush_filter_impl---------------------------//
+
+template<typename T>
+struct flush_filter_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ flush_filter_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, flushable_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct flush_filter_impl<flushable_tag> {
+ template<typename T, typename Sink>
+ static bool flush(T& t, Sink& snk) { return t.flush(snk); }
+};
+
+template<>
+struct flush_filter_impl<any_tag> {
+ template<typename T, typename Sink>
+ static bool flush(T&, Sink&) { return false; }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_FLUSH_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/get.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/get.hpp
new file mode 100644
index 0000000000..12d530fd81
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/get.hpp
@@ -0,0 +1,17 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_GET_HPP_INCLUDED
+#define BOOST_IOSTREAMS_GET_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/read.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_GET_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/imbue.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/imbue.hpp
new file mode 100644
index 0000000000..48d2e1845a
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/imbue.hpp
@@ -0,0 +1,82 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_IMBUE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_IMBUE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+// Implementation templates for simulated tag dispatch.
+template<typename T>
+struct imbue_impl;
+
+} // End namespace detail.
+
+template<typename T, typename Locale>
+void imbue(T& t, const Locale& loc)
+{ detail::imbue_impl<T>::imbue(detail::unwrap(t), loc); }
+
+namespace detail {
+
+//------------------Definition of imbue_impl----------------------------------//
+
+template<typename T>
+struct imbue_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ imbue_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, streambuf_tag, localizable_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct imbue_impl<any_tag> {
+ template<typename T, typename Locale>
+ static void imbue(T&, const Locale&) { }
+};
+
+template<>
+struct imbue_impl<streambuf_tag> {
+ template<typename T, typename Locale>
+ static void imbue(T& t, const Locale& loc) { t.pubimbue(loc); }
+};
+
+template<>
+struct imbue_impl<localizable_tag> {
+ template<typename T, typename Locale>
+ static void imbue(T& t, const Locale& loc) { t.imbue(loc); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_IMBUE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/input_sequence.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/input_sequence.hpp
new file mode 100644
index 0000000000..e504c8e8ff
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/input_sequence.hpp
@@ -0,0 +1,72 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_INPUT_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_INPUT_SEQUENCE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <utility> // pair.
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp> // is_custom
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct input_sequence_impl;
+
+} // End namespace detail.
+
+template<typename T>
+inline std::pair<
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type*,
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type*
+>
+input_sequence(T& t)
+{ return detail::input_sequence_impl<T>::input_sequence(t); }
+
+namespace detail {
+
+//------------------Definition of direct_impl-------------------------------//
+
+template<typename T>
+struct input_sequence_impl
+ : mpl::if_<
+ detail::is_custom<T>,
+ operations<T>,
+ input_sequence_impl<direct_tag>
+ >::type
+ { };
+
+template<>
+struct input_sequence_impl<direct_tag> {
+ template<typename U>
+ static std::pair<
+ BOOST_DEDUCED_TYPENAME char_type_of<U>::type*,
+ BOOST_DEDUCED_TYPENAME char_type_of<U>::type*
+ >
+ input_sequence(U& u) { return u.input_sequence(); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_INPUT_SEQUENCE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/operations.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/operations.hpp
new file mode 100644
index 0000000000..28bd773172
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/operations.hpp
@@ -0,0 +1,26 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OPERATIONS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OPERATIONS_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/close.hpp>
+#include <boost/iostreams/flush.hpp>
+#include <boost/iostreams/imbue.hpp>
+#include <boost/iostreams/input_sequence.hpp>
+#include <boost/iostreams/optimal_buffer_size.hpp>
+#include <boost/iostreams/output_sequence.hpp>
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/seek.hpp>
+#include <boost/iostreams/write.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_OPERATIONS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/operations_fwd.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/operations_fwd.hpp
new file mode 100644
index 0000000000..ae68d70467
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/operations_fwd.hpp
@@ -0,0 +1,41 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OPERATIONS_FWD_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OPERATIONS_FWD_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+namespace boost { namespace iostreams {
+
+template<typename T>
+struct operations;
+
+namespace detail {
+
+struct custom_tag { };
+
+template<typename T>
+struct is_custom
+ : mpl::not_<
+ is_base_and_derived< custom_tag, operations<T> >
+ >
+ { };
+
+} // End namespace detail.
+
+template<typename T>
+struct operations : detail::custom_tag { };
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_OPERATIONS_FWD_HPP_INCLUDED //--------------//
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/optimal_buffer_size.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/optimal_buffer_size.hpp
new file mode 100644
index 0000000000..13894faab8
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/optimal_buffer_size.hpp
@@ -0,0 +1,87 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp> // constants.
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct optimal_buffer_size_impl;
+
+} // End namespace detail.
+
+template<typename T>
+std::streamsize optimal_buffer_size(const T& t)
+{
+ typedef detail::optimal_buffer_size_impl<T> impl;
+ return impl::optimal_buffer_size(detail::unwrap(t));
+}
+
+namespace detail {
+
+//------------------Definition of optimal_buffer_size_impl--------------------//
+
+template<typename T>
+struct optimal_buffer_size_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ optimal_buffer_size_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, optimally_buffered_tag, device_tag, filter_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct optimal_buffer_size_impl<optimally_buffered_tag> {
+ template<typename T>
+ static std::streamsize optimal_buffer_size(const T& t)
+ { return t.optimal_buffer_size(); }
+};
+
+template<>
+struct optimal_buffer_size_impl<device_tag> {
+ template<typename T>
+ static std::streamsize optimal_buffer_size(const T&)
+ { return default_device_buffer_size; }
+};
+
+template<>
+struct optimal_buffer_size_impl<filter_tag> {
+ template<typename T>
+ static std::streamsize optimal_buffer_size(const T&)
+ { return default_filter_buffer_size; }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/output_sequence.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/output_sequence.hpp
new file mode 100644
index 0000000000..5b42bf457d
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/output_sequence.hpp
@@ -0,0 +1,72 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <utility> // pair.
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp> // is_custom
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct output_sequence_impl;
+
+} // End namespace detail.
+
+template<typename T>
+inline std::pair<
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type*,
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type*
+>
+output_sequence(T& t)
+{ return detail::output_sequence_impl<T>::output_sequence(t); }
+
+namespace detail {
+
+//------------------Definition of output_sequence_impl------------------------//
+
+template<typename T>
+struct output_sequence_impl
+ : mpl::if_<
+ detail::is_custom<T>,
+ operations<T>,
+ output_sequence_impl<direct_tag>
+ >::type
+ { };
+
+template<>
+struct output_sequence_impl<direct_tag> {
+ template<typename U>
+ static std::pair<
+ BOOST_DEDUCED_TYPENAME char_type_of<U>::type*,
+ BOOST_DEDUCED_TYPENAME char_type_of<U>::type*
+ >
+ output_sequence(U& u) { return u.output_sequence(); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/pipeline.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/pipeline.hpp
new file mode 100644
index 0000000000..d29c2da3f7
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/pipeline.hpp
@@ -0,0 +1,114 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_PIPABLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_PIPABLE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/template_params.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/static_assert.hpp>
+
+#define BOOST_IOSTREAMS_PIPABLE(filter, arity) \
+ template< BOOST_PP_ENUM_PARAMS(arity, typename T) \
+ BOOST_PP_COMMA_IF(arity) typename Component> \
+ ::boost::iostreams::pipeline< \
+ ::boost::iostreams::detail::pipeline_segment< \
+ filter BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T) \
+ >, \
+ Component \
+ > operator|( const filter BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T)& f, \
+ const Component& c ) \
+ { \
+ typedef ::boost::iostreams::detail::pipeline_segment< \
+ filter BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T) \
+ > segment; \
+ return ::boost::iostreams::pipeline<segment, Component> \
+ (segment(f), c); \
+ } \
+ /**/
+
+namespace boost { namespace iostreams {
+
+template<typename Pipeline, typename Component>
+struct pipeline;
+
+namespace detail {
+
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+ template<typename T>
+ struct is_pipeline : mpl::false_ { };
+
+ template<typename Pipeline, typename Component>
+ struct is_pipeline< pipeline<Pipeline, Component> > : mpl::true_ { };
+#endif
+
+template<typename Component>
+class pipeline_segment
+{
+public:
+ pipeline_segment(const Component& component)
+ : component_(component)
+ { }
+ template<typename Fn>
+ void for_each(Fn fn) const { fn(component_); }
+ template<typename Chain>
+ void push(Chain& chn) const { chn.push(component_); }
+private:
+ pipeline_segment operator=(const pipeline_segment&);
+ const Component& component_;
+};
+
+} // End namespace detail.
+
+//------------------Definition of Pipeline------------------------------------//
+
+template<typename Pipeline, typename Component>
+struct pipeline : Pipeline {
+ typedef Pipeline pipeline_type;
+ typedef Component component_type;
+ pipeline(const Pipeline& p, const Component& component)
+ : Pipeline(p), component_(component)
+ { }
+ template<typename Fn>
+ void for_each(Fn fn) const
+ {
+ Pipeline::for_each(fn);
+ fn(component_);
+ }
+ template<typename Chain>
+ void push(Chain& chn) const
+ {
+ Pipeline::push(chn);
+ chn.push(component_);
+ }
+ const Pipeline& tail() const { return *this; }
+ const Component& head() const { return component_; }
+private:
+ pipeline operator=(const pipeline&);
+ const Component& component_;
+};
+
+template<typename Pipeline, typename Filter, typename Component>
+pipeline<pipeline<Pipeline, Filter>, Component>
+operator|(const pipeline<Pipeline, Filter>& p, const Component& cmp)
+{
+ BOOST_STATIC_ASSERT(is_filter<Filter>::value);
+ return pipeline<pipeline<Pipeline, Filter>, Component>(p, cmp);
+}
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_PIPABLE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/positioning.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/positioning.hpp
new file mode 100644
index 0000000000..12f2afc84b
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/positioning.hpp
@@ -0,0 +1,117 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Thanks to Gareth Sylvester-Bradley for the Dinkumware versions of the
+// positioning functions.
+
+#ifndef BOOST_IOSTREAMS_POSITIONING_HPP_INCLUDED
+#define BOOST_IOSTREAMS_POSITIONING_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/iostreams/detail/config/codecvt.hpp> // mbstate_t.
+#include <boost/iostreams/detail/config/fpos.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamoff, streampos.
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::fpos_t; }
+#endif
+
+namespace boost { namespace iostreams {
+
+//------------------Definition of stream_offset-------------------------------//
+
+typedef boost::intmax_t stream_offset;
+
+//------------------Definition of stream_offset_to_streamoff------------------//
+
+inline std::streamoff stream_offset_to_streamoff(stream_offset off)
+{ return static_cast<stream_offset>(off); }
+
+//------------------Definition of offset_to_position--------------------------//
+
+# ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+inline std::streampos offset_to_position(stream_offset off) { return off; }
+
+# else // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+inline std::streampos offset_to_position(stream_offset off)
+{ return std::streampos(std::mbstate_t(), off); }
+
+# endif // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+//------------------Definition of position_to_offset--------------------------//
+
+// Hande custom pos_type's
+template<typename PosType>
+inline stream_offset position_to_offset(PosType pos)
+{ return std::streamoff(pos); }
+
+# ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+inline stream_offset position_to_offset(std::streampos pos) { return pos; }
+
+# else // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+// In the Dinkumware standard library, a std::streampos consists of two stream
+// offsets -- _Fpos, of type std::fpos_t, and _Myoff, of type std::streamoff --
+// together with a conversion state. A std::streampos is converted to a
+// boost::iostreams::stream_offset by extracting the two stream offsets and
+// summing them. The value of _Fpos can be extracted using the implementation-
+// defined member functions seekpos() or get_fpos_t(), depending on the
+// Dinkumware version. The value of _Myoff cannot be extracted directly, but can
+// be calculated as the difference between the result of converting the
+// std::fpos to a std::streamoff and the result of converting the member _Fpos
+// to a long. The latter operation is accomplished with the macro BOOST_IOSTREAMS_FPOSOFF,
+// which works correctly on platforms where std::fpos_t is an integral type and
+// platforms where it is a struct
+
+// Converts a std::fpos_t to a stream_offset
+inline stream_offset fpos_t_to_offset(std::fpos_t pos)
+{
+# if defined(_POSIX_) || (_INTEGRAL_MAX_BITS >= 64) || defined(__IBMCPP__)
+ return pos;
+# else
+ return BOOST_IOSTREAMS_FPOSOFF(pos);
+# endif
+}
+
+// Extracts the member _Fpos from a std::fpos
+inline std::fpos_t streampos_to_fpos_t(std::streampos pos)
+{
+# if defined (_CPPLIB_VER) || defined(__IBMCPP__)
+ return pos.seekpos();
+# else
+ return pos.get_fpos_t();
+# endif
+}
+
+inline stream_offset position_to_offset(std::streampos pos)
+{
+ return fpos_t_to_offset(streampos_to_fpos_t(pos)) +
+ static_cast<stream_offset>(
+ static_cast<std::streamoff>(pos) -
+ BOOST_IOSTREAMS_FPOSOFF(streampos_to_fpos_t(pos))
+ );
+}
+
+# endif // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_POSITIONING_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/put.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/put.hpp
new file mode 100644
index 0000000000..a3fe33f207
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/put.hpp
@@ -0,0 +1,17 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_PUT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_PUT_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/write.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_PUT_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/putback.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/putback.hpp
new file mode 100644
index 0000000000..a4969f641a
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/putback.hpp
@@ -0,0 +1,17 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_PUTBACK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_PUTBACK_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/iostreams/read.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_PUTBACK_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/read.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/read.hpp
new file mode 100644
index 0000000000..a8652c5644
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/read.hpp
@@ -0,0 +1,241 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_READ_HPP_INCLUDED
+#define BOOST_IOSTREAMS_READ_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct read_device_impl;
+
+template<typename T>
+struct read_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+typename int_type_of<T>::type get(T& t)
+{ return detail::read_device_impl<T>::get(detail::unwrap(t)); }
+
+template<typename T>
+inline std::streamsize
+read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+{ return detail::read_device_impl<T>::read(detail::unwrap(t), s, n); }
+
+template<typename T, typename Source>
+std::streamsize
+read(T& t, Source& src, typename char_type_of<T>::type* s, std::streamsize n)
+{ return detail::read_filter_impl<T>::read(detail::unwrap(t), src, s, n); }
+
+template<typename T>
+bool putback(T& t, typename char_type_of<T>::type c)
+{ return detail::read_device_impl<T>::putback(detail::unwrap(t), c); }
+
+//----------------------------------------------------------------------------//
+
+namespace detail {
+
+// Helper function for adding -1 as EOF indicator.
+inline std::streamsize check_eof(std::streamsize n) { return n != 0 ? n : -1; }
+
+// Helper templates for reading from streambufs.
+template<bool IsLinked>
+struct true_eof_impl;
+
+template<>
+struct true_eof_impl<true> {
+ template<typename T>
+ static bool true_eof(T& t) { return t.true_eof(); }
+};
+
+template<>
+struct true_eof_impl<false> {
+ template<typename T>
+ static bool true_eof(T&) { return true; }
+};
+
+template<typename T>
+inline bool true_eof(T& t)
+{
+ const bool linked = is_linked<T>::value;
+ return true_eof_impl<linked>::true_eof(t);
+}
+
+//------------------Definition of read_device_impl----------------------------//
+
+template<typename T>
+struct read_device_impl
+ : mpl::if_<
+ detail::is_custom<T>,
+ operations<T>,
+ read_device_impl<
+ BOOST_DEDUCED_TYPENAME
+ detail::dispatch<
+ T, istream_tag, streambuf_tag, input
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct read_device_impl<istream_tag> {
+ template<typename T>
+ static typename int_type_of<T>::type get(T& t)
+ { return t.get(); }
+
+ template<typename T>
+ static std::streamsize
+ read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+ { return check_eof(t.rdbuf()->sgetn(s, n)); }
+
+ template<typename T>
+ static bool putback(T& t, typename char_type_of<T>::type c)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) traits_type;
+ return !traits_type::eq_int_type( t.rdbuf()->sputbackc(c),
+ traits_type::eof() );
+ }
+};
+
+template<>
+struct read_device_impl<streambuf_tag> {
+ template<typename T>
+ static typename int_type_of<T>::type
+ get(T& t)
+ { // gcc 2.95 needs namespace qualification for char_traits.
+ typedef typename char_type_of<T>::type char_type;
+ typedef iostreams::char_traits<char_type> traits_type;
+ typename int_type_of<T>::type c;
+ return !traits_type::is_eof(c = t.sbumpc()) ||
+ detail::true_eof(t)
+ ?
+ c : traits_type::would_block();
+ }
+
+ template<typename T>
+ static std::streamsize
+ read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+ {
+ std::streamsize amt;
+ return (amt = t.sgetn(s, n)) != 0 ?
+ amt :
+ detail::true_eof(t) ?
+ -1 :
+ 0;
+ }
+
+ template<typename T>
+ static bool putback(T& t, typename char_type_of<T>::type c)
+ { // gcc 2.95 needs namespace qualification for char_traits.
+ typedef typename char_type_of<T>::type char_type;
+ typedef iostreams::char_traits<char_type> traits_type;
+ return !traits_type::is_eof(t.sputbackc(c));
+ }
+};
+
+template<>
+struct read_device_impl<input> {
+ template<typename T>
+ static typename int_type_of<T>::type
+ get(T& t)
+ { // gcc 2.95 needs namespace qualification for char_traits.
+ typedef typename char_type_of<T>::type char_type;
+ typedef iostreams::char_traits<char_type> traits_type;
+ char_type c;
+ std::streamsize amt;
+ return (amt = t.read(&c, 1)) == 1 ?
+ traits_type::to_int_type(c) :
+ amt == -1 ?
+ traits_type::eof() :
+ traits_type::would_block();
+ }
+
+ template<typename T>
+ static std::streamsize
+ read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.read(s, n); }
+
+ template<typename T>
+ static bool putback(T& t, typename char_type_of<T>::type c)
+ { // T must be Peekable.
+ return t.putback(c);
+ }
+};
+
+//------------------Definition of read_filter_impl----------------------------//
+
+template<typename T>
+struct read_filter_impl
+ : mpl::if_<
+ detail::is_custom<T>,
+ operations<T>,
+ read_filter_impl<
+ BOOST_DEDUCED_TYPENAME
+ detail::dispatch<
+ T, multichar_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct read_filter_impl<multichar_tag> {
+ template<typename T, typename Source>
+ static std::streamsize read
+ (T& t, Source& src, typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.read(src, s, n); }
+};
+
+template<>
+struct read_filter_impl<any_tag> {
+ template<typename T, typename Source>
+ static std::streamsize read
+ (T& t, Source& src, typename char_type_of<T>::type* s, std::streamsize n)
+ { // gcc 2.95 needs namespace qualification for char_traits.
+ typedef typename char_type_of<T>::type char_type;
+ typedef iostreams::char_traits<char_type> traits_type;
+ for (std::streamsize off = 0; off < n; ++off) {
+ typename traits_type::int_type c = t.get(src);
+ if (traits_type::is_eof(c))
+ return check_eof(off);
+ if (traits_type::would_block(c))
+ return off;
+ s[off] = traits_type::to_char_type(c);
+ }
+ return n;
+ }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_READ_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/seek.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/seek.hpp
new file mode 100644
index 0000000000..148c90bfa8
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/seek.hpp
@@ -0,0 +1,180 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_SEEK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SEEK_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/integer_traits.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamsize, seekdir, openmode.
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct seek_device_impl;
+
+template<typename T>
+struct seek_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+inline std::streampos
+seek( T& t, stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+{
+ using namespace detail;
+ return seek_device_impl<T>::seek(detail::unwrap(t), off, way, which);
+}
+
+template<typename T, typename Device>
+inline std::streampos
+seek( T& t, Device& dev, stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+{
+ using namespace detail;
+ return seek_filter_impl<T>::seek(detail::unwrap(t), dev, off, way, which);
+}
+
+namespace detail {
+
+//------------------Definition of seek_device_impl----------------------------//
+
+template<typename T>
+struct seek_device_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ seek_device_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, iostream_tag, istream_tag, ostream_tag,
+ streambuf_tag, two_head, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+struct seek_impl_basic_ios {
+ template<typename T>
+ static std::streampos seek( T& t, stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ {
+ if ( way == BOOST_IOS::beg &&
+ ( off < integer_traits<std::streamoff>::const_min ||
+ off > integer_traits<std::streamoff>::const_max ) )
+ {
+ return t.rdbuf()->pubseekpos(offset_to_position(off));
+ } else {
+ return t.rdbuf()->pubseekoff(off, way, which);
+ }
+ }
+};
+
+template<>
+struct seek_device_impl<iostream_tag> : seek_impl_basic_ios { };
+
+template<>
+struct seek_device_impl<istream_tag> : seek_impl_basic_ios { };
+
+template<>
+struct seek_device_impl<ostream_tag> : seek_impl_basic_ios { };
+
+template<>
+struct seek_device_impl<streambuf_tag> {
+ template<typename T>
+ static std::streampos seek( T& t, stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ {
+ if ( way == BOOST_IOS::beg &&
+ ( off < integer_traits<std::streamoff>::const_min ||
+ off > integer_traits<std::streamoff>::const_max ) )
+ {
+ return t.BOOST_IOSTREAMS_PUBSEEKPOS(offset_to_position(off));
+ } else {
+ return t.BOOST_IOSTREAMS_PUBSEEKOFF(off, way, which);
+ }
+ }
+};
+
+template<>
+struct seek_device_impl<two_head> {
+ template<typename T>
+ static std::streampos seek( T& t, stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ { return t.seek(off, way, which); }
+};
+
+template<>
+struct seek_device_impl<any_tag> {
+ template<typename T>
+ static std::streampos seek( T& t, stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode )
+ { return t.seek(off, way); }
+};
+
+//------------------Definition of seek_filter_impl----------------------------//
+
+template<typename T>
+struct seek_filter_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ seek_filter_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<T, two_head, any_tag>::type
+ >
+ >::type
+ { };
+
+template<>
+struct seek_filter_impl<two_head> {
+ template<typename T, typename Device>
+ static std::streampos seek( T& t, Device& d,
+ stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ { return t.seek(d, off, way, which); }
+};
+
+template<>
+struct seek_filter_impl<any_tag> {
+ template<typename T, typename Device>
+ static std::streampos seek( T& t, Device& d,
+ stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode )
+ { return t.seek(d, off, way); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_SEEK_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/stream_buffer.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/stream_buffer.hpp
new file mode 100644
index 0000000000..dbcb786c65
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/stream_buffer.hpp
@@ -0,0 +1,116 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_STREAM_BUFFER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_STREAM_BUFFER_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <memory> // allocator.
+#include <boost/config.hpp> // BOOST_DEDUCED_TYPENAME.
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/overload_resolution.hpp>
+#include <boost/iostreams/detail/forward.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure, streamsize.
+#include <boost/iostreams/detail/streambuf/direct_streambuf.hpp>
+#include <boost/iostreams/detail/streambuf/indirect_streambuf.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+struct stream_buffer_traits {
+ typedef typename
+ mpl::if_<
+ is_convertible<
+ BOOST_DEDUCED_TYPENAME category_of<T>::type,
+ direct_tag
+ >,
+ direct_streambuf<T, Tr>,
+ indirect_streambuf<T, Tr, Alloc, Mode>
+ >::type type;
+};
+
+} } } // End namespaces detail, iostreams, boost
+
+#ifdef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+# include <boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp>
+#else
+
+namespace boost { namespace iostreams {
+
+template< typename T,
+ typename Tr =
+ BOOST_IOSTREAMS_CHAR_TRAITS(
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ ),
+ typename Alloc =
+ std::allocator<
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ >,
+ typename Mode = BOOST_DEDUCED_TYPENAME mode_of<T>::type >
+class stream_buffer
+ : public detail::stream_buffer_traits<T, Tr, Alloc, Mode>::type
+{
+private:
+ BOOST_STATIC_ASSERT((
+ is_convertible<
+ BOOST_DEDUCED_TYPENAME iostreams::category_of<T>::type, Mode
+ >::value
+ ));
+ typedef typename
+ detail::stream_buffer_traits<
+ T, Tr, Alloc, Mode
+ >::type base_type;
+public:
+ typedef typename char_type_of<T>::type char_type;
+ struct category
+ : Mode,
+ closable_tag,
+ streambuf_tag
+ { };
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+public:
+ stream_buffer() { }
+ ~stream_buffer()
+ {
+ try {
+ if (this->is_open() && this->auto_close())
+ this->close();
+ } catch (...) { }
+ }
+ BOOST_IOSTREAMS_FORWARD( stream_buffer, open_impl, T,
+ BOOST_IOSTREAMS_PUSH_PARAMS,
+ BOOST_IOSTREAMS_PUSH_ARGS )
+ T& operator*() { return *this->component(); }
+ T* operator->() { return this->component(); }
+private:
+ void open_impl(const T& t BOOST_IOSTREAMS_PUSH_PARAMS())
+ { // Used for forwarding.
+ if (this->is_open())
+ boost::throw_exception(
+ BOOST_IOSTREAMS_FAILURE("already open")
+ );
+ base_type::open(t BOOST_IOSTREAMS_PUSH_ARGS());
+ }
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifdef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_STREAM_BUFFER_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/traits.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/traits.hpp
new file mode 100644
index 0000000000..f8d7a3ff5b
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/traits.hpp
@@ -0,0 +1,363 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+//
+// Contains metafunctions char_type_of, category_of and mode_of used for
+// deducing the i/o category and i/o mode of a model of Filter or Device.
+//
+// Also contains several utility metafunctions, functions and macros.
+//
+
+#ifndef BOOST_IOSTREAMS_IO_TRAITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_IO_TRAITS_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <iosfwd> // stream types, char_traits.
+#include <boost/config.hpp> // partial spec, deduced typename.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/bool_trait_def.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/is_iterator_range.hpp>
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/detail/select_by_size.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/traits_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/ref.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+//----------Definitions of predicates for streams and stream buffers----------//
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------------------//
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_istream, std::basic_istream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ostream, std::basic_ostream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_iostream, std::basic_iostream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_streambuf, std::basic_streambuf, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ifstream, std::basic_ifstream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ofstream, std::basic_ofstream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_fstream, std::basic_fstream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_filebuf, std::basic_filebuf, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_istringstream, std::basic_istringstream, 3)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ostringstream, std::basic_ostringstream, 3)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_stringstream, std::basic_stringstream, 3)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_stringbuf, std::basic_stringbuf, 3)
+
+#else // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-----------------------//
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_istream, std::istream, 0)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ostream, std::ostream, 0)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_iostream, std::iostream, 0)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_streambuf, std::streambuf, 0)
+
+#endif // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //----------------------//
+
+template<typename T>
+struct is_std_io
+ : mpl::or_< is_istream<T>, is_ostream<T>, is_streambuf<T> >
+ { };
+
+template<typename T>
+struct is_std_file_device
+ : mpl::or_<
+ is_ifstream<T>,
+ is_ofstream<T>,
+ is_fstream<T>,
+ is_filebuf<T>
+ >
+ { };
+
+template<typename T>
+struct is_std_string_device
+ : mpl::or_<
+ is_istringstream<T>,
+ is_ostringstream<T>,
+ is_stringstream<T>,
+ is_stringbuf<T>
+ >
+ { };
+
+template<typename Device, typename Tr, typename Alloc>
+struct stream;
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+class stream_buffer;
+
+template< typename Mode, typename Ch, typename Tr,
+ typename Alloc, typename Access >
+class filtering_stream;
+
+template< typename Mode, typename Ch, typename Tr,
+ typename Alloc, typename Access >
+class wfiltering_stream;
+
+template< typename Mode, typename Ch, typename Tr,
+ typename Alloc, typename Access >
+class filtering_streambuf;
+
+template< typename Mode, typename Ch, typename Tr,
+ typename Alloc, typename Access >
+class filtering_wstreambuf;
+
+namespace detail {
+
+template<typename T, typename Tr>
+class linked_streambuf;
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_boost_stream,
+ boost::iostreams::stream,
+ 3 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_boost_stream_buffer,
+ boost::iostreams::stream_buffer,
+ 4 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_filtering_stream_impl,
+ boost::iostreams::filtering_stream,
+ 5 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_filtering_wstream_impl,
+ boost::iostreams::wfiltering_stream,
+ 5 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_filtering_streambuf_impl,
+ boost::iostreams::filtering_streambuf,
+ 5 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_filtering_wstreambuf_impl,
+ boost::iostreams::filtering_wstreambuf,
+ 5 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_linked, linked_streambuf, 2)
+
+template<typename T>
+struct is_filtering_stream
+ : mpl::or_<
+ is_filtering_stream_impl<T>,
+ is_filtering_wstream_impl<T>
+ >
+ { };
+
+template<typename T>
+struct is_filtering_streambuf
+ : mpl::or_<
+ is_filtering_streambuf_impl<T>,
+ is_filtering_wstreambuf_impl<T>
+ >
+ { };
+
+template<typename T>
+struct is_boost
+ : mpl::or_<
+ is_boost_stream<T>,
+ is_boost_stream_buffer<T>,
+ is_filtering_stream<T>,
+ is_filtering_streambuf<T>
+ >
+ { };
+
+} // End namespace detail.
+
+//------------------Definitions of char_type_of-------------------------------//
+
+namespace detail {
+
+template<typename T>
+struct member_char_type { typedef typename T::char_type type; };
+
+} // End namespace detail.
+
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-------------------------------//
+
+template<typename T>
+struct char_type_of
+ : detail::member_char_type<
+ typename detail::unwrapped_type<T>::type
+ >
+ { };
+
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //---------------------//
+
+template<typename T>
+struct char_type_of {
+ typedef typename detail::unwrapped_type<T>::type U;
+ typedef typename
+ mpl::eval_if<
+ is_std_io<U>,
+ mpl::identity<char>,
+ detail::member_char_type<U>
+ >::type type;
+};
+
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------//
+
+template<typename Iter>
+struct char_type_of< iterator_range<Iter> > {
+ typedef typename iterator_value<Iter>::type type;
+};
+
+
+//------------------Definitions of category_of--------------------------------//
+
+namespace detail {
+
+template<typename T>
+struct member_category { typedef typename T::category type; };
+
+} // End namespace detail.
+
+template<typename T>
+struct category_of {
+ template<typename U>
+ struct member_category {
+ typedef typename U::category type;
+ };
+ typedef typename detail::unwrapped_type<T>::type U;
+ typedef typename
+ mpl::eval_if<
+ mpl::and_<
+ is_std_io<U>,
+ mpl::not_< detail::is_boost<U> >
+ >,
+ iostreams::select< // Disambiguation for Tru64
+ is_filebuf<U>, filebuf_tag,
+ is_ifstream<U>, ifstream_tag,
+ is_ofstream<U>, ofstream_tag,
+ is_fstream<U>, fstream_tag,
+ is_stringbuf<U>, stringbuf_tag,
+ is_istringstream<U>, istringstream_tag,
+ is_ostringstream<U>, ostringstream_tag,
+ is_stringstream<U>, stringstream_tag,
+ is_streambuf<U>, generic_streambuf_tag,
+ is_iostream<U>, generic_iostream_tag,
+ is_istream<U>, generic_istream_tag,
+ is_ostream<U>, generic_ostream_tag
+ >,
+ detail::member_category<U>
+ >::type type;
+};
+
+// Partial specialization for reference wrappers
+
+template<typename T>
+struct category_of< reference_wrapper<T> >
+ : category_of<T>
+ { };
+
+
+//------------------Definition of get_category--------------------------------//
+
+//
+// Returns an object of type category_of<T>::type.
+//
+template<typename T>
+inline typename category_of<T>::type get_category(const T&)
+{ typedef typename category_of<T>::type category; return category(); }
+
+//------------------Definition of int_type_of---------------------------------//
+
+template<typename T>
+struct int_type_of {
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+ typedef std::char_traits<
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ > traits_type;
+ typedef typename traits_type::int_type type;
+#else
+ typedef int type;
+#endif
+};
+
+//------------------Definition of mode_of-------------------------------------//
+
+namespace detail {
+
+template<int N> struct io_mode_impl;
+
+#define BOOST_IOSTREAMS_MODE_HELPER(tag_, id_) \
+ case_<id_> io_mode_impl_helper(tag_); \
+ template<> struct io_mode_impl<id_> { typedef tag_ type; }; \
+ /**/
+BOOST_IOSTREAMS_MODE_HELPER(input, 1)
+BOOST_IOSTREAMS_MODE_HELPER(output, 2)
+BOOST_IOSTREAMS_MODE_HELPER(bidirectional, 3)
+BOOST_IOSTREAMS_MODE_HELPER(input_seekable, 4)
+BOOST_IOSTREAMS_MODE_HELPER(output_seekable, 5)
+BOOST_IOSTREAMS_MODE_HELPER(seekable, 6)
+BOOST_IOSTREAMS_MODE_HELPER(dual_seekable, 7)
+BOOST_IOSTREAMS_MODE_HELPER(bidirectional_seekable, 8)
+BOOST_IOSTREAMS_MODE_HELPER(dual_use, 9)
+#undef BOOST_IOSTREAMS_MODE_HELPER
+
+template<typename T>
+struct io_mode_id {
+ typedef typename category_of<T>::type category;
+ BOOST_SELECT_BY_SIZE(int, value, detail::io_mode_impl_helper(category()));
+};
+
+} // End namespace detail.
+
+template<typename T> // Borland 5.6.4 requires this circumlocution.
+struct mode_of : detail::io_mode_impl< detail::io_mode_id<T>::value > { };
+
+// Partial specialization for reference wrappers
+
+template<typename T>
+struct mode_of< reference_wrapper<T> >
+ : mode_of<T>
+ { };
+
+
+//------------------Definition of is_device, is_filter and is_direct----------//
+
+namespace detail {
+
+template<typename T, typename Tag>
+struct has_trait_impl {
+ typedef typename category_of<T>::type category;
+ BOOST_STATIC_CONSTANT(bool, value = (is_convertible<category, Tag>::value));
+};
+
+template<typename T, typename Tag>
+struct has_trait
+ : mpl::bool_<has_trait_impl<T, Tag>::value>
+ { };
+
+} // End namespace detail.
+
+template<typename T>
+struct is_device : detail::has_trait<T, device_tag> { };
+
+template<typename T>
+struct is_filter : detail::has_trait<T, filter_tag> { };
+
+template<typename T>
+struct is_direct : detail::has_trait<T, direct_tag> { };
+
+//------------------Definition of BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS----------//
+
+#define BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr) \
+ typedef Tr traits_type; \
+ typedef typename traits_type::int_type int_type; \
+ typedef typename traits_type::off_type off_type; \
+ typedef typename traits_type::pos_type pos_type; \
+ /**/
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_IO_TRAITS_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/traits_fwd.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/traits_fwd.hpp
new file mode 100644
index 0000000000..a3e952623a
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/traits_fwd.hpp
@@ -0,0 +1,111 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Forward declarations of templates defined in traits.hpp.
+
+#ifndef BOOST_IOSTREAMS_IO_TRAITS_FWD_HPP_INCLUDED
+#define BOOST_IOSTREAMS_IO_TRAITS_FWD_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <iosfwd> // stream types, char_traits.
+
+namespace boost { namespace iostreams {
+
+template<typename T>
+struct is_istream;
+
+template<typename T>
+struct is_ostream;
+
+template<typename T>
+struct is_iostream;
+
+template<typename T>
+struct is_streambuf;
+
+template<typename T>
+struct is_istringstream;
+
+template<typename T>
+struct is_ostringstream;
+
+template<typename T>
+struct is_stringstream;
+
+template<typename T>
+struct is_stringbuf;
+
+template<typename T>
+struct is_ifstream;
+
+template<typename T>
+struct is_ofstream;
+
+template<typename T>
+struct is_fstream;
+
+template<typename T>
+struct is_filebuf;
+
+template<typename T>
+struct is_std_io;
+
+template<typename T>
+struct is_std_file_device;
+
+template<typename T>
+struct is_std_string_device;
+
+template<typename T>
+struct char_type_of;
+
+template<typename T>
+struct category_of;
+
+template<typename T>
+struct int_type_of;
+
+template<typename T>
+struct mode_of;
+
+template<typename T>
+struct is_device;
+
+template<typename T>
+struct is_filter;
+
+template<typename T>
+struct is_direct;
+
+namespace detail {
+
+template<typename T>
+struct is_boost_stream;
+
+template<typename T>
+struct is_boost_stream_buffer;
+
+template<typename T>
+struct is_filtering_stream;
+
+template<typename T>
+struct is_filtering_streambuf;
+
+template<typename T>
+struct is_linked;
+
+template<typename T>
+struct is_boost;
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_IO_TRAITS_FWD_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/include/boost/iostreams/write.hpp b/contrib/restricted/boost/iostreams/include/boost/iostreams/write.hpp
new file mode 100644
index 0000000000..8faf986ae0
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/include/boost/iostreams/write.hpp
@@ -0,0 +1,165 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_WRITE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_WRITE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct write_device_impl;
+
+template<typename T>
+struct write_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+bool put(T& t, typename char_type_of<T>::type c)
+{ return detail::write_device_impl<T>::put(detail::unwrap(t), c); }
+
+template<typename T>
+inline std::streamsize write
+ (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+{ return detail::write_device_impl<T>::write(detail::unwrap(t), s, n); }
+
+template<typename T, typename Sink>
+inline std::streamsize
+write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+ std::streamsize n )
+{ return detail::write_filter_impl<T>::write(detail::unwrap(t), snk, s, n); }
+
+namespace detail {
+
+//------------------Definition of write_device_impl---------------------------//
+
+template<typename T>
+struct write_device_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ write_device_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, ostream_tag, streambuf_tag, output
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct write_device_impl<ostream_tag> {
+ template<typename T>
+ static bool put(T& t, typename char_type_of<T>::type c)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) traits_type;
+ return !traits_type::eq_int_type( t.rdbuf()->sputc(c),
+ traits_type::eof() );
+ }
+
+ template<typename T>
+ static std::streamsize write
+ (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.rdbuf()->sputn(s, n); }
+};
+
+template<>
+struct write_device_impl<streambuf_tag> {
+ template<typename T>
+ static bool put(T& t, typename char_type_of<T>::type c)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) traits_type;
+ return !traits_type::eq_int_type(t.sputc(c), traits_type::eof());
+ }
+
+ template<typename T>
+ static std::streamsize write
+ (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.sputn(s, n); }
+};
+
+template<>
+struct write_device_impl<output> {
+ template<typename T>
+ static bool put(T& t, typename char_type_of<T>::type c)
+ { return t.write(&c, 1) == 1; }
+
+ template<typename T>
+ static std::streamsize
+ write(T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.write(s, n); }
+};
+
+//------------------Definition of write_filter_impl---------------------------//
+
+template<typename T>
+struct write_filter_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ write_filter_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, multichar_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct write_filter_impl<multichar_tag> {
+ template<typename T, typename Sink>
+ static std::streamsize
+ write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+ std::streamsize n )
+ { return t.write(snk, s, n); }
+};
+
+template<>
+struct write_filter_impl<any_tag> {
+ template<typename T, typename Sink>
+ static std::streamsize
+ write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+ std::streamsize n )
+ {
+ for (std::streamsize off = 0; off < n; ++off)
+ if (!t.put(snk, s[off]))
+ return off;
+ return n;
+ }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_WRITE_HPP_INCLUDED
diff --git a/contrib/restricted/boost/iostreams/src/bzip2.cpp b/contrib/restricted/boost/iostreams/src/bzip2.cpp
new file mode 100644
index 0000000000..af80cd2f94
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/src/bzip2.cpp
@@ -0,0 +1,168 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// To configure Boost to work with libbz2, see the
+// installation instructions here:
+// http://boost.org/libs/iostreams/doc/index.html?path=7
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp>
+// knows that we are building the library (possibly exporting code), rather
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE
+
+#include <boost/throw_exception.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/filter/bzip2.hpp>
+#include "bzlib.h" // Julian Seward's "bzip.h" header.
+ // To configure Boost to work with libbz2, see the
+ // installation instructions here:
+ // http://boost.org/libs/iostreams/doc/index.html?path=7
+
+namespace boost { namespace iostreams {
+
+namespace bzip2 {
+
+ // Status codes
+
+const int ok = BZ_OK;
+const int run_ok = BZ_RUN_OK;
+const int flush_ok = BZ_FLUSH_OK;
+const int finish_ok = BZ_FINISH_OK;
+const int stream_end = BZ_STREAM_END;
+const int sequence_error = BZ_SEQUENCE_ERROR;
+const int param_error = BZ_PARAM_ERROR;
+const int mem_error = BZ_MEM_ERROR;
+const int data_error = BZ_DATA_ERROR;
+const int data_error_magic = BZ_DATA_ERROR_MAGIC;
+const int io_error = BZ_IO_ERROR;
+const int unexpected_eof = BZ_UNEXPECTED_EOF;
+const int outbuff_full = BZ_OUTBUFF_FULL;
+const int config_error = BZ_CONFIG_ERROR;
+
+ // Action codes
+
+const int finish = BZ_FINISH;
+const int run = BZ_RUN;
+
+} // End namespace bzip2.
+
+//------------------Implementation of bzip2_error-----------------------------//
+
+bzip2_error::bzip2_error(int error)
+ : BOOST_IOSTREAMS_FAILURE("bzip2 error"), error_(error)
+ { }
+
+void bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(int error)
+{
+ switch (error) {
+ case BZ_OK:
+ case BZ_RUN_OK:
+ case BZ_FLUSH_OK:
+ case BZ_FINISH_OK:
+ case BZ_STREAM_END:
+ return;
+ case BZ_MEM_ERROR:
+ boost::throw_exception(std::bad_alloc());
+ default:
+ boost::throw_exception(bzip2_error(error));
+ }
+}
+
+//------------------Implementation of bzip2_base------------------------------//
+
+namespace detail {
+
+bzip2_base::bzip2_base(const bzip2_params& params)
+ : params_(params), stream_(new bz_stream), ready_(false)
+ { }
+
+bzip2_base::~bzip2_base() { delete static_cast<bz_stream*>(stream_); }
+
+void bzip2_base::before( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end )
+{
+ bz_stream* s = static_cast<bz_stream*>(stream_);
+ s->next_in = const_cast<char*>(src_begin);
+ s->avail_in = static_cast<unsigned>(src_end - src_begin);
+ s->next_out = reinterpret_cast<char*>(dest_begin);
+ s->avail_out= static_cast<unsigned>(dest_end - dest_begin);
+}
+
+void bzip2_base::after(const char*& src_begin, char*& dest_begin)
+{
+ bz_stream* s = static_cast<bz_stream*>(stream_);
+ src_begin = const_cast<char*>(s->next_in);
+ dest_begin = s->next_out;
+}
+
+int bzip2_base::check_end(const char* src_begin, const char* dest_begin)
+{
+ bz_stream* s = static_cast<bz_stream*>(stream_);
+ if( src_begin == s->next_in &&
+ s->avail_in == 0 &&
+ dest_begin == s->next_out) {
+ return bzip2::unexpected_eof;
+ } else {
+ return bzip2::ok;
+ }
+}
+
+void bzip2_base::end(bool compress)
+{
+ if(!ready_) return;
+ ready_ = false;
+ bz_stream* s = static_cast<bz_stream*>(stream_);
+ bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+ compress ?
+ BZ2_bzCompressEnd(s) :
+ BZ2_bzDecompressEnd(s)
+ );
+}
+
+int bzip2_base::compress(int action)
+{
+ return BZ2_bzCompress(static_cast<bz_stream*>(stream_), action);
+}
+
+int bzip2_base::decompress()
+{
+ return BZ2_bzDecompress(static_cast<bz_stream*>(stream_));
+}
+
+void bzip2_base::do_init
+ ( bool compress,
+ bzip2::alloc_func /* alloc */,
+ bzip2::free_func /* free */,
+ void* derived )
+{
+ bz_stream* s = static_cast<bz_stream*>(stream_);
+
+ // Current interface for customizing memory management
+ // is non-conforming and has been disabled:
+ // s->bzalloc = alloc;
+ // s->bzfree = free;
+ s->bzalloc = 0;
+ s->bzfree = 0;
+ s->opaque = derived;
+ bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+ compress ?
+ BZ2_bzCompressInit( s,
+ params_.block_size,
+ 0,
+ params_.work_factor ) :
+ BZ2_bzDecompressInit( s,
+ 0,
+ params_.small )
+ );
+ ready_ = true;
+}
+
+} // End namespace detail.
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
diff --git a/contrib/restricted/boost/iostreams/src/file_descriptor.cpp b/contrib/restricted/boost/iostreams/src/file_descriptor.cpp
new file mode 100644
index 0000000000..288e2c6401
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/src/file_descriptor.cpp
@@ -0,0 +1,619 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp>
+// knows that we are building the library (possibly exporting code), rather
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE
+
+#include <cassert>
+#include <cerrno>
+#include <cstdio> // SEEK_SET, etc.
+#include <boost/config.hpp> // BOOST_JOIN
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/rtl.hpp> // BOOST_IOSTREAMS_FD_XXX
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/system_failure.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmodes, failure.
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/throw_exception.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+ // OS-specific headers for low-level i/o.
+
+#include <fcntl.h> // file opening flags.
+#include <sys/stat.h> // file access permissions.
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# include <io.h> // low-level file i/o.
+# define WINDOWS_LEAN_AND_MEAN
+# include <windows.h>
+# ifndef INVALID_SET_FILE_POINTER
+# define INVALID_SET_FILE_POINTER ((DWORD)-1)
+# endif
+#else
+# include <sys/types.h> // mode_t.
+# include <unistd.h> // low-level file i/o.
+#endif
+
+namespace boost { namespace iostreams {
+
+//------------------Definition of file_descriptor_impl------------------------//
+
+namespace detail {
+
+// Contains the platform dependant implementation
+struct file_descriptor_impl {
+ // Note: These need to match file_desciptor_flags
+ enum flags {
+ never_close = 0,
+ close_on_exit = 1,
+ close_on_close = 2,
+ close_always = 3
+ };
+
+ file_descriptor_impl();
+ ~file_descriptor_impl();
+ void open(file_handle fd, flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ void open(int fd, flags);
+#endif
+ void open(const detail::path&, BOOST_IOS::openmode);
+ bool is_open() const;
+ void close();
+ void close_impl(bool close_flag, bool throw_);
+ std::streamsize read(char* s, std::streamsize n);
+ std::streamsize write(const char* s, std::streamsize n);
+ std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+ static file_handle invalid_handle();
+ file_handle handle_;
+ int flags_;
+};
+
+//------------------Implementation of file_descriptor_impl--------------------//
+
+file_descriptor_impl::file_descriptor_impl()
+ : handle_(invalid_handle()), flags_(0)
+ { }
+
+file_descriptor_impl::~file_descriptor_impl()
+{
+ close_impl(flags_ & close_on_exit, false);
+}
+
+void file_descriptor_impl::open(file_handle fd, flags f)
+{
+ // Using 'close' to close the existing handle so that it will throw an
+ // exception if it fails.
+ //
+ // Only closing after assigning the new handle, so that the class will
+ // take ownership of the handle regardless of whether close throws.
+
+ file_descriptor_impl tmp;
+ tmp.handle_ = handle_;
+ tmp.flags_ = flags_ & close_on_exit ? close_on_close : never_close;
+
+ handle_ = fd;
+ flags_ = f;
+
+ tmp.close();
+}
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+void file_descriptor_impl::open(int fd, flags f)
+{ open(reinterpret_cast<file_handle>(_get_osfhandle(fd)), f); }
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+void file_descriptor_impl::open(const detail::path& p, BOOST_IOS::openmode mode)
+{
+ close_impl(flags_ & close_on_exit, true);
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+ DWORD dwDesiredAccess;
+ DWORD dwCreationDisposition;
+
+ if ( !(mode & (BOOST_IOS::in | BOOST_IOS::out | BOOST_IOS::app)) ||
+ ((mode & BOOST_IOS::trunc) &&
+ ((mode & BOOST_IOS::app) || !(mode & BOOST_IOS::out))) ) {
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad open mode"));
+ }
+ else if ( mode & BOOST_IOS::in ) {
+ if ( mode & BOOST_IOS::app )
+ {
+ dwCreationDisposition = OPEN_ALWAYS;
+ dwDesiredAccess =
+ GENERIC_READ |
+ FILE_APPEND_DATA |
+ FILE_WRITE_ATTRIBUTES |
+ FILE_WRITE_EA |
+ STANDARD_RIGHTS_WRITE |
+ SYNCHRONIZE;
+ }
+ else if ( mode & BOOST_IOS::trunc )
+ {
+ dwCreationDisposition = CREATE_ALWAYS;
+ dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
+ }
+ else if ( mode & BOOST_IOS::out )
+ {
+ dwCreationDisposition = OPEN_EXISTING;
+ dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
+ }
+ else
+ {
+ dwCreationDisposition = OPEN_EXISTING;
+ dwDesiredAccess = GENERIC_READ;
+ }
+ }
+ else {
+ if ( mode & BOOST_IOS::app )
+ {
+ dwCreationDisposition = OPEN_ALWAYS;
+ dwDesiredAccess =
+ FILE_APPEND_DATA |
+ FILE_WRITE_ATTRIBUTES |
+ FILE_WRITE_EA |
+ STANDARD_RIGHTS_WRITE |
+ SYNCHRONIZE;
+ }
+ else
+ {
+ dwCreationDisposition = CREATE_ALWAYS;
+ dwDesiredAccess = GENERIC_WRITE;
+ }
+ }
+
+
+ HANDLE handle = p.is_wide() ?
+ ::CreateFileW( p.c_wstr(),
+ dwDesiredAccess,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ NULL, // lpSecurityAttributes
+ dwCreationDisposition,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL ) : // hTemplateFile
+ ::CreateFileA( p.c_str(),
+ dwDesiredAccess,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ NULL, // lpSecurityAttributes
+ dwCreationDisposition,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL ); // hTemplateFile
+ if (handle != INVALID_HANDLE_VALUE) {
+ handle_ = handle;
+ flags_ = close_always;
+ } else {
+ flags_ = 0;
+ throw_system_failure("failed opening file");
+ }
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS //------------------------------------//
+
+ // Calculate oflag argument to open.
+
+ int oflag = 0;
+ if ( !(mode & (BOOST_IOS::in | BOOST_IOS::out | BOOST_IOS::app)) ||
+ ((mode & BOOST_IOS::trunc) &&
+ ((mode & BOOST_IOS::app) || !(mode & BOOST_IOS::out))) ) {
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad open mode"));
+ }
+ else if ( mode & BOOST_IOS::in ) {
+ if ( mode & BOOST_IOS::app )
+ oflag |= O_CREAT | O_APPEND | O_RDWR;
+ else if ( mode & BOOST_IOS::trunc )
+ oflag |= O_CREAT | O_TRUNC | O_RDWR;
+ else if ( mode & BOOST_IOS::out )
+ oflag |= O_RDWR;
+ else
+ oflag |= O_RDONLY;
+ }
+ else {
+ if ( mode & BOOST_IOS::app )
+ oflag |= O_CREAT | O_APPEND | O_WRONLY;
+ else
+ oflag |= O_CREAT | O_TRUNC | O_WRONLY;
+ }
+ #ifdef _LARGEFILE64_SOURCE
+ oflag |= O_LARGEFILE;
+ #endif
+
+ // Calculate pmode argument to open.
+
+ mode_t pmode = S_IRUSR | S_IWUSR |
+ S_IRGRP | S_IWGRP |
+ S_IROTH | S_IWOTH;
+
+ // Open file.
+
+ int fd = BOOST_IOSTREAMS_FD_OPEN(p.c_str(), oflag, pmode);
+ if (fd == -1) {
+ boost::throw_exception(system_failure("failed opening file"));
+ } else {
+ if ( mode & BOOST_IOS::ate ) {
+ if (BOOST_IOSTREAMS_FD_SEEK(fd, 0, SEEK_END) == -1) {
+ BOOST_IOSTREAMS_FD_CLOSE(fd);
+ boost::throw_exception(system_failure("failed opening file"));
+ }
+ }
+ handle_ = fd;
+ flags_ = close_always;
+ }
+#endif // #ifndef BOOST_IOSTREAMS_WINDOWS //----------------------------------//
+}
+
+bool file_descriptor_impl::is_open() const
+{ return handle_ != invalid_handle(); }
+
+void file_descriptor_impl::close()
+{
+ close_impl((flags_ & close_on_close) != 0, true);
+}
+
+void file_descriptor_impl::close_impl(bool close_flag, bool throw_) {
+ if (handle_ != invalid_handle()) {
+ if (close_flag) {
+ bool success =
+ #ifdef BOOST_IOSTREAMS_WINDOWS
+ ::CloseHandle(handle_) == 1;
+ #else
+ BOOST_IOSTREAMS_FD_CLOSE(handle_) != -1;
+ #endif
+ if (!success && throw_)
+ throw_system_failure("failed closing file");
+ }
+ handle_ = invalid_handle();
+ flags_ = 0;
+ }
+}
+
+std::streamsize file_descriptor_impl::read(char* s, std::streamsize n)
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ DWORD result;
+ if (!::ReadFile(handle_, s, static_cast<DWORD>(n), &result, NULL))
+ {
+ // report EOF if the write-side of a pipe has been closed
+ if (GetLastError() == ERROR_BROKEN_PIPE)
+ {
+ result = 0;
+ }
+ else
+ throw_system_failure("failed reading");
+ }
+ return result == 0 ? -1 : static_cast<std::streamsize>(result);
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+ errno = 0;
+ std::streamsize result = BOOST_IOSTREAMS_FD_READ(handle_, s, n);
+ if (errno != 0)
+ throw_system_failure("failed reading");
+ return result == 0 ? -1 : result;
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
+}
+
+std::streamsize file_descriptor_impl::write(const char* s, std::streamsize n)
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ DWORD ignore;
+ if (!::WriteFile(handle_, s, static_cast<DWORD>(n), &ignore, NULL))
+ throw_system_failure("failed writing");
+ return n;
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+ int amt = BOOST_IOSTREAMS_FD_WRITE(handle_, s, n);
+ if (amt < n) // Handles blocking fd's only.
+ throw_system_failure("failed writing");
+ return n;
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
+}
+
+std::streampos file_descriptor_impl::seek
+ (stream_offset off, BOOST_IOS::seekdir way)
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ LONG lDistanceToMove = static_cast<LONG>(off & 0xffffffff);
+ LONG lDistanceToMoveHigh = static_cast<LONG>(off >> 32);
+ DWORD dwResultLow =
+ ::SetFilePointer( handle_,
+ lDistanceToMove,
+ &lDistanceToMoveHigh,
+ way == BOOST_IOS::beg ?
+ FILE_BEGIN :
+ way == BOOST_IOS::cur ?
+ FILE_CURRENT :
+ FILE_END );
+ if ( dwResultLow == INVALID_SET_FILE_POINTER &&
+ ::GetLastError() != NO_ERROR )
+ {
+ boost::throw_exception(system_failure("failed seeking"));
+ } else {
+ return offset_to_position(
+ (stream_offset(lDistanceToMoveHigh) << 32) + dwResultLow
+ );
+ }
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+ if ( off > integer_traits<BOOST_IOSTREAMS_FD_OFFSET>::const_max ||
+ off < integer_traits<BOOST_IOSTREAMS_FD_OFFSET>::const_min )
+ {
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad offset"));
+ }
+ stream_offset result =
+ BOOST_IOSTREAMS_FD_SEEK(
+ handle_,
+ static_cast<BOOST_IOSTREAMS_FD_OFFSET>(off),
+ ( way == BOOST_IOS::beg ?
+ SEEK_SET :
+ way == BOOST_IOS::cur ?
+ SEEK_CUR :
+ SEEK_END )
+ );
+ if (result == -1)
+ boost::throw_exception(system_failure("failed seeking"));
+ return offset_to_position(result);
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
+}
+
+// Returns the value stored in a file_handle variable when no file is open
+file_handle file_descriptor_impl::invalid_handle()
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ return INVALID_HANDLE_VALUE;
+#else
+ return -1;
+#endif
+}
+
+} // End namespace detail.
+
+//------------------Implementation of file_descriptor-------------------------//
+
+file_descriptor::file_descriptor() : pimpl_(new impl_type) { }
+
+file_descriptor::file_descriptor(handle_type fd, file_descriptor_flags f)
+ : pimpl_(new impl_type)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor::file_descriptor(handle_type fd, bool close_on_exit)
+ : pimpl_(new impl_type)
+{ open(fd, close_on_exit); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+file_descriptor::file_descriptor(int fd, file_descriptor_flags f)
+ : pimpl_(new impl_type)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor::file_descriptor(int fd, bool close_on_exit)
+ : pimpl_(new impl_type)
+{ open(fd, close_on_exit); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+file_descriptor::file_descriptor( const std::string& path,
+ BOOST_IOS::openmode mode )
+ : pimpl_(new impl_type)
+{ open(path, mode); }
+
+file_descriptor::file_descriptor( const char* path,
+ BOOST_IOS::openmode mode )
+ : pimpl_(new impl_type)
+{ open(path, mode); }
+
+file_descriptor::file_descriptor(const file_descriptor& other)
+ : pimpl_(other.pimpl_)
+ { }
+
+void file_descriptor::open(handle_type fd, file_descriptor_flags f)
+{ pimpl_->open(fd, static_cast<detail::file_descriptor_impl::flags>(f)); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor::open(handle_type fd, bool close_on_exit)
+{ pimpl_->open(fd, close_on_exit ?
+ detail::file_descriptor_impl::close_always :
+ detail::file_descriptor_impl::close_on_close); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+void file_descriptor::open(int fd, file_descriptor_flags f)
+{ pimpl_->open(fd, static_cast<detail::file_descriptor_impl::flags>(f)); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor::open(int fd, bool close_on_exit)
+{ pimpl_->open(fd, close_on_exit ?
+ detail::file_descriptor_impl::close_always :
+ detail::file_descriptor_impl::close_on_close); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+void file_descriptor::open(const std::string& path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+void file_descriptor::open(const char* path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+bool file_descriptor::is_open() const { return pimpl_->is_open(); }
+
+void file_descriptor::close() { pimpl_->close(); }
+
+std::streamsize file_descriptor::read(char_type* s, std::streamsize n)
+{ return pimpl_->read(s, n); }
+
+std::streamsize file_descriptor::write(const char_type* s, std::streamsize n)
+{ return pimpl_->write(s, n); }
+
+std::streampos file_descriptor::seek(stream_offset off, BOOST_IOS::seekdir way)
+{ return pimpl_->seek(off, way); }
+
+detail::file_handle file_descriptor::handle() const { return pimpl_->handle_; }
+
+void file_descriptor::init() { pimpl_.reset(new impl_type); }
+
+void file_descriptor::open(
+ const detail::path& path,
+ BOOST_IOS::openmode mode,
+ BOOST_IOS::openmode base )
+{
+ mode |= base;
+ pimpl_->open(path, mode);
+}
+
+//------------------Implementation of file_descriptor_source------------------//
+
+file_descriptor_source::file_descriptor_source(
+ handle_type fd, file_descriptor_flags f)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor_source::file_descriptor_source(
+ handle_type fd, bool close_on_exit)
+{ open(fd, close_on_exit); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+file_descriptor_source::file_descriptor_source(int fd, file_descriptor_flags f)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor_source::file_descriptor_source(int fd, bool close_on_exit)
+{ open(fd, close_on_exit); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+file_descriptor_source::file_descriptor_source(
+ const std::string& path, BOOST_IOS::openmode mode)
+{ open(path, mode); }
+
+file_descriptor_source::file_descriptor_source(
+ const char* path, BOOST_IOS::openmode mode)
+{ open(path, mode); }
+
+file_descriptor_source::file_descriptor_source(
+ const file_descriptor_source& other)
+ : file_descriptor(static_cast<const file_descriptor&>(other))
+ { }
+
+void file_descriptor_source::open(handle_type fd, file_descriptor_flags f)
+{ file_descriptor::open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor_source::open(handle_type fd, bool close_on_exit)
+{ file_descriptor::open(fd, close_on_exit); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+void file_descriptor_source::open(int fd, file_descriptor_flags f)
+{ file_descriptor::open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor_source::open(int fd, bool close_on_exit)
+{ file_descriptor::open(fd, close_on_exit); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+void file_descriptor_source::open(
+ const std::string& path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+void file_descriptor_source::open(
+ const char* path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+void file_descriptor_source::open(
+ const detail::path& path, BOOST_IOS::openmode mode)
+{
+ if (mode & (BOOST_IOS::out | BOOST_IOS::trunc))
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid mode"));
+ file_descriptor::open(path, mode, BOOST_IOS::in);
+}
+
+//------------------Implementation of file_descriptor_sink--------------------//
+
+file_descriptor_sink::file_descriptor_sink(
+ handle_type fd, file_descriptor_flags f)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor_sink::file_descriptor_sink(
+ handle_type fd, bool close_on_exit)
+{ open(fd, close_on_exit); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+file_descriptor_sink::file_descriptor_sink(int fd, file_descriptor_flags f)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor_sink::file_descriptor_sink(int fd, bool close_on_exit)
+{ open(fd, close_on_exit); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+file_descriptor_sink::file_descriptor_sink(
+ const std::string& path, BOOST_IOS::openmode mode)
+{ open(path, mode); }
+
+file_descriptor_sink::file_descriptor_sink(
+ const char* path, BOOST_IOS::openmode mode)
+{ open(path, mode); }
+
+file_descriptor_sink::file_descriptor_sink(const file_descriptor_sink& other)
+ : file_descriptor(static_cast<const file_descriptor&>(other))
+ { }
+
+void file_descriptor_sink::open(handle_type fd, file_descriptor_flags f)
+{ file_descriptor::open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor_sink::open(handle_type fd, bool close_on_exit)
+{ file_descriptor::open(fd, close_on_exit); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+void file_descriptor_sink::open(int fd, file_descriptor_flags f)
+{ file_descriptor::open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor_sink::open(int fd, bool close_on_exit)
+{ file_descriptor::open(fd, close_on_exit); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+void file_descriptor_sink::open(
+ const std::string& path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+void file_descriptor_sink::open(
+ const char* path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+void file_descriptor_sink::open(
+ const detail::path& path, BOOST_IOS::openmode mode)
+{
+ if (mode & BOOST_IOS::in)
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid mode"));
+ file_descriptor::open(path, mode, BOOST_IOS::out);
+}
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+} } // End namespaces iostreams, boost.
diff --git a/contrib/restricted/boost/iostreams/src/gzip.cpp b/contrib/restricted/boost/iostreams/src/gzip.cpp
new file mode 100644
index 0000000000..94830e5b8c
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/src/gzip.cpp
@@ -0,0 +1,174 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// To configure Boost to work with libbz2, see the
+// installation instructions here:
+// http://boost.org/libs/iostreams/doc/index.html?path=7
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp>
+// knows that we are building the library (possibly exporting code), rather
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE
+
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/filter/gzip.hpp>
+#include <boost/throw_exception.hpp>
+
+namespace boost { namespace iostreams {
+
+//------------------Implementation of gzip_header-----------------------------//
+
+namespace detail {
+
+void gzip_header::process(char c)
+{
+ uint8_t value = static_cast<uint8_t>(c);
+ switch (state_) {
+ case s_id1:
+ if (value != gzip::magic::id1)
+ boost::throw_exception(gzip_error(gzip::bad_header));
+ state_ = s_id2;
+ break;
+ case s_id2:
+ if (value != gzip::magic::id2)
+ boost::throw_exception(gzip_error(gzip::bad_header));
+ state_ = s_cm;
+ break;
+ case s_cm:
+ if (value != gzip::method::deflate)
+ boost::throw_exception(gzip_error(gzip::bad_method));
+ state_ = s_flg;
+ break;
+ case s_flg:
+ flags_ = value;
+ state_ = s_mtime;
+ break;
+ case s_mtime:
+ mtime_ += value << (offset_ * 8);
+ if (offset_ == 3) {
+ state_ = s_xfl;
+ offset_ = 0;
+ } else {
+ ++offset_;
+ }
+ break;
+ case s_xfl:
+ state_ = s_os;
+ break;
+ case s_os:
+ os_ = value;
+ if (flags_ & gzip::flags::extra) {
+ state_ = s_xlen;
+ } else if (flags_ & gzip::flags::name) {
+ state_ = s_name;
+ } else if (flags_ & gzip::flags::comment) {
+ state_ = s_comment;
+ } else if (flags_ & gzip::flags::header_crc) {
+ state_ = s_hcrc;
+ } else {
+ state_ = s_done;
+ }
+ break;
+ case s_xlen:
+ xlen_ += value << (offset_ * 8);
+ if (offset_ == 1) {
+ state_ = s_extra;
+ offset_ = 0;
+ } else {
+ ++offset_;
+ }
+ break;
+ case s_extra:
+ if (--xlen_ == 0) {
+ if (flags_ & gzip::flags::name) {
+ state_ = s_name;
+ } else if (flags_ & gzip::flags::comment) {
+ state_ = s_comment;
+ } else if (flags_ & gzip::flags::header_crc) {
+ state_ = s_hcrc;
+ } else {
+ state_ = s_done;
+ }
+ }
+ break;
+ case s_name:
+ if (c != 0) {
+ file_name_ += c;
+ } else if (flags_ & gzip::flags::comment) {
+ state_ = s_comment;
+ } else if (flags_ & gzip::flags::header_crc) {
+ state_ = s_hcrc;
+ } else {
+ state_ = s_done;
+ }
+ break;
+ case s_comment:
+ if (c != 0) {
+ comment_ += c;
+ } else if (flags_ & gzip::flags::header_crc) {
+ state_ = s_hcrc;
+ } else {
+ state_ = s_done;
+ }
+ break;
+ case s_hcrc:
+ if (offset_ == 1) {
+ state_ = s_done;
+ offset_ = 0;
+ } else {
+ ++offset_;
+ }
+ break;
+ default:
+ BOOST_ASSERT(0);
+ }
+}
+
+void gzip_header::reset()
+{
+ file_name_.clear();
+ comment_.clear();
+ os_ = flags_ = offset_ = xlen_ = 0;
+ mtime_ = 0;
+ state_ = s_id1;
+}
+
+//------------------Implementation of gzip_footer-----------------------------//
+
+void gzip_footer::process(char c)
+{
+ uint8_t value = static_cast<uint8_t>(c);
+ if (state_ == s_crc) {
+ crc_ += value << (offset_ * 8);
+ if (offset_ == 3) {
+ state_ = s_isize;
+ offset_ = 0;
+ } else {
+ ++offset_;
+ }
+ } else if (state_ == s_isize) {
+ isize_ += value << (offset_ * 8);
+ if (offset_ == 3) {
+ state_ = s_done;
+ offset_ = 0;
+ } else {
+ ++offset_;
+ }
+ } else {
+ BOOST_ASSERT(0);
+ }
+}
+
+void gzip_footer::reset()
+{
+ crc_ = isize_ = offset_ = 0;
+ state_ = s_crc;
+}
+
+} // End namespace boost::iostreams::detail.
+
+} } // End namespaces iostreams, boost.
diff --git a/contrib/restricted/boost/iostreams/src/lzma.cpp b/contrib/restricted/boost/iostreams/src/lzma.cpp
new file mode 100644
index 0000000000..5d7bb3cfbd
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/src/lzma.cpp
@@ -0,0 +1,147 @@
+// (C) Copyright Milan Svoboda 2008.
+// Originally developed under the fusecompress project.
+// Based on bzip2.cpp by:
+// (C) Copyright Jonathan Turkanis 2003.
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp>
+// knows that we are building the library (possibly exporting code), rather
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE
+
+#include <lzma.h>
+
+#include <boost/throw_exception.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/filter/lzma.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace lzma {
+
+ // Compression levels
+
+const uint32_t no_compression = 0;
+const uint32_t best_speed = 1;
+const uint32_t best_compression = 9;
+const uint32_t default_compression = 2;
+
+ // Status codes
+
+const int okay = LZMA_OK;
+const int stream_end = LZMA_STREAM_END;
+const int unsupported_check = LZMA_UNSUPPORTED_CHECK;
+const int mem_error = LZMA_MEM_ERROR;
+const int options_error = LZMA_OPTIONS_ERROR;
+const int data_error = LZMA_DATA_ERROR;
+const int buf_error = LZMA_BUF_ERROR;
+const int prog_error = LZMA_PROG_ERROR;
+
+ // Flush codes
+
+const int finish = LZMA_FINISH;
+const int full_flush = LZMA_FULL_FLUSH;
+const int sync_flush = LZMA_SYNC_FLUSH;
+const int run = LZMA_RUN;
+
+ // Code for current OS
+
+} // End namespace lzma.
+
+//------------------Implementation of lzma_error------------------------------//
+
+lzma_error::lzma_error(int error)
+ : BOOST_IOSTREAMS_FAILURE("lzma error"), error_(error)
+ { }
+
+void lzma_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(int error)
+{
+ switch (error) {
+ case LZMA_OK:
+ case LZMA_STREAM_END:
+ return;
+ case LZMA_MEM_ERROR:
+ boost::throw_exception(std::bad_alloc());
+ default:
+ boost::throw_exception(lzma_error(error));
+ }
+}
+
+//------------------Implementation of lzma_base-------------------------------//
+
+namespace detail {
+
+lzma_base::lzma_base()
+ : stream_(new lzma_stream)
+ { }
+
+lzma_base::~lzma_base() { delete static_cast<lzma_stream*>(stream_); }
+
+void lzma_base::before( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end )
+{
+ lzma_stream* s = static_cast<lzma_stream*>(stream_);
+ s->next_in = reinterpret_cast<uint8_t*>(const_cast<char*>(src_begin));
+ s->avail_in = static_cast<size_t>(src_end - src_begin);
+ s->next_out = reinterpret_cast<uint8_t*>(dest_begin);
+ s->avail_out= static_cast<size_t>(dest_end - dest_begin);
+}
+
+void lzma_base::after(const char*& src_begin, char*& dest_begin, bool)
+{
+ lzma_stream* s = static_cast<lzma_stream*>(stream_);
+ src_begin = const_cast<const char*>(reinterpret_cast<const char*>(s->next_in));
+ dest_begin = reinterpret_cast<char*>(s->next_out);
+}
+
+int lzma_base::deflate(int action)
+{
+ return lzma_code(static_cast<lzma_stream*>(stream_), static_cast<lzma_action>(action));
+}
+
+int lzma_base::inflate(int action)
+{
+ return lzma_code(static_cast<lzma_stream*>(stream_), static_cast<lzma_action>(action));
+}
+
+void lzma_base::reset(bool compress, bool realloc)
+{
+ lzma_stream* s = static_cast<lzma_stream*>(stream_);
+ lzma_end(s);
+ if (realloc)
+ {
+ memset(s, 0, sizeof(*s));
+
+ lzma_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+ compress ?
+ lzma_easy_encoder(s, level, LZMA_CHECK_CRC32) :
+ lzma_stream_decoder(s, 100 * 1024 * 1024, LZMA_CONCATENATED)
+ );
+ }
+}
+
+void lzma_base::do_init
+ ( const lzma_params& p, bool compress,
+ lzma::alloc_func, lzma::free_func,
+ void* )
+{
+ lzma_stream* s = static_cast<lzma_stream*>(stream_);
+
+ memset(s, 0, sizeof(*s));
+
+ level = p.level;
+ lzma_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+ compress ?
+ lzma_easy_encoder(s, p.level, LZMA_CHECK_CRC32) :
+ lzma_stream_decoder(s, 100 * 1024 * 1024, LZMA_CONCATENATED)
+ );
+}
+
+} // End namespace detail.
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
diff --git a/contrib/restricted/boost/iostreams/src/mapped_file.cpp b/contrib/restricted/boost/iostreams/src/mapped_file.cpp
new file mode 100644
index 0000000000..e345086a2d
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/src/mapped_file.cpp
@@ -0,0 +1,498 @@
+// (C) Copyright Craig Henderson 2002 'boost/memmap.hpp' from sandbox
+// (C) Copyright Jonathan Turkanis 2004.
+// (C) Copyright Jonathan Graehl 2004.
+// (C) Copyright Jorge Lodos 2008.
+// 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.)
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp>
+// knows that we are building the library (possibly exporting code), rather
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE
+
+#include <cassert>
+#include <boost/iostreams/detail/config/rtl.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/file_handle.hpp>
+#include <boost/iostreams/detail/system_failure.hpp>
+#include <boost/iostreams/device/mapped_file.hpp>
+#include <boost/throw_exception.hpp>
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+# endif
+# include <windows.h>
+#else
+# include <errno.h>
+# include <fcntl.h>
+# include <sys/mman.h> // mmap, munmap.
+# include <sys/stat.h>
+# include <sys/types.h> // struct stat.
+# include <unistd.h> // sysconf.
+#endif
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+// Class containing the platform-sepecific implementation
+// Invariant: The members params_, data_, size_, handle_ (and mapped_handle_
+// on Windows) either
+// - all have default values (or INVALID_HANDLE_VALUE for
+// Windows handles), or
+// - all have values reflecting a successful mapping.
+// In the first case, error_ may be true, reflecting a recent unsuccessful
+// open or close attempt; in the second case, error_ is always false.
+class mapped_file_impl {
+public:
+ typedef mapped_file_source::size_type size_type;
+ typedef mapped_file_source::param_type param_type;
+ typedef mapped_file_source::mapmode mapmode;
+ BOOST_STATIC_CONSTANT(
+ size_type, max_length = mapped_file_source::max_length);
+ mapped_file_impl();
+ ~mapped_file_impl();
+ void open(param_type p);
+ bool is_open() const { return data_ != 0; }
+ void close();
+ bool error() const { return error_; }
+ mapmode flags() const { return params_.flags; }
+ std::size_t size() const { return static_cast<std::size_t>(size_); }
+ char* data() const { return data_; }
+ void resize(stream_offset new_size);
+ static int alignment();
+private:
+ void open_file(param_type p);
+ void try_map_file(param_type p);
+ void map_file(param_type& p);
+ bool unmap_file();
+ void clear(bool error);
+ void cleanup_and_throw(const char* msg);
+ param_type params_;
+ char* data_;
+ stream_offset size_;
+ file_handle handle_;
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ file_handle mapped_handle_;
+#endif
+ bool error_;
+};
+
+mapped_file_impl::mapped_file_impl() { clear(false); }
+
+mapped_file_impl::~mapped_file_impl()
+{ try { close(); } catch (...) { } }
+
+void mapped_file_impl::open(param_type p)
+{
+ if (is_open())
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("file already open"));
+ p.normalize();
+ open_file(p);
+ map_file(p); // May modify p.hint
+ params_ = p;
+}
+
+void mapped_file_impl::close()
+{
+ if (data_ == 0)
+ return;
+ bool error = false;
+ error = !unmap_file() || error;
+ error =
+ #ifdef BOOST_IOSTREAMS_WINDOWS
+ !::CloseHandle(handle_)
+ #else
+ ::close(handle_) != 0
+ #endif
+ || error;
+ clear(error);
+ if (error)
+ throw_system_failure("failed closing mapped file");
+}
+
+void mapped_file_impl::resize(stream_offset new_size)
+{
+ if (!is_open())
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("file is closed"));
+ if (flags() & mapped_file::priv)
+ boost::throw_exception(
+ BOOST_IOSTREAMS_FAILURE("can't resize private mapped file")
+ );
+ if (!(flags() & mapped_file::readwrite))
+ boost::throw_exception(
+ BOOST_IOSTREAMS_FAILURE("can't resize readonly mapped file")
+ );
+ if (params_.offset >= new_size)
+ boost::throw_exception(
+ BOOST_IOSTREAMS_FAILURE("can't resize below mapped offset")
+ );
+ if (!unmap_file())
+ cleanup_and_throw("failed unmapping file");
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ stream_offset offset = ::SetFilePointer(handle_, 0, NULL, FILE_CURRENT);
+ if (offset == INVALID_SET_FILE_POINTER && ::GetLastError() != NO_ERROR)
+ cleanup_and_throw("failed querying file pointer");
+ LONG sizehigh = (new_size >> (sizeof(LONG) * 8));
+ LONG sizelow = (new_size & 0xffffffff);
+ DWORD result = ::SetFilePointer(handle_, sizelow, &sizehigh, FILE_BEGIN);
+ if ((result == INVALID_SET_FILE_POINTER && ::GetLastError() != NO_ERROR)
+ || !::SetEndOfFile(handle_))
+ cleanup_and_throw("failed resizing mapped file");
+ sizehigh = (offset >> (sizeof(LONG) * 8));
+ sizelow = (offset & 0xffffffff);
+ ::SetFilePointer(handle_, sizelow, &sizehigh, FILE_BEGIN);
+#else
+ if (BOOST_IOSTREAMS_FD_TRUNCATE(handle_, new_size) == -1)
+ cleanup_and_throw("failed resizing mapped file");
+#endif
+ size_ = new_size;
+ param_type p(params_);
+ map_file(p); // May modify p.hint
+ params_ = p;
+}
+
+int mapped_file_impl::alignment()
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ SYSTEM_INFO info;
+ ::GetSystemInfo(&info);
+ return static_cast<int>(info.dwAllocationGranularity);
+#else
+ return static_cast<int>(sysconf(_SC_PAGESIZE));
+#endif
+}
+
+void mapped_file_impl::open_file(param_type p)
+{
+ bool readonly = p.flags != mapped_file::readwrite;
+#ifdef BOOST_IOSTREAMS_WINDOWS
+
+ // Open file
+ DWORD dwDesiredAccess =
+ readonly ?
+ GENERIC_READ :
+ (GENERIC_READ | GENERIC_WRITE);
+ DWORD dwCreationDisposition = (p.new_file_size != 0 && !readonly) ?
+ CREATE_ALWAYS :
+ OPEN_EXISTING;
+ DWORD dwFlagsandAttributes =
+ readonly ?
+ FILE_ATTRIBUTE_READONLY :
+ FILE_ATTRIBUTE_TEMPORARY;
+ handle_ = p.path.is_wide() ?
+ ::CreateFileW(
+ p.path.c_wstr(),
+ dwDesiredAccess,
+ FILE_SHARE_READ,
+ NULL,
+ dwCreationDisposition,
+ dwFlagsandAttributes,
+ NULL ) :
+ ::CreateFileA(
+ p.path.c_str(),
+ dwDesiredAccess,
+ FILE_SHARE_READ,
+ NULL,
+ dwCreationDisposition,
+ dwFlagsandAttributes,
+ NULL );
+ if (handle_ == INVALID_HANDLE_VALUE)
+ cleanup_and_throw("failed opening file");
+
+ // Set file size
+ if (p.new_file_size != 0 && !readonly) {
+ LONG sizehigh = (p.new_file_size >> (sizeof(LONG) * 8));
+ LONG sizelow = (p.new_file_size & 0xffffffff);
+ DWORD result = ::SetFilePointer(handle_, sizelow, &sizehigh, FILE_BEGIN);
+ if ((result == INVALID_SET_FILE_POINTER && ::GetLastError() != NO_ERROR)
+ || !::SetEndOfFile(handle_))
+ cleanup_and_throw("failed setting file size");
+ }
+
+ // Determine file size. Dynamically locate GetFileSizeEx for compatibility
+ // with old Platform SDK (thanks to Pavel Vozenilik).
+ typedef BOOL (WINAPI *func)(HANDLE, PLARGE_INTEGER);
+ HMODULE hmod = ::GetModuleHandleA("kernel32.dll");
+ func get_size =
+ reinterpret_cast<func>(::GetProcAddress(hmod, "GetFileSizeEx"));
+ if (get_size) {
+ LARGE_INTEGER info;
+ if (get_size(handle_, &info)) {
+ boost::intmax_t size =
+ ( (static_cast<boost::intmax_t>(info.HighPart) << 32) |
+ info.LowPart );
+ size_ =
+ static_cast<std::size_t>(
+ p.length != max_length ?
+ std::min<boost::intmax_t>(p.length, size) :
+ size
+ );
+ } else {
+ cleanup_and_throw("failed querying file size");
+ return;
+ }
+ } else {
+ DWORD hi;
+ DWORD low;
+ if ( (low = ::GetFileSize(handle_, &hi))
+ !=
+ INVALID_FILE_SIZE )
+ {
+ boost::intmax_t size =
+ (static_cast<boost::intmax_t>(hi) << 32) | low;
+ size_ =
+ static_cast<std::size_t>(
+ p.length != max_length ?
+ std::min<boost::intmax_t>(p.length, size) :
+ size
+ );
+ } else {
+ cleanup_and_throw("failed querying file size");
+ return;
+ }
+ }
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+
+ // Open file
+ int flags = (readonly ? O_RDONLY : O_RDWR);
+ if (p.new_file_size != 0 && !readonly)
+ flags |= (O_CREAT | O_TRUNC);
+ #ifdef _LARGEFILE64_SOURCE
+ flags |= O_LARGEFILE;
+ #endif
+ errno = 0;
+ handle_ = ::open(p.path.c_str(), flags, S_IRWXU);
+ if (errno != 0)
+ cleanup_and_throw("failed opening file");
+
+ //--------------Set file size---------------------------------------------//
+
+ if (p.new_file_size != 0 && !readonly)
+ if (BOOST_IOSTREAMS_FD_TRUNCATE(handle_, p.new_file_size) == -1)
+ cleanup_and_throw("failed setting file size");
+
+ //--------------Determine file size---------------------------------------//
+
+ bool success = true;
+ if (p.length != max_length) {
+ size_ = p.length;
+ } else {
+ struct BOOST_IOSTREAMS_FD_STAT info;
+ success = ::BOOST_IOSTREAMS_FD_FSTAT(handle_, &info) != -1;
+ size_ = info.st_size;
+ }
+ if (!success)
+ cleanup_and_throw("failed querying file size");
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
+}
+
+void mapped_file_impl::try_map_file(param_type p)
+{
+ bool priv = p.flags == mapped_file::priv;
+ bool readonly = p.flags == mapped_file::readonly;
+#ifdef BOOST_IOSTREAMS_WINDOWS
+
+ // Create mapping
+ DWORD protect = priv ?
+ PAGE_WRITECOPY :
+ readonly ?
+ PAGE_READONLY :
+ PAGE_READWRITE;
+ mapped_handle_ =
+ ::CreateFileMappingA(
+ handle_,
+ NULL,
+ protect,
+ 0,
+ 0,
+ NULL );
+ if (mapped_handle_ == NULL)
+ cleanup_and_throw("failed create mapping");
+
+ // Access data
+ DWORD access = priv ?
+ FILE_MAP_COPY :
+ readonly ?
+ FILE_MAP_READ :
+ FILE_MAP_WRITE;
+ void* data =
+ ::MapViewOfFileEx(
+ mapped_handle_,
+ access,
+ (DWORD) (p.offset >> 32),
+ (DWORD) (p.offset & 0xffffffff),
+ (SIZE_T) (size_ != max_length ? size_ : 0),
+ (LPVOID) p.hint );
+ if (!data)
+ cleanup_and_throw("failed mapping view");
+#else
+ void* data =
+ ::BOOST_IOSTREAMS_FD_MMAP(
+ const_cast<char*>(p.hint),
+ size_,
+ readonly ? PROT_READ : (PROT_READ | PROT_WRITE),
+ priv ? MAP_PRIVATE : MAP_SHARED,
+ handle_,
+ p.offset );
+ if (data == MAP_FAILED)
+ cleanup_and_throw("failed mapping file");
+#endif
+ data_ = static_cast<char*>(data);
+}
+
+void mapped_file_impl::map_file(param_type& p)
+{
+ try {
+ try_map_file(p);
+ } catch (const std::exception&) {
+ if (p.hint) {
+ p.hint = 0;
+ try_map_file(p);
+ } else {
+ throw;
+ }
+ }
+}
+
+bool mapped_file_impl::unmap_file()
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ bool error = false;
+ error = !::UnmapViewOfFile(data_) || error;
+ error = !::CloseHandle(mapped_handle_) || error;
+ mapped_handle_ = NULL;
+ return !error;
+#else
+ return ::munmap(data_, size_) == 0;
+#endif
+}
+
+void mapped_file_impl::clear(bool error)
+{
+ params_ = param_type();
+ data_ = 0;
+ size_ = 0;
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ handle_ = INVALID_HANDLE_VALUE;
+ mapped_handle_ = NULL;
+#else
+ handle_ = 0;
+#endif
+ error_ = error;
+}
+
+// Called when an error is encountered during the execution of open_file or
+// map_file
+void mapped_file_impl::cleanup_and_throw(const char* msg)
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ DWORD error = GetLastError();
+ if (mapped_handle_ != NULL)
+ ::CloseHandle(mapped_handle_);
+ if (handle_ != INVALID_HANDLE_VALUE)
+ ::CloseHandle(handle_);
+ SetLastError(error);
+#else
+ int error = errno;
+ if (handle_ != 0)
+ ::close(handle_);
+ errno = error;
+#endif
+ clear(true);
+ boost::iostreams::detail::throw_system_failure(msg);
+}
+
+//------------------Implementation of mapped_file_params_base-----------------//
+
+void mapped_file_params_base::normalize()
+{
+ if (mode && flags)
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE(
+ "at most one of 'mode' and 'flags' may be specified"
+ ));
+ if (flags) {
+ switch (flags) {
+ case mapped_file::readonly:
+ case mapped_file::readwrite:
+ case mapped_file::priv:
+ break;
+ default:
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid flags"));
+ }
+ } else {
+ flags = (mode & BOOST_IOS::out) ?
+ mapped_file::readwrite :
+ mapped_file::readonly;
+ mode = BOOST_IOS::openmode();
+ }
+ if (offset < 0)
+ boost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid offset"));
+ if (new_file_size < 0)
+ boost::throw_exception(
+ BOOST_IOSTREAMS_FAILURE("invalid new file size")
+ );
+}
+
+} // End namespace detail.
+
+//------------------Implementation of mapped_file_source----------------------//
+
+mapped_file_source::mapped_file_source()
+ : pimpl_(new impl_type)
+ { }
+
+mapped_file_source::mapped_file_source(const mapped_file_source& other)
+ : pimpl_(other.pimpl_)
+ { }
+
+bool mapped_file_source::is_open() const
+{ return pimpl_->is_open(); }
+
+void mapped_file_source::close() { pimpl_->close(); }
+
+// safe_bool is explicitly qualified below to please msvc 7.1
+mapped_file_source::operator mapped_file_source::safe_bool() const
+{ return pimpl_->error() ? &safe_bool_helper::x : 0; }
+
+bool mapped_file_source::operator!() const
+{ return pimpl_->error(); }
+
+mapped_file_source::mapmode mapped_file_source::flags() const
+{ return pimpl_->flags(); }
+
+mapped_file_source::size_type mapped_file_source::size() const
+{ return pimpl_->size(); }
+
+const char* mapped_file_source::data() const { return pimpl_->data(); }
+
+const char* mapped_file_source::begin() const { return data(); }
+
+const char* mapped_file_source::end() const { return data() + size(); }
+int mapped_file_source::alignment()
+{ return detail::mapped_file_impl::alignment(); }
+
+void mapped_file_source::init() { pimpl_.reset(new impl_type); }
+
+void mapped_file_source::open_impl(const param_type& p)
+{ pimpl_->open(p); }
+
+//------------------Implementation of mapped_file-----------------------------//
+
+mapped_file::mapped_file(const mapped_file& other)
+ : delegate_(other.delegate_)
+ { }
+
+void mapped_file::resize(stream_offset new_size)
+{ delegate_.pimpl_->resize(new_size); }
+
+//------------------Implementation of mapped_file_sink------------------------//
+
+mapped_file_sink::mapped_file_sink(const mapped_file_sink& other)
+ : mapped_file(static_cast<const mapped_file&>(other))
+ { }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
diff --git a/contrib/restricted/boost/iostreams/src/zlib.cpp b/contrib/restricted/boost/iostreams/src/zlib.cpp
new file mode 100644
index 0000000000..3dd7b1a89c
--- /dev/null
+++ b/contrib/restricted/boost/iostreams/src/zlib.cpp
@@ -0,0 +1,187 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// 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.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// To configure Boost to work with zlib, see the
+// installation instructions here:
+// http://boost.org/libs/iostreams/doc/index.html?path=7
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp>
+// knows that we are building the library (possibly exporting code), rather
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE
+
+#include <boost/throw_exception.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/filter/zlib.hpp>
+#include "zlib.h" // Jean-loup Gailly's and Mark Adler's "zlib.h" header.
+ // To configure Boost to work with zlib, see the
+ // installation instructions here:
+ // http://boost.org/libs/iostreams/doc/index.html?path=7
+
+namespace boost { namespace iostreams {
+
+namespace zlib {
+
+ // Compression levels
+
+const int no_compression = Z_NO_COMPRESSION;
+const int best_speed = Z_BEST_SPEED;
+const int best_compression = Z_BEST_COMPRESSION;
+const int default_compression = Z_DEFAULT_COMPRESSION;
+
+ // Compression methods
+
+const int deflated = Z_DEFLATED;
+
+ // Compression strategies
+
+const int default_strategy = Z_DEFAULT_STRATEGY;
+const int filtered = Z_FILTERED;
+const int huffman_only = Z_HUFFMAN_ONLY;
+
+ // Status codes
+
+const int okay = Z_OK;
+const int stream_end = Z_STREAM_END;
+const int stream_error = Z_STREAM_ERROR;
+const int version_error = Z_VERSION_ERROR;
+const int data_error = Z_DATA_ERROR;
+const int mem_error = Z_MEM_ERROR;
+const int buf_error = Z_BUF_ERROR;
+
+ // Flush codes
+
+const int finish = Z_FINISH;
+const int no_flush = Z_NO_FLUSH;
+const int sync_flush = Z_SYNC_FLUSH;
+
+ // Code for current OS
+
+//const int os_code = OS_CODE;
+
+} // End namespace zlib.
+
+//------------------Implementation of zlib_error------------------------------//
+
+zlib_error::zlib_error(int error)
+ : BOOST_IOSTREAMS_FAILURE("zlib error"), error_(error)
+ { }
+
+void zlib_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(int error)
+{
+ switch (error) {
+ case Z_OK:
+ case Z_STREAM_END:
+ //case Z_BUF_ERROR:
+ return;
+ case Z_MEM_ERROR:
+ boost::throw_exception(std::bad_alloc());
+ default:
+ boost::throw_exception(zlib_error(error));
+ ;
+ }
+}
+
+//------------------Implementation of zlib_base-------------------------------//
+
+namespace detail {
+
+zlib_base::zlib_base()
+ : stream_(new z_stream), calculate_crc_(false), crc_(0), crc_imp_(0)
+ { }
+
+zlib_base::~zlib_base() { delete static_cast<z_stream*>(stream_); }
+
+void zlib_base::before( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end )
+{
+ z_stream* s = static_cast<z_stream*>(stream_);
+ s->next_in = reinterpret_cast<zlib::byte*>(const_cast<char*>(src_begin));
+ s->avail_in = static_cast<zlib::uint>(src_end - src_begin);
+ s->next_out = reinterpret_cast<zlib::byte*>(dest_begin);
+ s->avail_out= static_cast<zlib::uint>(dest_end - dest_begin);
+}
+
+void zlib_base::after(const char*& src_begin, char*& dest_begin, bool compress)
+{
+ z_stream* s = static_cast<z_stream*>(stream_);
+ const char* next_in = reinterpret_cast<const char*>(s->next_in);
+ char* next_out = reinterpret_cast<char*>(s->next_out);
+ if (calculate_crc_) {
+ const zlib::byte* buf = compress ?
+ reinterpret_cast<const zlib::byte*>(src_begin) :
+ reinterpret_cast<const zlib::byte*>(
+ const_cast<const char*>(dest_begin)
+ );
+ zlib::uint length = compress ?
+ static_cast<zlib::uint>(next_in - src_begin) :
+ static_cast<zlib::uint>(next_out - dest_begin);
+ crc_ = crc_imp_ = crc32(crc_imp_, buf, length);
+ }
+ total_in_ = s->total_in;
+ total_out_ = s->total_out;
+ src_begin = next_in;
+ dest_begin = next_out;
+}
+
+int zlib_base::xdeflate(int flush)
+{
+ return ::deflate(static_cast<z_stream*>(stream_), flush);
+}
+
+int zlib_base::xinflate(int flush)
+{
+ return ::inflate(static_cast<z_stream*>(stream_), flush);
+}
+
+void zlib_base::reset(bool compress, bool realloc)
+{
+ z_stream* s = static_cast<z_stream*>(stream_);
+ // Undiagnosed bug:
+ // deflateReset(), etc., return Z_DATA_ERROR
+ //zlib_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+ realloc ?
+ (compress ? deflateReset(s) : inflateReset(s)) :
+ (compress ? deflateEnd(s) : inflateEnd(s))
+ ;
+ //);
+ crc_imp_ = 0;
+}
+
+void zlib_base::do_init
+ ( const zlib_params& p, bool compress,
+ zlib::xalloc_func /* alloc */, zlib::xfree_func /* free*/,
+ void* derived )
+{
+ calculate_crc_ = p.calculate_crc;
+ z_stream* s = static_cast<z_stream*>(stream_);
+
+ // Current interface for customizing memory management
+ // is non-conforming and has been disabled:
+ // s->zalloc = alloc;
+ // s->zfree = free;
+ s->zalloc = 0;
+ s->zfree = 0;
+ s->opaque = derived;
+ int window_bits = p.noheader? -p.window_bits : p.window_bits;
+ zlib_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+ compress ?
+ deflateInit2( s,
+ p.level,
+ p.method,
+ window_bits,
+ p.mem_level,
+ p.strategy ) :
+ inflateInit2(s, window_bits)
+ );
+}
+
+} // End namespace detail.
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.