Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/iostreams/detail/adapter/non_blocking_adapter.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
1 // (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com) | |
2 // (C) Copyright 2005-2007 Jonathan Turkanis | |
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying | |
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.) | |
5 | |
6 // See http://www.boost.org/libs/iostreams for documentation. | |
7 | |
8 #ifndef BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED | |
9 #define BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED | |
10 | |
11 #include <boost/iostreams/detail/ios.hpp> // streamsize, seekdir, openmode. | |
12 #include <boost/iostreams/read.hpp> | |
13 #include <boost/iostreams/seek.hpp> | |
14 #include <boost/iostreams/traits.hpp> | |
15 #include <boost/iostreams/write.hpp> | |
16 | |
17 namespace boost { namespace iostreams { | |
18 | |
19 template<typename Device> | |
20 class non_blocking_adapter { | |
21 public: | |
22 typedef typename char_type_of<Device>::type char_type; | |
23 struct category | |
24 : mode_of<Device>::type, device_tag | |
25 { }; | |
26 explicit non_blocking_adapter(Device& dev) : device_(dev) { } | |
27 std::streamsize read(char_type* s, std::streamsize n) | |
28 { | |
29 std::streamsize result = 0; | |
30 while (result < n) { | |
31 std::streamsize amt = iostreams::read(device_, s, n); | |
32 if (amt == -1) | |
33 break; | |
34 result += amt; | |
35 } | |
36 return result != 0 ? result : -1; | |
37 } | |
38 std::streamsize write(const char_type* s, std::streamsize n) | |
39 { | |
40 std::streamsize result = 0; | |
41 while (result < n) { | |
42 std::streamsize amt = | |
43 iostreams::write(device_, s + result, n - result); | |
44 result += amt; | |
45 } | |
46 return result; | |
47 } | |
48 std::streampos seek( stream_offset off, BOOST_IOS::seekdir way, | |
49 BOOST_IOS::openmode which = | |
50 BOOST_IOS::in | BOOST_IOS::out ) | |
51 { return iostreams::seek(device_, off, way, which); } | |
52 public: | |
53 non_blocking_adapter& operator=(const non_blocking_adapter&); | |
54 Device& device_; | |
55 }; | |
56 | |
57 } } // End namespace iostreams. | |
58 | |
59 #endif // #ifndef BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED |