unix2dos_filter.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 100 行
HPP
100 行
// (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_UNIX2DOS_FILTER_FILTER_HPP_INCLUDED#define BOOST_IOSTREAMS_UNIX2DOS_FILTER_FILTER_HPP_INCLUDED#include <cassert>#include <cstdio> // EOF.#include <iostream> // cin, cout.#include <boost/iostreams/concepts.hpp>#include <boost/iostreams/filter/stdio.hpp>#include <boost/iostreams/operations.hpp>namespace boost { namespace iostreams { namespace example {class unix2dos_stdio_filter : public stdio_filter {private: void do_filter() { int c; while ((c = std::cin.get()) != EOF) { if (c == '\n') std::cout.put('\r'); std::cout.put(c); } }};class unix2dos_input_filter : public input_filter {public: unix2dos_input_filter() : has_linefeed_(false) { } template<typename Source> int get(Source& src) { if (has_linefeed_) { has_linefeed_ = false; return '\n'; } int c; if ((c = iostreams::get(src)) == '\n') { has_linefeed_ = true; return '\r'; } return c; } template<typename Source> void close(Source&) { has_linefeed_ = false; }private: bool has_linefeed_;};class unix2dos_output_filter : public output_filter {public: unix2dos_output_filter() : has_linefeed_(false) { } template<typename Sink> bool put(Sink& dest, int c) { if (c == '\n') return has_linefeed_ ? put_char(dest, '\n') : put_char(dest, '\r') ? this->put(dest, '\n') : false; return iostreams::put(dest, c); } template<typename Sink> void close(Sink&) { has_linefeed_ = false; }private: template<typename Sink> bool put_char(Sink& dest, int c) { bool result; if ((result = iostreams::put(dest, c)) == true) { has_linefeed_ = c == '\r' ? true : c == '\n' ? false : has_linefeed_; } return result; } bool has_linefeed_;};} } } // End namespaces example, iostreams, boost.#endif // #ifndef BOOST_IOSTREAMS_UNIX2DOS_FILTER_FILTER_HPP_INCLUDED
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?