⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 closable.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
字号:
/* * 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 a large collection of closable filters and devices that * execute instances of boost::iostreams::test::operation upon * closre(). Used to verify that filters and devices are closed  * correctly by the iostreams library * * File:        libs/iostreams/test/detail/closable.hpp * Date:        Sun Dec 09 16:12:23 MST 2007 * Copyright:   2007-2008 CodeRage, LLC * Author:      Jonathan Turkanis * Contact:     turkanis at coderage dot com */#ifndef BOOST_IOSTREAMS_TEST_CLOSABLE_HPP_INCLUDED#define BOOST_IOSTREAMS_TEST_CLOSABLE_HPP_INCLUDED#include <boost/iostreams/categories.hpp>#include <boost/iostreams/char_traits.hpp>  // EOF#include <boost/iostreams/concepts.hpp>#include <boost/iostreams/detail/ios.hpp>#include "./operation_sequence.hpp"namespace boost { namespace iostreams { namespace test {template<typename Category>class closable_device { };// Sourcetemplate<>class closable_device<input> : public source {public:    closable_device(operation close) : close_(close) { }    std::streamsize read(char*, std::streamsize) { return -1; }    void close() { close_.execute(); }private:    operation close_;};// Sinktemplate<>class closable_device<output> : public sink {public:    closable_device(operation close) : close_(close) { }    std::streamsize write(const char*, std::streamsize) { return 0; }    void close() { close_.execute(); }private:    operation close_;};struct borland_output { };// Copy of closable_device<output>, for Borland <= 5.8.2template<>class closable_device<borland_output> : public sink {public:    closable_device(operation close) : close_(close) { }    std::streamsize write(const char*, std::streamsize) { return 0; }    void close() { close_.execute(); }private:    operation close_;};// Bidirectional devicetemplate<>class closable_device<bidirectional> : public device<bidirectional> {public:    closable_device(operation close_input, operation close_output)         : close_input_(close_input), close_output_(close_output)        { }    std::streamsize read(char*, std::streamsize) { return -1; }    std::streamsize write(const char*, std::streamsize) { return 0; }    void close(BOOST_IOS::openmode which)     {         switch (which) {        case BOOST_IOS::in:            close_input_.execute();            break;        case BOOST_IOS::out:            close_output_.execute();            break;        default:            break;        }    }private:    operation close_input_;    operation close_output_;};// Seekable devicetemplate<>class closable_device<seekable> : public device<seekable> {public:    closable_device(operation close) : close_(close) { }    std::streamsize read(char*, std::streamsize) { return -1; }    std::streamsize write(const char*, std::streamsize) { return 0; }    stream_offset seek(stream_offset, BOOST_IOS::seekdir) { return 0; }    void close() { close_.execute(); }private:    operation close_;};struct direct_input     : input, device_tag, closable_tag, direct_tag     { };struct direct_output     : output, device_tag, closable_tag, direct_tag     { };struct direct_bidirectional     : bidirectional, device_tag, closable_tag, direct_tag     { };struct direct_seekable     : seekable, device_tag, closable_tag, direct_tag     { };// Direct sourcetemplate<>class closable_device<direct_input> {public:    typedef char          char_type;    typedef direct_input  category;    closable_device(operation close) : close_(close) { }    std::pair<char*, char*> input_sequence()    { return std::pair<char*, char*>(0, 0); }    void close() { close_.execute(); }private:    operation close_;};// Direct sinktemplate<>class closable_device<direct_output> {public:    typedef char           char_type;    typedef direct_output  category;    closable_device(operation close) : close_(close) { }    std::pair<char*, char*> output_sequence()    { return std::pair<char*, char*>(0, 0); }    void close() { close_.execute(); }private:    operation close_;};// Direct bidirectional devicetemplate<>class closable_device<direct_bidirectional> {public:    typedef char                  char_type;    typedef direct_bidirectional  category;    closable_device(operation close_input, operation close_output)         : close_input_(close_input), close_output_(close_output)        { }    std::pair<char*, char*> input_sequence()    { return std::pair<char*, char*>(0, 0); }    std::pair<char*, char*> output_sequence()    { return std::pair<char*, char*>(0, 0); }    void close(BOOST_IOS::openmode which)     {         switch (which) {        case BOOST_IOS::in:            close_input_.execute();            break;        case BOOST_IOS::out:            close_output_.execute();            break;        default:            break;        }    }private:    operation close_input_;    operation close_output_;};// Direct seekable devicetemplate<>class closable_device<direct_seekable> {public:    typedef char             char_type;    typedef direct_seekable  category;    closable_device(operation close) : close_(close) { }    std::pair<char*, char*> input_sequence()    { return std::pair<char*, char*>(0, 0); }    std::pair<char*, char*> output_sequence()    { return std::pair<char*, char*>(0, 0); }    void close() { close_.execute(); }private:    operation close_;};template<typename Mode>class closable_filter { };// Input filtertemplate<>class closable_filter<input> : public input_filter {public:    closable_filter(operation close) : close_(close) { }    template<typename Source>    int get(Source&) { return EOF; }    template<typename Source>    void close(Source&) { close_.execute(); }private:    operation close_;};// Output filtertemplate<>class closable_filter<output> : public output_filter {public:    closable_filter(operation close) : close_(close) { }    template<typename Sink>    bool put(Sink&, char) { return true; }    template<typename Sink>    void close(Sink&) { close_.execute(); }private:    operation close_;};// Bidirectional filtertemplate<>class closable_filter<bidirectional> : public filter<bidirectional> {public:    closable_filter(operation close_input, operation close_output)         : close_input_(close_input), close_output_(close_output)        { }    template<typename Source>    int get(Source&) { return EOF; }    template<typename Sink>    bool put(Sink&, char) { return true; }    template<typename Device>    void close(Device&, BOOST_IOS::openmode which)     {         switch (which) {        case BOOST_IOS::in:            close_input_.execute();            break;        case BOOST_IOS::out:            close_output_.execute();            break;        default:            break;        }    }private:    operation close_input_;    operation close_output_;};// Seekable filtertemplate<>class closable_filter<seekable> : public filter<seekable> {public:    closable_filter(operation close) : close_(close) { }    std::streamsize read(char*, std::streamsize) { return -1; }    template<typename Source>    int get(Source&) { return EOF; }    template<typename Sink>    bool put(Sink&, char) { return true; }    template<typename Device>    stream_offset seek(Device&, stream_offset, BOOST_IOS::seekdir)    {        return 0;    }    template<typename Device>    void close(Device&) { close_.execute(); }private:    operation close_;};// Dual-use filtertemplate<>class closable_filter<dual_use> {public:    typedef char char_type;    struct category         : filter_tag,          dual_use,          closable_tag        { };    closable_filter(operation close_input, operation close_output)         : close_input_(close_input), close_output_(close_output)        { }    template<typename Source>    int get(Source&) { return EOF; }    template<typename Sink>    bool put(Sink&, char) { return true; }    template<typename Device>    void close(Device&, BOOST_IOS::openmode which)     {         switch (which) {        case BOOST_IOS::in:            close_input_.execute();            break;        case BOOST_IOS::out:            close_output_.execute();            break;        default:            break;        }    }private:    operation close_input_;    operation close_output_;};// Symmetric filterclass closable_symmetric_filter {public:    typedef char char_type;    closable_symmetric_filter(operation close) : close_(close) { }    bool filter( const char*&, const char*,                 char*&, char*, bool )    {        return false;    }    void close() { close_.execute(); }private:    operation close_;};} } } // End namespaces test, iostreams, boost.#endif // #ifndef BOOST_IOSTREAMS_TEST_CLOSABLE_HPP_INCLUDED

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -