Boost logo

Boost :

From: John Torjo (john.lists_at_[hidden])
Date: 2004-09-06 07:18:23


-------------------------------------------
     * What is your evaluation of the design?

Very nice and clean.

-------------------------------------------

     * What is your evaluation of the implementation?

-------------------------------------------
     * What is your evaluation of the documentation?

Documentation is very nice and neat.

Small comments:

tutorial.html:

" The Iostreams Library allows users to create a standard input stream
or stream buffer by defining a classes with a single member function
read and several member types."
Q: What do you mean, by 'several member types'?

"Buffering and the ability to put back characters come for free."
Q: Can I putback multiple chars, or just one?

3.4 Output Filters

Here your examples use 'filtered_streambuf', while in the Reference
section, you use 'filtering_streambuf'. Is this a typo?

examples.html

I love the presidential filter ;)

policy_based_streams.html:

I think you should visually show that streambuf_facade owns the policy
(the source). I had to look through the code to realize that. I have
later realized that you did say at the beginning " by delegating to a
contained instance of a policy class". Maybe emphasize the "contained
instance" (bold or something)?

filtering_streambuf.html:
Again, by looking at the code, it seems that you own the streambufs. Is
that so? If it is, please state it in the docs (this is more of a
general issue - it applies to other classes as well).
I am worried about this, since I want to know what I need to destroy
manually, and what is destroyed automatically for me.

General issues:
I'm not sure if mixing streambuf and stream concepts is such a good idea.
As I've seen in your examples, you only use streams. Tnus, you don't use
streambufs directly.

While having streambuf_facade is DEFINITELY a good idea, I think you
should have an "Advanced" section, where you talk about the streambufs.
The rest of us are quite happy with having and using stream_facade.

-------------------------------------------

     * What is your evaluation of the potential usefulness of the library?

Very useful

-------------------------------------------

     * Did you try to use the library? With what compiler? Did you
have any problems?

VC7.1 Compiled some examples - they worked ok, after I slightly modified
the jamfile.
(which makes me not like bjam even more - it makes it so hard to build
even trivial things)

-------------------------------------------

     * How much effort did you put into your evaluation? A glance? A
quick reading? In-depth study?

Reviewed it several times (in the past as well).

-------------------------------------------

     * Are you knowledgeable about the problem domain?
Yes

-------------------------------------------

     * Do you think the library should be accepted as a Boost library?
Be sure to say this explicitly so that your other comments don't obscure
your overall opinion.

I think this library should be ACCEPTED.

Best,
John

-- 
John Torjo
Freelancer
-- john_at_[hidden]
Contributing editor, C/C++ Users Journal
-- "Win32 GUI Generics" -- generics & GUI do mix, after all
-- http://www.torjo.com/win32gui/
-- v1.3beta released - check out splitter/simple_viewer,
    a File Explorer/Viewer all in about 200 lines of code!
Professional Logging Solution for FREE
-- http://www.torjo.com/code/logging.zip (logging           - C++)
-- http://www.torjo.com/logview/         (viewing/filtering - Win32)
-- http://www.torjo.com/logbreak/        (debugging         - Win32)

# Boost.Iostreams Library Build Jamfile

# (C) Copyright Jonathan Turkanis 2004
# 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.)

subproject libs/io/build ;

# bring in compression-options template
import ../build/compression ;

local ZLIB = [ cond $(NO_ZLIB) $(NO_COMPRESSION) : : zlib ] ;
local LIBBZ2 = [ cond $(NO_LIBBZ2) $(NO_COMPRESSION) : : bzip2 ] ;

SOURCES = file_descriptor memmap $(ZLIB) $(LIBBZ2) ;

lib boost_io
    : ../src/$(SOURCES).cpp
      [ unless $(NO_COMPRESSION) : <template>compression-options ]
    : # build requirements
      [ common-names ] # magic for install and auto-link features
      <include>$(BOOST_ROOT) <sysinclude>$(BOOST_ROOT)
    : debug release # build variants
      <debug><runtime-link>static
      <release><runtime-link>static
    ;

dll boost_io
    : ../src/$(SOURCES).cpp
      [ unless $(NO_COMPRESSION) : <template>compression-options ]
    : # build requirements
      [ common-names ] # magic for install and auto-link features
      <define>BOOST_IO_DYN_LINK=1 # tell source we're building dll's
      <runtime-link>dynamic # build only for dynamic runtimes
      <include>$(BOOST_ROOT) <sysinclude>$(BOOST_ROOT)
    : debug release # build variants
    ;

install io lib
     : <lib>boost_io <dll>boost_io
     ;

stage stage/lib : <lib>boost_io <dll>boost_io
    :
      # copy to a path rooted at BOOST_ROOT:
      <locate>$(BOOST_ROOT)
      # make sure the names of the libraries are correctly named:
      [ common-names ]
      # add this target to the "stage" and "all" psuedo-targets:
      <target>stage
      <target>all
    : debug release # build variants
    ;

# end


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