Boost logo

Boost :

From: David Manura (dm.list_at_[hidden])
Date: 2006-07-20 11:52:38

Steven Burns <royalstream <at>> writes:
> Recently I came up with a modified version of boost::array that supports
> runtime sized arrays....boost::array<int> darray(10);

Something I think would be useful is an implementation similar to
std::vector that uses a small-string like optimization, where the
size of the stack buffer is a template parameter. For example,

  myarray<char, 10> v; // allocates 10 bytes on the stack
  for(int n=0; n<9; n++) v.push_back('.'); // no heap allocations
  for(int n=0; n<9; n++) v.push_back('.'); // triggers realloc from heap

This has a few advantages:

(1) For <= 10 chars, it requires no heap allocation and therefore
    is fast for some things (similar to C arrays and boost::array).
(2) It can grow beyond 10 chars via heap allocation (like
    std::vector but unlike boost::array).
(3) It maintains both variable size and capacity (like std::vector
    but unlike boost::array).

In fact, this is the approach I'm taking to reimplement basic_string
via flex_string (, though I had patch
flex_string so that it would work with N > 127 :

  template <size_t N> struct sstring {
    typedef flex_string<
      SmallStringOpt<SimpleStringStorage<char>, N>
> type;
  sstring<500>::type s; // usage

Perhaps there could be a "flex_vector" as well?

    SmallVectorOpt<SimpleVectorStorage<int>, N>

BTW, is there any chance that flex_string might be added to Boost?
I see a forked version of it included as a utility in Boost Wave, but it's not a
formal part of Boost itself, and it would be nice to have a single version of it


Boost list run by bdawes at, gregod at, cpdaniel at, john at