|
Boost : |
From: Jens Maurer (Jens.Maurer_at_[hidden])
Date: 2000-06-26 16:33:30
Ok, here are my review comments before the time runs out.
In general, I think the class is well thought-out and simple.
The examples are ok.
I vote for inclusion into boost.
I'm not sure about the name, but for me "c_array" rings more
bells than simply "array". "block" is definitely out of the
game IMHO. Oh, and "carray" is too munged for my feeling.
But anyway, I don't really care much.
Documentation
-------------
array.html:
Can we stick more closely to the boost look & feel for that page
and have (at least) the boost GIF on top? Maybe even the navigation
bar?
"many feedback": Is it really countable? I thought it was
"much feedback".
"Class array fulfills most but not all of the requirements of
reversible containers (see Section 23.1, [lib.container.requirements]
of the C++ Standard). The class is not an STL container because ..."
This tells you that it isn't quite a reversible container and then
it explains why it isn't a container. Are there any other things
required for a reversible container (as opposed to a simple container)
which are missing from the library? [No, there aren't: please say so.]
Instead of "Home Page", I would appreciate the author's name
clearly visible on the web page.
Implementation
--------------
array.hpp:
Comment after #include´s: // BUG-FIX for compilers that doesn't
support
should say "... don't support" (plural!)
The typedefs in namespace std are non-conforming (because they add to
namespace std in an invalid manner) and they are not guarded by
#ifdef BROKEN_COMPILER (whence this would be tolerable, see
config.hpp).
Additionally, multiple such typedefs (for example, if another
unrelated
heaeder file had the same idea) violate the one definition rule.
Summary: #include <boost/config.hpp> and forget about the issue.
The rangecheck() member function should be declared "const", otherwise
the call from the const at() member function looks invalid.
As mentioned elsewhere, make size(), empty() and max_size() static.
Do we want the "using std::swap;" trick so that Koenig lookup finds
more global element swap() functions?
"// comparisions": My dictionary says the second "i" is superfluous.
array1.cpp:
The example should reference "boost/array.hpp" and not simply
"array.hpp". I don't care for <...> or "...".
We should not use std::endl too often, because it calls flush(),
which is usually a performance bottleneck. Nearly all output
statements can be coalesced to one big expression. After all,
it's an example program, so it should show good manners :-)
array2.cpp:
I don't like "using namespace", and particularly not in
example programs. I favour putting "std::" where it is
required.
PRINT_ELEMENTS() uses all caps, which should be reserved for
preprocessor symbols.
array3.cpp:
Has another print_elements() implementation.
print.hpp:
Incorporate array3.cpp´s print_elements() into array2.cpp
and do away with print.hpp, since it's used only in array2.cpp
anyway.
Enough for now.
Jens Maurer
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk