Boost logo

Boost :

From: James Curran/MVP (jamescurran_at_[hidden])
Date: 2001-11-20 13:54:30


    Truth,
     James Curran

-----Original Message-----
From: boost_at_[hidden] [mailto:boost_at_[hidden]]
Sent: Tuesday, November 20, 2001 5:39 AM
To: boost_at_[hidden]
Subject: [boost] Digest Number 994

Info: http://www.boost.org Unsubscribe:
<mailto:boost-unsubscribe_at_[hidden]>
------------------------------------------------------------------------

There are 25 messages in this issue.

Topics in this digest:

      1. Re: A couple of issues in submitting typelists to boost
           From: "Gennadiy E. Rozental" <rogeeff_at_[hidden]>
      2. Re: arguments parsing, wildcard matcher
           From: "Gennadiy E. Rozental" <rogeeff_at_[hidden]>
      3. Re: Re: A couple of issues in submitting typelists to boost
           From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
      4. proposal: FWL, the most simple license imaginable
           From: "Petr Kocmid" <pkocmid_at_[hidden]>
      5. Re: Re: arguments parsing, wildcard matcher
           From: "David A. Greene" <greened_at_[hidden]>
      6. Re: Re: A couple of issues in submitting typelists to boost
           From: "David Abrahams" <david.abrahams_at_[hidden]>
      7. Re: arguments parsing, wildcard matcher
           From: dylan_at_[hidden]
      8. type_traits request
           From: "David Abrahams" <david.abrahams_at_[hidden]>
      9. Re: type_traits request
           From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
     10. Re: Re: A couple of issues in submitting typelists to boost
           From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
     11. Re: Re: A couple of issues in submitting typelists to boost
           From: Ross Smith <r-smith_at_[hidden]>
     12. huge container types?
           From: dylan_at_[hidden]
     13. Re: arguments parsing, wildcard matcher
           From: "Gennadiy E. Rozental" <rogeeff_at_[hidden]>
     14. huge container types?
           From: "Michael D. Crawford" <crawford_at_[hidden]>
     15. Re: Re: A couple of issues in submitting typelists to boost
           From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
     16. Proposal: Sorted Vector Container
           From: "Corwin Joy" <cjoy_at_[hidden]>
     17. select_type.hpp
           From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
     18. Re: Proposal: Sorted Vector Container
           From: "Corwin Joy" <cjoy_at_[hidden]>
     19. Quick q on simple type manipulation helpers
           From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
     20. Re: arguments parsing, wildcard matcher
           From: Petr Ovchenkov <ptr_at_[hidden]>
     21. Re: can't get ublas files (Re: Re: Boost Matrix classes /
MTLv3)
           From: Peter Schmitteckert (boost) <boost_at_[hidden]>
     22. Re: can't get ublas files (Re: Re: Boost Matrix classes /
MTLv3)
           From: Toon Knapen <toon.knapen_at_[hidden]>
     23. Re: type_traits request
           From: "David Abrahams" <david.abrahams_at_[hidden]>
     24. Re: Re: Proposal: Sorted Vector Container
           From: "David Abrahams" <david.abrahams_at_[hidden]>
     25. Re: Quick q on simple type manipulation helpers
           From: "Vladimir Ciobanu" <psycho_at_[hidden]>

________________________________________________________________________
________________________________________________________________________

Message: 1
   Date: Tue, 20 Nov 2001 01:11:16 -0000
   From: "Gennadiy E. Rozental" <rogeeff_at_[hidden]>
Subject: Re: A couple of issues in submitting typelists to boost

> * How about test code? What is the canonical way of adding test
suites to
> parts of boost?

You may use Boost Test Library 2nd release, which is about to be
submitted for review. I hope it will satisfy all your testing needs.
If not let me know.

Location:

http://groups.yahoo.com/group/boost/files/unit%20test%
20framework/btl2_b3.zip

>
>
> Cheers,
>
> Andrei

Enjoy,

Gennadiy.

________________________________________________________________________
________________________________________________________________________

Message: 2
   Date: Tue, 20 Nov 2001 02:40:08 -0000
   From: "Gennadiy E. Rozental" <rogeeff_at_[hidden]>
Subject: Re: arguments parsing, wildcard matcher

--- In boost_at_y..., "Henrik Ravn" <henrik_at_r...> wrote:
> Hi,
>
> > We should be really careful when implementating such generic
> > component as command line parser. We should find a REASONABLE
level
> > of complexity vs. flexibility. The command line arguments parsing
> > does not require to be efficient. So it should be implemented
mostly
> > offline (maybe with exclusion of user defined argument classes).
We
> > just should keep in mind that the library could be used for EVERY
> > program. Can you imagine that all your programs will require
Spirit
> > Framework to compile and run?
> No, this is clearly overkill and this is why I suggest a tool that
sits
> between a description of the command line and the code that ends up
> parsing it in the actual app. The tool would use a parsing
framework,
> such as Spirit or whatever.
>
> Using such a tool the developer would write the spec for the
commandline
> in some format (dare I say xml?) and save it in a file, e.g.
myapp.cld.
> At build time, myapp.cld is run through the tool, parsed and the
> relevant hpp/cpp files are generated for the project.
>
> Such a tool would bring a lot of flexibility without adding
complexity
> to the apps that use it. Not only can usage statements be
generated, but
> man-pages or other usage documentation can be generated this way.
In a
> far distant future, you can even imagine that GUI apps can benefit
from
> this. In a GUI environment, instead of simply generating a usage
message
> dialog, why not generate a dialog box that enables the user to
actively
> set the options via standard GUI widgets?
>
> My point is not to argue for xml (I'll do that some other time :-),
but
> mainly that by not specifying the command line syntax in C++ we
gain a
> whole lot of future possibilies and can still keep the user code
fairly
> simple.
>
> be well
> Henrik

If we factor GUI out documntation isuues whi are totally separate
(For example, if you ever want to use tool for documentation
generation you would use it for all the components of the software.
So you will need some kind of generic utility that is not connected
with any specific one - CLA in our case) I do not see any advantages
in using stand alone tool. Your framework will still need to provide
all the functionallity that will be compiled with program. You still
need algorithms for parsing all kind of argument identification. I
need an aceees methods and other staff. The onle differenceis that in
one case you define arguments in a nexternal file something like this:
<argument>
   <name>port</name>
   <description>bla-bla-bla</description>
   <type>int</type>
   <identification>option --</identification>
   <optional></optional>
</argument>

vs.

new argument<int>( "--port", "bla-bla-bla", true, /*optional*/,
                   KeyIdentifcationPolicy( "--" ) );

I think the rationalle is to use external definitions only fot things
that are (though your tool is not exactly the case):
  1. End-user configurable
  2. Frequently or dynamically changed.
  3. Widely shared information
IMHO reusable and flexible enough command line argument parser could
be implemented without involving any external tools.

Regards,

Gennadiy.

________________________________________________________________________
________________________________________________________________________

Message: 3
   Date: Mon, 19 Nov 2001 18:53:20 -0800
   From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
Subject: Re: Re: A couple of issues in submitting typelists to boost

> > #define SUPERSUBCLASS(T, U) \
> > (::Loki::Conversion<const U*, const T*>::exists && \
> > !::Loki::Conversion<const T*, const void*>::sameType)
> >
>
> Why don't to implement this using boost::is_convertable and
> boost::same_type?

I just pasted code from Loki. My entire point was to suggest adding a
similar macro to boost.

Andrei

________________________________________________________________________
________________________________________________________________________

Message: 4
   Date: Tue, 20 Nov 2001 03:40:06 +0100
   From: "Petr Kocmid" <pkocmid_at_[hidden]>
Subject: proposal: FWL, the most simple license imaginable

Hi there,

A simple license should have two parts of it:

1. Statement of authorship of the work. This is needed for satisfying
some local laws. Under some laws, copyright and authorship are quite
different legal terms. Copyright is a right to publish the piece of
work, which is not the same as authorship. If desired, copyright should
be added.

2. Statement of availability (nonexclusivity in copy publishing rights).
Here goes my invention: A Free Will License. It sounds: "You can do
whatever is your will with your copy of this software."

An example:
// This software has been written by Petr Kocmid.
// Copyright 2001 by Petr Kocmid
// Free Will License:
// You can do whatever is your will with your copy of this software.

Such licence reflects completely transient existential nature of
software copy without any restriction of every imaginable manipulation
with it.

Petr Kocmid

________________________________________________________________________
________________________________________________________________________

Message: 5
   Date: Mon, 19 Nov 2001 22:17:14 -0500
   From: "David A. Greene" <greened_at_[hidden]>
Subject: Re: Re: arguments parsing, wildcard matcher

Gennadiy E. Rozental wrote:

> program. Can you imagine that all your programs will require Spirit
> Framework to compile and run? I think we could use the following

Oh, I'm not saying we can't design it to be componentized in
some way. I'm throwing out ideas, _not_ anything close to
a final design. The last thing I'd want to do is upload
the code I have. It is _not_ the sort of thing we want in
Boost, I think.

The parser framework is just a convenient way to, well, parse. :)
An older version I have uses good ol' manual string processing.
It gets a bit ugly with nested options, though, which is why
I wanted a more formalized approach for the applications
I've been working on. I wouldn't use it in something like
tar. :)

> For example to register an action for particular argument presence
> you will need somethink like:
> new argument( ..., do_this_action_if_present() );
> While the same logic could be implemented like this:
> if( argument.is_present() )
> do_somethink();
>
> The second version is also more stable because you now know in which
> order events will ocure.

Hmm...I prefer the first because things are logically separated
(defining what the option keywords are and defining what they do).

We often want to do a lot more than just know if a switch

has been set. I can imagine situations where the meanings of
switches changes based on what other arguments are present.
There is an ordering issue, yes. The processing order is defined
by which order the arguments appear on the command line. Perhaps
not ideal but some other convention could be defined.

I'm brainstorming here, not presenting the One True Way.

                              -Dave

-- 
"Some little people have music in them, but Fats, he was all music,
  and you know how big he was."  --  James P. Johnson
________________________________________________________________________
________________________________________________________________________
Message: 6
   Date: Mon, 19 Nov 2001 22:26:05 -0500
   From: "David Abrahams" <david.abrahams_at_[hidden]>
Subject: Re: Re: A couple of issues in submitting typelists to boost
And why do you want this to be a macro?
----- Original Message -----
From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Monday, November 19, 2001 9:53 PM
Subject: Re: [boost] Re: A couple of issues in submitting typelists to
boost
> > > #define SUPERSUBCLASS(T, U) \
> > >     (::Loki::Conversion<const U*, const T*>::exists && \
> > >     !::Loki::Conversion<const T*, const void*>::sameType)
> > >
> >
> > Why don't to implement this using boost::is_convertable and
> > boost::same_type?
>
> I just pasted code from Loki. My entire point was to suggest adding a
> similar macro to boost.
>
>
> Andrei
>
> Info: http://www.boost.org  Unsubscribe:
<mailto:boost-unsubscribe_at_[hidden]>
>
> Your use of Yahoo! Groups is subject to
http://docs.yahoo.com/info/terms/
>
>
________________________________________________________________________
________________________________________________________________________
Message: 7
   Date: Tue, 20 Nov 2001 04:33:29 -0000
   From: dylan_at_[hidden]
Subject: Re: arguments parsing, wildcard matcher
--- In boost_at_y..., dylan_at_m... wrote:
> --- In boost_at_y..., "Henrik Ravn" <henrik_at_r...> wrote:
> > > > struct file_finder
> > > > {
> > > > 	file_finder(const char* pattern);
> > > > 	~file_finder();
> > > > 	typedef const char* const* iterator;
> > > > 	operator bool() const;
> > > > 	iterator begin();
> > > > 	iterator end();
> > > > private:
> > > > 	glob_t glob_;
> > > > };
> > > > 
> > > 
> > 
I've uploaded file_finder.zip containing file_finder.hpp (which 
declares and implements the entire class), and for win32, glob.h and 
glob.c - I'm not sure what the policy on providing platform specific 
headers and source files is, so I just left them in a 'win32' 
directory.  On POSIX platforms they aren't needed of course.  
Obviously you can also use something like cygwin if you are happy 
with that dependency.
Dylan
________________________________________________________________________
________________________________________________________________________
Message: 8
   Date: Tue, 20 Nov 2001 00:27:39 -0500
   From: "David Abrahams" <david.abrahams_at_[hidden]>
Subject: type_traits request
I just came across a repeated need for add_cv<T>. We already have
remove_cv<T>. How about it, for symmetry?
-Dave
===================================================
  David Abrahams, C++ library designer for hire
 resume: http://users.rcn.com/abrahams/resume.html
        C++ Booster (http://www.boost.org)
          email: david.abrahams_at_[hidden]
===================================================
________________________________________________________________________
________________________________________________________________________
Message: 9
   Date: Mon, 19 Nov 2001 22:19:06 -0800
   From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
Subject: Re: type_traits request
> I just came across a repeated need for add_cv<T>. We already have
> remove_cv<T>. How about it, for symmetry?
I guess that would be too simple: add_cv<T> is just "const volatile T".
Andrei
________________________________________________________________________
________________________________________________________________________
Message: 10
   Date: Mon, 19 Nov 2001 22:20:24 -0800
   From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
Subject: Re: Re: A couple of issues in submitting typelists to boost
> And why do you want this to be a macro?
I believe that SUPERSUBCLASS is an important, useful abstraction.
Writing
the content of SUPERSUBCLASS inline in code just hides the intent with
the
mechanics.
Andrei
________________________________________________________________________
________________________________________________________________________
Message: 11
   Date: Tue, 20 Nov 2001 19:34:04 +1300
   From: Ross Smith <r-smith_at_[hidden]>
Subject: Re: Re: A couple of issues in submitting typelists to boost
Andrei Alexandrescu wrote:
> 
> > And why do you want this to be a macro?
> 
> I believe that SUPERSUBCLASS is an important, useful abstraction.
Writing
> the content of SUPERSUBCLASS inline in code just hides the intent with
the
> mechanics.
Yes, but WHY A MACRO?
Much as I admire your code in general, Andrei, you do have this
deplorable tendency to fall in love with the preprocessor. :-) There are
several concepts in MC++D (TYPELIST<n> is another) that, for no good
reason that I can see, you've gratuitously written as macros when they
could be expressed just as easily in safe code.
-- 
Ross Smith ...................................... Auckland, New Zealand
r-smith_at_[hidden] ........................ http;//halflife.mani.ac.nz/
        "A wise man learns from the mistakes of others; a fool
        learns only from his own."     -- Gen. Aleksandr Lebed
________________________________________________________________________
________________________________________________________________________
Message: 12
   Date: Tue, 20 Nov 2001 06:38:24 -0000
   From: dylan_at_[hidden]
Subject: huge container types?
Hi,
Has anyone tried implementing something to support huge containers 
that couldn't possibly fit into memory (even using swap space). I'm 
not talking about sparse arrays, I mean where you actually need 8Gig 
of space to store information that you are working on actively, and 
need to be able to access it transparently without caring whether it 
is stored on disk or in memory (so that, for instance, you can 
dynamically adjust how much is stored in memory and how much on disk).
8 gig is just about enough to hold the matrices necessary to do 
certain forms of boundary element and finite element analysis on 
complex input models, so this is not a purely theoretical need!
I tried to think about what would be involved in implementating, say, 
std::vector so that you could specify that a certain amount would be 
cached in memory, while the rest was manually read and written to 
disk.  One implication is that operations that reduce the size of the 
vector (including destruction) would be potentially extremely slow as 
all the elements being destructed would have to be "swapped" in first.
An option to disable this would probably be necessary (user beware of 
course).
Ideally of course it should be possible by implementing just an 
custom allocator.  Assuming that a vector's iterator ultimately uses 
allocator::pointer then if you write an allocator where pointer is 
actually a 'smart pointer' that swaps as needed, this would probably 
be 90% of the work.
Well actually "ideally" the OS would handle all this for you, but the 
reality is that very few OS's are set up to optimally use all 
available disk space for swapping.  Even most unices don't seem to 
handle trying to configure more than 4 gig of swap space too well, 
and NT is doing well if it handles 4 meg...
Anyway size_t is usually a 32-bit int on 32-bit systems which severly 
limits how much memory new[] can handle - I'm making the assumption 
that size_type will be 64-bit.
Thoughts/comments...
Dylan
________________________________________________________________________
________________________________________________________________________
Message: 13
   Date: Tue, 20 Nov 2001 06:56:19 -0000
   From: "Gennadiy E. Rozental" <rogeeff_at_[hidden]>
Subject: Re: arguments parsing, wildcard matcher
--- In boost_at_y..., "David A. Greene" <greened_at_e...> wrote:
> >   For example to register an action for particular argument 
presence 
> > you will need somethink like:
> >      new argument( ..., do_this_action_if_present() );
> > While the same logic could be implemented like this:
> >    if( argument.is_present() )
> >      do_somethink();
> > 
> > The second version is also more stable because you now know in 
which 
> > order events will ocure.
> 
> 
> Hmm...I prefer the first because things are logically separated
> (defining what the option keywords are and defining what they do).
I lost me there. I think vice versa. First version unite 2 think 
while second separate argument identification and parsing from 
argument processing.
> 
> We often want to do a lot more than just know if a switch
> has been set.  I can imagine situations where the meanings of
> switches changes based on what other arguments are present.
> There is an ordering issue, yes.  The processing order is defined
> by which order the arguments appear on the command line.  Perhaps
> not ideal but some other convention could be defined.
IMHO you will immediately find a bag of problems as soon as start 
mixing 2 things in one bottle. The design should encorage users to 
separate actions. Was the action performd while parsing a command 
line? What to do if user put arguments in wrong order? Or framework 
that smart that it will be able to handle any input? We should not 
make a very smart (and very complex appropriately) components by 
itself. If it possible we could try to place a hook for extentions. 
And everybody could make parser as smart as thay need.
Regards,
Gennadiy.
> 
> I'm brainstorming here, not presenting the One True Way.
> 
>                               -Dave
> 
> -- 
> 
> "Some little people have music in them, but Fats, he was all music,
>   and you know how big he was."  --  James P. Johnson
________________________________________________________________________
________________________________________________________________________
Message: 14
   Date: Tue, 20 Nov 2001 02:07:41 -0500
   From: "Michael D. Crawford" <crawford_at_[hidden]>
Subject: huge container types?
While it was not C++, I once implemented a scrolling list GUI object on
the Mac 
OS in ANSI C that had hundreds of thousands of items for tens of
megabytes of 
list data.  This was in the days when 32 MB of RAM was a lot, and
virtual memory 
was not always used on the Mac OS and didn't perform all that well.
The native Mac OS List Manager was limited to 32kb of data because it
used 
signed 16 bit offsets into your data.  The usual way to get more data
into the 
list was to scroll a list of pointers, which would then get you 8192
items, 
still not nearly enough for my case.
The application was text retrieval off a CDROM.  I forget what exactly
went in 
the list, but the CD was called The Total Heart and in general had a lot
of SGML 
text about heart medicine, anatomy and health.
What I did was write a lookalike replacement for the list manager that
held at 
most a couple hundred items in memory.  Whenever you would scroll one
way or 
another in the list, it would grab some records off the CD ahead of
where you'd 
scrolled (or behind if you were scrolling backwards), and dump some off
its list 
if the cache was more than I'd configured it to be.
If you made a large jump I just dropped the cache and fetched new
records.  If 
one were to do it in a fancier way, you could keep discontinuous cache
ranges so 
if you jump back and forth then you could have immediate access.
What you'd want to do is implement something like a Least Recently Used
cache 
algorithm that worked like whichever of the existing STL containers fits
your 
application most naturally.  Dereferencing an iterator will also move
your cache 
entry to the front of the list.  Or alternatively you could  use a Least
Frequently Used cache algorithm in which derefencing an iterator will
increment 
an access count.
In any case, make a parameter to the constructor that gives the cache
size.  Or 
for extra credit make sure you're exception-safe and just drop cache
items when 
you run out of memory.
-- 
Michael D. Crawford
GoingWare Inc. - Expert Software Development and Consulting
http://www.goingware.com
crawford_at_[hidden]
   Tilting at Windmills for a Better Tomorrow.
     "I give you this one rule of conduct. Do what you will, but speak
      out always. Be shunned, be hated, be ridiculed, be scared,
      be in doubt, but don't be gagged."
      -- John J. Chapman, "Make a Bonfire of Your Reputations"
         http://www.goingware.com/reputation/
________________________________________________________________________
________________________________________________________________________
Message: 15
   Date: Mon, 19 Nov 2001 23:04:55 -0800
   From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
Subject: Re: Re: A couple of issues in submitting typelists to boost
> Yes, but WHY A MACRO?
Ok, I agree in this case one can use super_subclass<T, U>::type (can you
say
"pretty ugly")...
> Much as I admire your code in general, Andrei, you do have this
> deplorable tendency to fall in love with the preprocessor. :-) There
are
> several concepts in MC++D (TYPELIST<n> is another) that, for no good
> reason that I can see, you've gratuitously written as macros when they
> could be expressed just as easily in safe code.
You must be referring to the TYPELIST_nn macros.
It's very simple. I don't give a rat's ass on the preprocessor and I'm
fully
aware of its vandalism. It's just that the set of requirements that I
had
for typelist "constructors" left the preprocessor as the only contender:
1. easy to use
2. scaleable up to more parameters
(We can discuss separately whether or not these were good criteria.)
So I put together the nasty TYPELIST_1 to TYPELIST_50 and used them. I
didn't notice name clashes etc., but I did notice an important
shortcoming:
3. If you use a comma inside a macro, it won't work. Consider:
typedef TYPELIST_2(vector<int, myallocator>, vector<int, yourallocator>)
    TwoVectors;
that won't work because the preprocessor strongly believes that you
actually
passed four arguments to TYPELIST_2. What a nuisance. You can fix that
by
putting in place typedefs for those types.
So it's a tradeoff issue. Any solution that fixes point 3 fails on point
1,
point 2, or (most often) both 1 and 2.
Andrei
________________________________________________________________________
________________________________________________________________________
Message: 16
   Date: Tue, 20 Nov 2001 02:09:23 -0600
   From: "Corwin Joy" <cjoy_at_[hidden]>
Subject: Proposal: Sorted Vector Container
Michael Gradman and myself have uploaded a new contaier to the
boost files area in a folder called vec_multiset.
What it is:
A wrapper that holds a sorted vector in such a way as to make it look
like a std::multiset.
Why:
It has been observed by Scott Meyers ("Effective STL") and others that
in
many situations
when dealing with sorted data one has a "setup" phase followed by a
"lookup" phase where items are retrieved from the container.  In this
situation
a sorted vector can offer superior performance to the standard tree
implementation
used by multiset both in terms of memory and speed.  We have taken the
step
of wrapping a sorted vector with an interface very similar to a
std::multiset
to make it easy to convert code that uses multiset to a faster
implementation
when a setup/lookup pattern is followed.
How:
By using some fancy footwork we were able to preserve multiset
requirements
like iterator invariants after insertions/deletions and several other
features
making for quite a nice container.  There are really only two major
limitations
on this container versus a true multiset:
1. Because it uses a vector as the underlying container to hold data,
individual
elements may get shifted around in memory.  If you need pointer or
reference
validity throughout the lifetime of the container, use std::multiset.
Vec_multiset's
underlying container can shift the data elements around in memory.
However,
if you write your code in a more modern fashion to use iterators rather
than
pointers, you can still use vec_multiset.
2. Exception safety.  Because it uses vector to hold the data elements
this
container
suffers from the same exception safety issues a std::vector.
More documentation about how we built this container to preserve
interator
invariants
and other details can be found at:
Documentation:
http://groups.yahoo.com/group/boost/files/vec_multiset/vec_multiset.htm
Code:
http://groups.yahoo.com/group/boost/files/vec_multiset/vec_multiset.zip
________________________________________________________________________
________________________________________________________________________
Message: 17
   Date: Tue, 20 Nov 2001 00:09:40 -0800
   From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
Subject: select_type.hpp
I think if_true in select_type ought to become a first-class citizen.
It's
useful enough to everyone.
I also suggest including the friendlier version:
    template <bool flag, typename T, typename U>
    struct select
    {
        typedef T type;
    };
    template <typename T, typename U>
    struct Select<false, T, U>
    {
        typedef U type;
    };
for compilers that support partial specialization. The if_true is
compiler-friendlier but considerably harder to use (that "template" in
the
middle of it is really annoying).
Andrei
________________________________________________________________________
________________________________________________________________________
Message: 18
   Date: Tue, 20 Nov 2001 08:14:23 -0000
   From: "Corwin Joy" <cjoy_at_[hidden]>
Subject: Re: Proposal: Sorted Vector Container
--- In boost_at_y..., "Corwin Joy" <cjoy_at_h...> wrote:
> Michael Gradman and myself have uploaded a new contaier to the
> boost files area in a folder called vec_multiset.
> 
One more comment.  So far, we have tested this with Visual C++ 6.0 
and GCC 2.96.
________________________________________________________________________
________________________________________________________________________
Message: 19
   Date: Tue, 20 Nov 2001 00:23:46 -0800
   From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
Subject: Quick q on simple type manipulation helpers
Are there somewhere in boost equivalents for the templates below?
    template <int v>
    struct int2type
    {
        enum { value = v };
    };
    
    template <typename T>
    struct type2type
    {
        typedef T original_type;
    };
Thanks,
Andrei
________________________________________________________________________
________________________________________________________________________
Message: 20
   Date: Tue, 20 Nov 2001 11:45:56 +0300
   From: Petr Ovchenkov <ptr_at_[hidden]>
Subject: Re: arguments parsing, wildcard matcher
Hmm, while you mixed walk through catalog and argument parsing?
IMO it a different tasks.
  - ptr
________________________________________________________________________
________________________________________________________________________
Message: 21
   Date: Tue, 20 Nov 2001 09:55:22 +0100
   From: Peter Schmitteckert (boost) <boost_at_[hidden]>
Subject: Re: can't get ublas files (Re: Re: Boost Matrix classes /
MTLv3)
Hello,
On Tuesday 20 November 2001 00:39, David Abrahams wrote:
> Try:
>
>   cvs -z3
-d:pserver:anonymous_at_[hidden]:/cvsroot/boost
>        co -rmatrix_development boost/libs/numeric/ublas
>
> or, since you already have got the module structure:
>
>     cvs -z3 update -rmatrix_development
Thanks for your hints, I tried both, removed my files I tried it again.
But I still can't find the sources. The test- and benchmarks- files 
are downloaded, but not the ublas sources.
Any help ?
best wishes
Peter
------------------
P.S.: 
peter_at_wawa:~/Boost/boost/libs/numeric/ublas$ ls *
CVS:
Entries  Repository  Root  Tag
bench1:
CVS  bench1.cpp  bench1.h  bench11.cpp  bench12.cpp  bench13.cpp
bench2:
CVS  bench2.cpp  bench2.h  bench21.cpp  bench22.cpp  bench23.cpp
bench3:
CVS  bench3.cpp  bench3.h  bench31.cpp  bench32.cpp  bench33.cpp
doc:
CVS             iterator.htm   matrix_sp.htm   vector.htm
container.htm   matrix.htm     proxy.htm       vector_et.htm
expression.htm  matrix_et.htm  storage.htm     vector_pr.htm
index.htm       matrix_pr.htm  storage_sp.htm  vector_sp.htm
test1:
CVS  test1.cpp  test1.h  test11.cpp  test12.cpp  test13.cpp
test2:
CVS  test2.cpp  test2.h  test21.cpp  test22.cpp  test23.cpp
test3:
CVS  test3.cpp  test3.h  test31.cpp  test32.cpp  test33.cpp
test4:
CVS  test4.cpp  test4.h  test41.cpp  test42.cpp  test43.cpp
test5:
CVS  test5.cpp  test5.h  test51.cpp  test52.cpp  test53.cpp
test6:
CVS  test6.cpp  test6.h  test61.cpp  test62.cpp  test63.cpp
peter_at_wawa:~/Boost/boost/libs/numeric/ublas$ cvs --version
Concurrent Versions System (CVS) 1.11.1p1 (client/server)
Copyright (c) 1989-2001 Brian Berliner, david d `zoo' zuhn, 
                        Jeff Polk, and other authors
CVS may be copied only under the terms of the GNU General Public
License,
a copy of which can be found with the CVS distribution kit.
Specify the --help option for further information about CVS
________________________________________________________________________
________________________________________________________________________
Message: 22
   Date: Tue, 20 Nov 2001 10:22:27 +0100
   From: Toon Knapen <toon.knapen_at_[hidden]>
Subject: Re: can't get ublas files (Re: Re: Boost Matrix classes /
MTLv3)
Peter Schmitteckert (boost) wrote:
> Hello,
> 
> On Tuesday 20 November 2001 00:39, David Abrahams wrote:
> 
>>Try:
>>
>>  cvs -z3
-d:pserver:anonymous_at_[hidden]:/cvsroot/boost
>>       co -rmatrix_development boost/libs/numeric/ublas
>>
>>or, since you already have got the module structure:
>>
>>    cvs -z3 update -rmatrix_development
>>
> 
> Thanks for your hints, I tried both, removed my files I tried it
again.
> But I still can't find the sources. The test- and benchmarks- files 
> are downloaded, but not the ublas sources.
> 
> Any help ?
It's best you just checkout the whole matrix_development branch !
So remove your current attempt (to get rid of sticky tags) or make
a new directory, `cd` to this directory and do :
`cvs -z3 co -r matrix_development boost`
of course, your CVSROOT env. var should be defined or you have to use
the -d option of the CVS command.
This command will create the sources of uBlas in the libs subdirectory 
and the
headers in the boost/numeric/ublas directory.
let me know if you succeed
toon
________________________________________________________________________
________________________________________________________________________
Message: 23
   Date: Tue, 20 Nov 2001 05:15:30 -0500
   From: "David Abrahams" <david.abrahams_at_[hidden]>
Subject: Re: type_traits request
That's a good point. I remember we went through this about add_const<>
and
add_volatile<>, which made it in to the library ;-)
----- Original Message -----
From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
> > I just came across a repeated need for add_cv<T>. We already have
> > remove_cv<T>. How about it, for symmetry?
>
> I guess that would be too simple: add_cv<T> is just "const volatile
T".
>
>
> Andrei
>
> Info: http://www.boost.org  Unsubscribe:
<mailto:boost-unsubscribe_at_[hidden]>
>
> Your use of Yahoo! Groups is subject to
http://docs.yahoo.com/info/terms/
>
>
________________________________________________________________________
________________________________________________________________________
Message: 24
   Date: Tue, 20 Nov 2001 05:36:50 -0500
   From: "David Abrahams" <david.abrahams_at_[hidden]>
Subject: Re: Re: Proposal: Sorted Vector Container
I'm really glad that someone is taking an active interest in this
subject
again!
Please have a look at
http://groups.yahoo.com/group/boost/message/3226
http://groups.yahoo.com/group/boost/message/3777
http://groups.yahoo.com/group/boost/files/associative_vector/
Without having looked at your code, I'll surmise that iterator stability
is
acheived by embedding a reference to the vector and an offset in the
iterator. I am not convinced that iterator stability is usually worth
the
cost, and I'd rather not pay for it if I wasn't going to use it. My plan
for
implementing stability was to provide pointer/reference stability via an
indirect_container adaptor which uses boost::indirect_iterator (In fact,
this is the work that spawned the Boost Iterator Adaptors Library). This
approach has several advantages, not least that reallocating the vector
becomes very cheap because it just has to copy POD data.
-Dave
----- Original Message -----
From: "Corwin Joy" <cjoy_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Tuesday, November 20, 2001 3:14 AM
Subject: [boost] Re: Proposal: Sorted Vector Container
> --- In boost_at_y..., "Corwin Joy" <cjoy_at_h...> wrote:
> > Michael Gradman and myself have uploaded a new contaier to the
> > boost files area in a folder called vec_multiset.
> >
>
> One more comment.  So far, we have tested this with Visual C++ 6.0
> and GCC 2.96.
>
>
> Info: http://www.boost.org  Unsubscribe:
<mailto:boost-unsubscribe_at_[hidden]>
>
> Your use of Yahoo! Groups is subject to
http://docs.yahoo.com/info/terms/
>
>
	I disagree.  One of the purposes of Boost is to create a body of
classes which can be standardized on (either formally or de facto). If
NullClass is widely useful, and apparently it is, as so far two projects
here have found a use for such a class, then it should, by itself, be a
feature of Boost, and all of us (at least) should standardize on that
one.
________________________________________________________________________
   From: "Vladimir Ciobanu" <psycho_at_[hidden]>
   They may be, but even if they are, I'd still rather keep separate
things
in separate parts of library. 

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