counter.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 83 行

HPP
83
字号
// (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_COUNTER_HPP_INCLUDED#define BOOST_IOSTREAMS_COUNTER_HPP_INCLUDED#if defined(_MSC_VER) && (_MSC_VER >= 1020)# pragma once#endif#include <algorithm>  // count.#include <boost/iostreams/categories.hpp>#include <boost/iostreams/char_traits.hpp>#include <boost/iostreams/operations.hpp>#include <boost/iostreams/pipeline.hpp>// Must come last.#include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1 C4244.namespace boost { namespace iostreams {//// Template name: basic_counter.// Template paramters://      Ch - The character type.// Description: Filter which counts lines and characters.//template<typename Ch>class basic_counter  {public:    typedef Ch char_type;    struct category        : dual_use,          filter_tag,          multichar_tag,          optimally_buffered_tag        { };    explicit basic_counter(int first_line = 0, int first_char = 0)        : lines_(first_line), chars_(first_char)        { }    int lines() const { return lines_; }    int characters() const { return chars_; }    std::streamsize optimal_buffer_size() const { return 0; }    template<typename Source>    std::streamsize read(Source& src, char_type* s, std::streamsize n)    {        std::streamsize result = iostreams::read(src, s, n);        if (result == -1)            return -1;        lines_ += std::count(s, s + result, char_traits<Ch>::newline());        chars_ += result;        return result;    }    template<typename Sink>    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)    {        std::streamsize result = iostreams::write(snk, s, n);        lines_ += std::count(s, s + result, char_traits<Ch>::newline());        chars_ += result;        return result;    }private:    int lines_;    int chars_;};BOOST_IOSTREAMS_PIPABLE(basic_counter, 1)typedef basic_counter<char>     counter;typedef basic_counter<wchar_t>  wcounter;} } // End namespaces iostreams, boost.#include <boost/iostreams/detail/config/enable_warnings.hpp>#endif // #ifndef BOOST_IOSTREAMS_COUNTER_HPP_INCLUDED

⌨️ 快捷键说明

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