Browse Source

I. Changed signature and specification of boost::iostreams::close(),
and made corresponding changes throughout the iostreams library.
New spec is:

template<typename T>
void close(T& t);

Convenience function for closing a device; calls close(t, in) and
close(t, out).

template<typename T>
void close(T& t, openmode which);

template<typename T, typename Sink>
void close(T& t, Sink& snk, openmode which);

These two functions should only be called by the library implementation
or by advanced users. The openmode parameter must always equal in or
out, never in | out.

There are three cases:

1. If T is not closable and which == out, calls boost::iostreams::flush

2. If T operates on a single sequence, and is NOT a dual-use filter:

a. If which == in and the mode of T is convertible to input but
not to output, calls t.close() (or t.close(snk))

b. If which == out and the mode of T is not convertible to input or
is convertible to input and to output, calls t.close()
(or t.close(snk))

The effect of a. and b. is that for any T in this category,
close() is called exactly once.

3. If T operates on two sequences or is a dual-use filter, calls
t.close(which) (or t.close(snk, which))

If multiple operations that might throw must be called in the course
of closing a filter or device, all of the operations are attempted
and the first exception thrown by any of the operations is rethrown

The new test close_test.cpp contains 95 checks verifying that the operation
behaves as sepcified.

This affects the following files:

chain.hpp
close.hpp
code_converter.hpp
combine.hpp
compose.hpp
copy.hpp
detail/adapter/basic_adapter.hpp [removed]
detail/adapter/device_adapter.hpp [new]
detail/adapter/direct_adapter.hpp
detail/adapter/filter_adapter.hpp [new]
detail/adapter/mode_adapter.hpp
detail/broken_overload_resolution/stream_buffer.hpp
detail/closer.hpp [removed]
detail/config/limits.hpp
detail/execute.hpp [new]
detail/functional.hpp [new]
detail/streambuf/direct_streambuf.hpp
detail/streambuf/indirect_streambuf.hpp
detail/streambuf/linked_streambuf.hpp
detail/vc6/close.hpp
device/null.hpp
filter/aggregate.hpp
filter/bzip2.hpp
filter/gzip.hpp
filter/line.hpp
filter/newline.hpp
filter/symmetric.hpp
filter/test.hpp
invert.hpp
restrict.hpp
tee.hpp
example/finite_state_filter.hpp
test/Jamfile.v2
test/close_test.cpp [new]
test/code_converter_test.cpp
test/execute_test.cpp [new]
test/operation_sequence_test.cpp [new]

II. When exceptions are caught and ignored, we now use catch (...)
uniformly instead of catch (std::exception&). This affects the
following files:

stream_buffer.hpp
src/mapped_file.cpp

III. Unnecessary dependence on Boost.Range has been eliminated. This
affects the following files:

detail/is_iterator_range.hpp
detail/resolve.hpp
traits.hpp
test/Jamfile.v2
test/filtering_stream_test.cpp
test/offset_test.cpp
test/seek_test.hpp
test/seekable_filter_test.cpp
test/sequence_test.cpp [new]
test/wide_stream_test.cpp

IV. There are several fixes to the documentation. This affects the
following files:

doc/classes/symmetric_filter.html
doc/guide/concepts.html
doc/guide/modes.html
doc/tutorial/container_device.html [serious error in algorithm]
doc/tutorial/dictionary_filters.html [unused member variable]
doc/tutorial/multichar_filters.html

V. Other changes include:

stream.hpp [missing include directive]
example/container_device.hpp [serious error in algorithm]
example/container_device_example.cpp [outdated naming]
example/container_sink_example.cpp [outdated naming]
example/container_source_example.cpp [outdated naming]
example/dictionary_filter.hpp [unused member variable]
test/compose_test.cpp [added comments]
test/example_test.cpp [reformatted]

[SVN r42047]

Jonathan Turkanis 18 years ago
parent
commit
f98a205e91
1 changed files with 1 additions and 1 deletions
  1. 1 1
      libs/iostreams

+ 1 - 1
libs/iostreams

@@ -1 +1 @@
-Subproject commit bea511116c57a82922c6e1cb39297bf1186bab83
+Subproject commit 4f85a131de89253cc1c9d535566de73fc6d2dba5

粤ICP备19079148号