Changeset 42047

Timestamp:
Dec 14, 2007, 7:30:07 PM (15 years ago)
Author:
Jonathan Turkanis
Message:
  1. 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
  1. If T operates on a single sequence, and is NOT a dual-use filter:
  1. If which == in and the mode of T is convertible to input but not to output, calls t.close() (or t.close(snk))
  1. 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.

  1. 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]

  1. 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

  1. 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

  1. 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

  1. 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]

(No files)

Note: See TracChangeset for help on using the changeset viewer.