Boost logo

Boost :

From: Daryle Walker (darylew_at_[hidden])
Date: 2004-06-04 01:34:56


The latest version of More-I/O is in our YahooGroups Files area at
<http://groups.yahoo.com/group/boost/files/more_io_4.zip>. This should be
the version to be used for the upcoming (second) review.

I built this version before my recent hard-drive reformat and OS upgrade,
and I haven't tested it yet on my new system. Quick portability checks
would be appreciated.

I noticed that some reviewed libraries put their code up on the (login-free)
web space SourceForge reserved for the Sandbox CVS. How is that done? Does
an administrator need to give me special access? (I already have read and
write access to the CVS part of the Sandbox.)

Contents:

* I/O Manipulators
    * expansions of endl
        The "new line then flush" function was generalized with optional
flushing, repeat amounts, and selectable breaking characters. Streams can
output characters belonging to their character type, but also of type "char"
(no matter what "char_type" is). The "multi_basic_newer" class template
works with a specific "char_type", but any "traits_type". The "multi_newer"
class works only with "char" values, but any "char_type" and "traits_type".
The "multi_newl" works as an easy way to use "multi_newer". And "newl"
encapsulates the most common case of "endl" - "flush".
    * input-oriented variations of endl
        Instead of writing a new line, these manipulators read (and ignore)
lines instead. These work similarly to their output-oriented counterparts:
"multi_basic_skipper", "multi_skipper", "multi_skipl", and "skipl".
    * basic non-oriented
        The "resetios" manipulator defaults most of a stream's formatting
attributes.
    * complex non-oriented
        The "basic_ios_form" class template can encapsulate several
simultaneous formatting changes in a potentially reusable object.
Configurations of such objects can be done in a progressive manner.
* Stream-buffer wrappers
    Creating new stream types generally involving making a custom stream
buffer class, then connecting it to a generic stream class shell. The
wrappers "basic_wrapping_istream", "basic_wrapping_ostream", and
"basic_wrapping_iostream" help with the latter. These are used by all of
the streams given later in this library.
* Elementary streams
    * null-stream ("onullstream", etc.)
        Acts as an infinite character destination and an empty character
source, like "/dev/null"
    * value-stream ("ivaluestream", etc.)
        Acts as an empty character destination and an infinite character
source, like "/dev/zero" (The returned character is configurable.)
* Character buffer streams (legacy of strstream)
    The std::basic_stringstream family works as an modernized substitute for
std::strstream most of the time, but it's overkill when the dynamic memory
nature isn't needed. The following class templates fill in the missing
modes of the (surprisingly overloaded) std::strstream family.
    * run-time specified character buffer ("pointerstream", etc.)
        Only uses the character buffer given to it at construction time,
gives EOF instead of going to dynamic memory management when full. There is
a variant for constant buffers (read-only, of course). These classes are
essential when an existing buffer can be used without forcing a copy (e.g.
larger than 50% of RAM).
    * compile-time specified fixed-size character buffer
        The "basic_array_streambuf" class template uses an internally
contained array as the character buffer. More convenient than the previous
class when the maximum buffer size is fixed at compile time and there is
little need for sharing the buffer.

Changes from the last interim version (called "more_io_3b.zip"):
    * split the manipulator header into several headers
    * refined the license statements in some already-affected files

Changes from the first formal review (called "more_io.zip"):
    * refined the interface and implementation of array-streams and
      stream-buffer wrappers (including a wrapping example)
    * added the null-stream, value-stream, and pointer-stream headers
    * added generalizations to the new-line and skip-line manipulators
    * added the non-oriented 'reset' and 'form' manipulators
    * split the manipulator header into several headers
    * changed the license statements

-- 
Daryle Walker
Mac, Internet, and Video Game Junkie
darylew AT hotmail DOT com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk