12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // (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_COUNTED_ARRAY_HPP_INCLUDED
- #define BOOST_IOSTREAMS_DETAIL_COUNTED_ARRAY_HPP_INCLUDED
- #include <algorithm> // min.
- #include <boost/iostreams/categories.hpp>
- #include <boost/iostreams/detail/char_traits.hpp>
- #include <boost/iostreams/detail/ios.hpp> // streamsize.
- namespace boost { namespace iostreams { namespace detail {
- template<typename Ch>
- class counted_array_source {
- public:
- typedef Ch char_type;
- typedef source_tag category;
- counted_array_source(const Ch* buf, std::streamsize size)
- : buf_(buf), ptr_(0), end_(size)
- { }
- std::streamsize read(Ch* s, std::streamsize n)
- {
- std::streamsize result = (std::min)(n, end_ - ptr_);
- BOOST_IOSTREAMS_CHAR_TRAITS(char_type)::copy
- (s, buf_ + ptr_, result);
- ptr_ += result;
- return result;
- }
- std::streamsize count() const { return ptr_; }
- private:
- const Ch* buf_;
- std::streamsize ptr_, end_;
- };
- template<typename Ch>
- struct counted_array_sink {
- public:
- typedef Ch char_type;
- typedef sink_tag category;
- counted_array_sink(Ch* buf, std::streamsize size)
- : buf_(buf), ptr_(0), end_(size)
- { }
- std::streamsize write(const Ch* s, std::streamsize n)
- {
- std::streamsize result = (std::min)(n, end_ - ptr_);
- BOOST_IOSTREAMS_CHAR_TRAITS(char_type)::copy
- (buf_ + ptr_, s, result);
- ptr_ += result;
- return result;
- }
- std::streamsize count() const { return ptr_; }
- private:
- Ch* buf_;
- std::streamsize ptr_, end_;
- };
- } } } // End namespaces iostreams, boost.
- #endif // #ifndef BOOST_IOSTREAMS_DETAIL_COUNTED_ARRAY_HPP_INCLUDED
|