123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- // (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
|