epoc32/include/stdapis/stlportv5/stl/_bvector.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
/*
williamr@2
     2
 *
williamr@2
     3
 * Copyright (c) 1994
williamr@2
     4
 * Hewlett-Packard Company
williamr@2
     5
 *
williamr@2
     6
 * Copyright (c) 1996,1997
williamr@2
     7
 * Silicon Graphics Computer Systems, Inc.
williamr@2
     8
 *
williamr@2
     9
 * Copyright (c) 1997
williamr@2
    10
 * Moscow Center for SPARC Technology
williamr@2
    11
 *
williamr@4
    12
 * Copyright (c) 1999
williamr@2
    13
 * Boris Fomitchev
williamr@2
    14
 *
williamr@2
    15
 * This material is provided "as is", with absolutely no warranty expressed
williamr@2
    16
 * or implied. Any use is at your own risk.
williamr@2
    17
 *
williamr@4
    18
 * Permission to use or copy this software for any purpose is hereby granted
williamr@2
    19
 * without fee, provided the above notices are retained on all copies.
williamr@2
    20
 * Permission to modify the code and to distribute modified code is granted,
williamr@2
    21
 * provided the above notices are retained, and a notice that the code was
williamr@2
    22
 * modified is included with the above copyright notice.
williamr@2
    23
 *
williamr@2
    24
 */
williamr@2
    25
williamr@2
    26
/* NOTE: This is an internal header file, included by other STL headers.
williamr@2
    27
 *   You should not attempt to use it directly.
williamr@2
    28
 */
williamr@2
    29
williamr@2
    30
#ifndef _STLP_INTERNAL_BVECTOR_H
williamr@2
    31
#define _STLP_INTERNAL_BVECTOR_H
williamr@2
    32
williamr@2
    33
#ifndef _STLP_INTERNAL_VECTOR_H
williamr@4
    34
#  include <stl/_vector.h>
williamr@2
    35
#endif
williamr@2
    36
williamr@4
    37
#define _STLP_WORD_BIT (int(CHAR_BIT*sizeof(unsigned int)))
williamr@4
    38
williamr@4
    39
_STLP_BEGIN_NAMESPACE
williamr@4
    40
_STLP_MOVE_TO_PRIV_NAMESPACE
williamr@2
    41
williamr@2
    42
struct _Bit_reference {
williamr@2
    43
  unsigned int* _M_p;
williamr@2
    44
  unsigned int _M_mask;
williamr@4
    45
  _Bit_reference(unsigned int* __x, unsigned int __y)
williamr@2
    46
    : _M_p(__x), _M_mask(__y) {}
williamr@2
    47
williamr@2
    48
public:
williamr@2
    49
  _Bit_reference() : _M_p(0), _M_mask(0) {}
williamr@2
    50
williamr@4
    51
  operator bool() const {
williamr@4
    52
    return !(!(*_M_p & _M_mask));
williamr@2
    53
  }
williamr@4
    54
  _Bit_reference& operator = (bool __x) {
williamr@2
    55
    if (__x)  *_M_p |= _M_mask;
williamr@2
    56
    else      *_M_p &= ~_M_mask;
williamr@2
    57
    return *this;
williamr@2
    58
  }
williamr@4
    59
  _Bit_reference& operator = (const _Bit_reference& __x) {
williamr@4
    60
    return *this = bool(__x);
williamr@2
    61
  }
williamr@4
    62
  bool operator == (const _Bit_reference& __x) const {
williamr@4
    63
    return bool(*this) == bool(__x);
williamr@2
    64
  }
williamr@4
    65
  bool operator < (const _Bit_reference& __x) const {
williamr@2
    66
    return !bool(*this) && bool(__x);
williamr@2
    67
  }
williamr@2
    68
williamr@2
    69
  _Bit_reference& operator |= (bool __x) {
williamr@4
    70
    if (__x)
williamr@4
    71
      *_M_p |= _M_mask;
williamr@4
    72
    return *this;
williamr@2
    73
  }
williamr@2
    74
  _Bit_reference& operator &= (bool __x) {
williamr@4
    75
    if (!__x)
williamr@4
    76
      *_M_p &= ~_M_mask;
williamr@4
    77
    return *this;
williamr@2
    78
  }
williamr@2
    79
  void flip() { *_M_p ^= _M_mask; }
williamr@2
    80
};
williamr@2
    81
williamr@2
    82
williamr@4
    83
_STLP_MOVE_TO_STD_NAMESPACE
williamr@4
    84
williamr@4
    85
inline void swap(_STLP_PRIV _Bit_reference& __x, _STLP_PRIV _Bit_reference& __y) {
williamr@2
    86
  bool __tmp = (bool)__x;
williamr@2
    87
  __x = __y;
williamr@2
    88
  __y = __tmp;
williamr@2
    89
}
williamr@2
    90
williamr@4
    91
// Might not be very useful but costs nothing!
williamr@4
    92
_STLP_TEMPLATE_NULL
williamr@4
    93
struct __type_traits<_STLP_PRIV _Bit_reference> {
williamr@4
    94
  typedef __false_type    has_trivial_default_constructor;
williamr@4
    95
  typedef __true_type     has_trivial_copy_constructor;
williamr@4
    96
  typedef __false_type    has_trivial_assignment_operator;
williamr@4
    97
  typedef __true_type     has_trivial_destructor;
williamr@4
    98
  typedef __false_type    is_POD_type;
williamr@4
    99
};
williamr@2
   100
williamr@4
   101
_STLP_MOVE_TO_PRIV_NAMESPACE
williamr@4
   102
williamr@4
   103
struct _Bit_iterator_base {
williamr@2
   104
  typedef ptrdiff_t difference_type;
williamr@2
   105
williamr@2
   106
  unsigned int* _M_p;
williamr@2
   107
  unsigned int  _M_offset;
williamr@2
   108
williamr@2
   109
  void _M_bump_up() {
williamr@4
   110
    if (_M_offset++ == _STLP_WORD_BIT - 1) {
williamr@2
   111
      _M_offset = 0;
williamr@2
   112
      ++_M_p;
williamr@2
   113
    }
williamr@2
   114
  }
williamr@2
   115
williamr@2
   116
  void _M_bump_down() {
williamr@2
   117
    if (_M_offset-- == 0) {
williamr@4
   118
      _M_offset = _STLP_WORD_BIT - 1;
williamr@2
   119
      --_M_p;
williamr@2
   120
    }
williamr@2
   121
  }
williamr@2
   122
williamr@2
   123
  _Bit_iterator_base() : _M_p(0), _M_offset(0) {}
williamr@2
   124
  _Bit_iterator_base(unsigned int* __x, unsigned int __y) : _M_p(__x), _M_offset(__y) {}
williamr@4
   125
// see comment in doc/README.evc4 and doc/README.evc8
williamr@4
   126
#if defined(_MSC_VER) && _MSC_VER<=1401 && defined(MIPS) && defined(NDEBUG)
williamr@4
   127
  _Bit_iterator_base( const _Bit_iterator_base& __x) : _M_p(__x._M_p), _M_offset(__x._M_offset) {}
williamr@4
   128
#endif
williamr@2
   129
  //  _Bit_iterator_base& operator = ( const _Bit_iterator_base& __x) { _M_p = __x._M_p ; _M_offset = __x._M_offset ; return *this; }
williamr@2
   130
williamr@2
   131
  void _M_advance (difference_type __i) {
williamr@2
   132
    difference_type __n = __i + _M_offset;
williamr@4
   133
    _M_p += __n / _STLP_WORD_BIT;
williamr@4
   134
    __n = __n % _STLP_WORD_BIT;
williamr@2
   135
    if (__n < 0) {
williamr@4
   136
      _M_offset = (unsigned int) __n + _STLP_WORD_BIT;
williamr@2
   137
      --_M_p;
williamr@2
   138
    } else
williamr@2
   139
      _M_offset = (unsigned int) __n;
williamr@2
   140
  }
williamr@2
   141
williamr@2
   142
  difference_type _M_subtract(const _Bit_iterator_base& __x) const {
williamr@4
   143
    return _STLP_WORD_BIT * (_M_p - __x._M_p) + _M_offset - __x._M_offset;
williamr@2
   144
  }
williamr@2
   145
};
williamr@2
   146
williamr@2
   147
inline bool  _STLP_CALL operator==(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) {
williamr@2
   148
  return __y._M_p == __x._M_p && __y._M_offset == __x._M_offset;
williamr@2
   149
}
williamr@2
   150
inline bool  _STLP_CALL operator!=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) {
williamr@2
   151
  return __y._M_p != __x._M_p || __y._M_offset != __x._M_offset;
williamr@2
   152
}
williamr@2
   153
williamr@2
   154
inline bool _STLP_CALL operator<(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) {
williamr@2
   155
  return __x._M_p < __y._M_p || (__x._M_p == __y._M_p && __x._M_offset < __y._M_offset);
williamr@2
   156
}
williamr@2
   157
williamr@4
   158
inline bool _STLP_CALL operator>(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)  {
williamr@4
   159
  return operator <(__y , __x);
williamr@2
   160
}
williamr@4
   161
inline bool _STLP_CALL operator<=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) {
williamr@4
   162
  return !(__y < __x);
williamr@2
   163
}
williamr@4
   164
inline bool _STLP_CALL operator>=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) {
williamr@4
   165
  return !(__x < __y);
williamr@2
   166
}
williamr@2
   167
williamr@2
   168
template <class _Ref, class _Ptr>
williamr@4
   169
struct _Bit_iter : public _Bit_iterator_base {
williamr@2
   170
  typedef _Ref  reference;
williamr@2
   171
  typedef _Ptr  pointer;
williamr@2
   172
  typedef _Bit_iter<_Ref, _Ptr> _Self;
williamr@2
   173
  typedef random_access_iterator_tag iterator_category;
williamr@2
   174
  typedef bool value_type;
williamr@2
   175
  typedef ptrdiff_t difference_type;
williamr@2
   176
  typedef size_t size_type;
williamr@2
   177
williamr@2
   178
  _Bit_iter(unsigned int* __x, unsigned int __y) : _Bit_iterator_base(__x, __y) {}
williamr@2
   179
  _Bit_iter() {}
williamr@2
   180
williamr@4
   181
  _Bit_iter(const _Bit_iter<_Bit_reference, _Bit_reference*>& __x):
williamr@2
   182
    _Bit_iterator_base((const _Bit_iterator_base&)__x) {}
williamr@2
   183
williamr@2
   184
  //  _Self& operator = (const _Bit_iter<_Bit_reference, _Bit_reference*>& __x)
williamr@2
   185
  //   { (_Bit_iterator_base&)*this = (const _Bit_iterator_base&)__x; return *this; }
williamr@2
   186
williamr@4
   187
  reference operator*() const {
williamr@4
   188
    return _Bit_reference(_M_p, 1UL << _M_offset);
williamr@2
   189
  }
williamr@2
   190
  _Self& operator++() {
williamr@2
   191
    _M_bump_up();
williamr@2
   192
    return *this;
williamr@2
   193
  }
williamr@2
   194
  _Self operator++(int) {
williamr@2
   195
    _Self __tmp = *this;
williamr@2
   196
    _M_bump_up();
williamr@2
   197
    return __tmp;
williamr@2
   198
  }
williamr@2
   199
  _Self& operator--() {
williamr@2
   200
    _M_bump_down();
williamr@2
   201
    return *this;
williamr@2
   202
  }
williamr@2
   203
  _Self operator--(int) {
williamr@2
   204
    _Self __tmp = *this;
williamr@2
   205
    _M_bump_down();
williamr@2
   206
    return __tmp;
williamr@2
   207
  }
williamr@2
   208
  _Self& operator+=(difference_type __i) {
williamr@2
   209
    _M_advance(__i);
williamr@2
   210
    return *this;
williamr@2
   211
  }
williamr@2
   212
  _Self& operator-=(difference_type __i) {
williamr@2
   213
    *this += -__i;
williamr@2
   214
    return *this;
williamr@2
   215
  }
williamr@2
   216
  _Self operator+(difference_type __i) const {
williamr@2
   217
    _Self __tmp = *this;
williamr@2
   218
    return __tmp += __i;
williamr@2
   219
  }
williamr@2
   220
  _Self operator-(difference_type __i) const {
williamr@2
   221
    _Self __tmp = *this;
williamr@2
   222
    return __tmp -= __i;
williamr@2
   223
  }
williamr@2
   224
  difference_type operator-(const _Self& __x) const {
williamr@2
   225
    return _M_subtract(__x);
williamr@2
   226
  }
williamr@2
   227
  reference operator[](difference_type __i) { return *(*this + __i); }
williamr@2
   228
};
williamr@2
   229
williamr@2
   230
template <class _Ref, class _Ptr>
williamr@2
   231
inline _Bit_iter<_Ref,_Ptr>  _STLP_CALL
williamr@2
   232
operator+(ptrdiff_t __n, const _Bit_iter<_Ref, _Ptr>& __x) {
williamr@2
   233
   return __x + __n;
williamr@2
   234
}
williamr@2
   235
williamr@4
   236
_STLP_MOVE_TO_STD_NAMESPACE
williamr@4
   237
williamr@4
   238
#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
williamr@4
   239
template <class _Ref, class _Ptr>
williamr@4
   240
struct __type_traits< _STLP_PRIV _Bit_iter<_Ref, _Ptr> > {
williamr@4
   241
  typedef __false_type   has_trivial_default_constructor;
williamr@4
   242
  typedef __true_type    has_trivial_copy_constructor;
williamr@4
   243
  typedef __true_type    has_trivial_assignment_operator;
williamr@4
   244
  typedef __true_type    has_trivial_destructor;
williamr@4
   245
  typedef __false_type   is_POD_type;
williamr@4
   246
};
williamr@4
   247
#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */
williamr@4
   248
williamr@4
   249
#if defined (_STLP_USE_OLD_HP_ITERATOR_QUERIES)
williamr@4
   250
inline random_access_iterator_tag iterator_category(const _STLP_PRIV _Bit_iterator_base&)
williamr@4
   251
{ return random_access_iterator_tag(); }
williamr@4
   252
inline ptrdiff_t* distance_type(const _STLP_PRIV _Bit_iterator_base&)
williamr@4
   253
{ return (ptrdiff_t*)0; }
williamr@4
   254
inline bool* value_type(const _STLP_PRIV _Bit_iter<_STLP_PRIV _Bit_reference, _STLP_PRIV _Bit_reference*>&)
williamr@4
   255
{ return (bool*)0; }
williamr@4
   256
inline bool* value_type(const _STLP_PRIV _Bit_iter<bool, const bool*>&)
williamr@4
   257
{ return (bool*)0; }
williamr@4
   258
#endif
williamr@4
   259
williamr@4
   260
_STLP_MOVE_TO_PRIV_NAMESPACE
williamr@2
   261
williamr@2
   262
typedef _Bit_iter<bool, const bool*> _Bit_const_iterator;
williamr@2
   263
typedef _Bit_iter<_Bit_reference, _Bit_reference*> _Bit_iterator;
williamr@2
   264
williamr@2
   265
// Bit-vector base class, which encapsulates the difference between
williamr@2
   266
//  old SGI-style allocators and standard-conforming allocators.
williamr@2
   267
template <class _Alloc>
williamr@4
   268
class _Bvector_base {
williamr@4
   269
  typedef _Bvector_base<_Alloc> _Self;
williamr@2
   270
public:
williamr@2
   271
  _STLP_FORCE_ALLOCATORS(bool, _Alloc)
williamr@2
   272
  typedef typename _Alloc_traits<bool, _Alloc>::allocator_type allocator_type;
williamr@2
   273
  typedef unsigned int __chunk_type;
williamr@4
   274
  typedef typename _Alloc_traits<__chunk_type,
williamr@2
   275
          _Alloc>::allocator_type __chunk_allocator_type;
williamr@4
   276
  allocator_type get_allocator() const {
williamr@4
   277
    return _STLP_CONVERT_ALLOCATOR((const __chunk_allocator_type&)_M_end_of_storage, bool);
williamr@2
   278
  }
williamr@2
   279
  static allocator_type __get_dfl_allocator() { return allocator_type(); }
williamr@4
   280
williamr@2
   281
  _Bvector_base(const allocator_type& __a)
williamr@2
   282
    : _M_start(), _M_finish(), _M_end_of_storage(_STLP_CONVERT_ALLOCATOR(__a, __chunk_type),
williamr@4
   283
                                                 (__chunk_type*)0)
williamr@4
   284
  {}
williamr@4
   285
  _Bvector_base(__move_source<_Self> src)
williamr@4
   286
    : _M_start(src.get()._M_start), _M_finish(src.get()._M_finish),
williamr@4
   287
      _M_end_of_storage(src.get()._M_end_of_storage) {
williamr@4
   288
    //Make the source destroyable
williamr@4
   289
    src.get()._M_start._M_p = 0;
williamr@2
   290
  }
williamr@4
   291
williamr@4
   292
  ~_Bvector_base() {
williamr@4
   293
    _M_deallocate();
williamr@2
   294
  }
williamr@2
   295
williamr@2
   296
protected:
williamr@2
   297
williamr@4
   298
  unsigned int* _M_bit_alloc(size_t __n) {
williamr@4
   299
    return _M_end_of_storage.allocate((__n + _STLP_WORD_BIT - 1)/_STLP_WORD_BIT);
williamr@4
   300
  }
williamr@2
   301
  void _M_deallocate() {
williamr@2
   302
    if (_M_start._M_p)
williamr@2
   303
      _M_end_of_storage.deallocate(_M_start._M_p,
williamr@4
   304
                                   _M_end_of_storage._M_data - _M_start._M_p);
williamr@2
   305
  }
williamr@2
   306
williamr@2
   307
  _Bit_iterator _M_start;
williamr@2
   308
  _Bit_iterator _M_finish;
williamr@4
   309
  _STLP_alloc_proxy<__chunk_type*, __chunk_type, __chunk_allocator_type> _M_end_of_storage;
williamr@2
   310
};
williamr@2
   311
williamr@2
   312
williamr@2
   313
// The next few lines are confusing.  What we're doing is declaring a
williamr@2
   314
//  partial specialization of vector<T, Alloc> if we have the necessary
williamr@2
   315
//  compiler support.  Otherwise, we define a class bit_vector which uses
williamr@4
   316
//  the default allocator.
williamr@2
   317
williamr@4
   318
#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) && !defined (_STLP_NO_BOOL) && !defined (__SUNPRO_CC)
williamr@4
   319
#  define _STLP_VECBOOL_TEMPLATE
williamr@4
   320
#  define __BVEC_TMPL_HEADER template <class _Alloc>
williamr@2
   321
#else
williamr@4
   322
#  undef _STLP_VECBOOL_TEMPLATE
williamr@4
   323
#  ifdef _STLP_NO_BOOL
williamr@4
   324
#    define __BVEC_TMPL_HEADER
williamr@4
   325
#  else
williamr@4
   326
#    define __BVEC_TMPL_HEADER _STLP_TEMPLATE_NULL
williamr@4
   327
#  endif
williamr@4
   328
#  if !(defined(__MRC__)||(defined(__SC__)&&!defined(__DMC__)))      //*TY 12/17/2000 -
williamr@4
   329
#    define _Alloc _STLP_DEFAULT_ALLOCATOR(bool)
williamr@4
   330
#  else
williamr@4
   331
#    define _Alloc allocator<bool>
williamr@4
   332
#  endif
williamr@4
   333
#endif
williamr@4
   334
williamr@4
   335
#if defined (_STLP_DEBUG)
williamr@4
   336
#  define vector _STLP_NON_DBG_NAME(vector)
williamr@2
   337
#endif
williamr@2
   338
williamr@2
   339
#ifdef _STLP_NO_BOOL
williamr@4
   340
#  define __BVECTOR_QUALIFIED bit_vector
williamr@4
   341
#  define __BVECTOR           bit_vector
williamr@2
   342
#else
williamr@4
   343
#  ifdef _STLP_VECBOOL_TEMPLATE
williamr@4
   344
#    define __BVECTOR_QUALIFIED vector<bool, _Alloc>
williamr@4
   345
#  else
williamr@4
   346
#    define __BVECTOR_QUALIFIED vector<bool, allocator<bool> >
williamr@4
   347
#  endif
williamr@4
   348
#  if defined (_STLP_PARTIAL_SPEC_NEEDS_TEMPLATE_ARGS)
williamr@4
   349
#    define __BVECTOR __BVECTOR_QUALIFIED
williamr@4
   350
#  else
williamr@4
   351
#    define __BVECTOR vector
williamr@4
   352
#  endif
williamr@2
   353
#endif
williamr@2
   354
williamr@4
   355
#if !defined (_STLP_DEBUG) || defined (_STLP_NO_BOOL)
williamr@4
   356
_STLP_MOVE_TO_STD_NAMESPACE
williamr@4
   357
#endif
williamr@2
   358
williamr@2
   359
__BVEC_TMPL_HEADER
williamr@4
   360
class __BVECTOR_QUALIFIED : public _STLP_PRIV _Bvector_base<_Alloc >
williamr@4
   361
#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_DEBUG)
williamr@4
   362
                          , public __stlport_class< __BVECTOR_QUALIFIED >
williamr@4
   363
#endif
williamr@2
   364
{
williamr@4
   365
  typedef _STLP_PRIV _Bvector_base<_Alloc > _Base;
williamr@2
   366
  typedef __BVECTOR_QUALIFIED _Self;
williamr@2
   367
public:
williamr@2
   368
  typedef bool value_type;
williamr@2
   369
  typedef size_t size_type;
williamr@4
   370
  typedef ptrdiff_t difference_type;
williamr@4
   371
  typedef _STLP_PRIV _Bit_reference reference;
williamr@2
   372
  typedef bool const_reference;
williamr@4
   373
  typedef _STLP_PRIV _Bit_reference* pointer;
williamr@2
   374
  typedef const bool* const_pointer;
williamr@2
   375
  typedef random_access_iterator_tag _Iterator_category;
williamr@2
   376
williamr@4
   377
  typedef _STLP_PRIV _Bit_iterator          iterator;
williamr@4
   378
  typedef _STLP_PRIV _Bit_const_iterator    const_iterator;
williamr@2
   379
williamr@4
   380
  _STLP_DECLARE_RANDOM_ACCESS_REVERSE_ITERATORS;
williamr@2
   381
williamr@4
   382
#ifdef _STLP_VECBOOL_TEMPLATE
williamr@4
   383
  typedef typename _STLP_PRIV _Bvector_base<_Alloc >::allocator_type allocator_type;
williamr@4
   384
  typedef typename _STLP_PRIV _Bvector_base<_Alloc >::__chunk_type __chunk_type;
williamr@4
   385
#else
williamr@4
   386
  typedef _STLP_PRIV _Bvector_base<_Alloc >::allocator_type allocator_type;
williamr@4
   387
  typedef _STLP_PRIV _Bvector_base<_Alloc >::__chunk_type __chunk_type;
williamr@4
   388
#endif
williamr@2
   389
williamr@2
   390
protected:
williamr@2
   391
williamr@2
   392
  void _M_initialize(size_type __n) {
williamr@2
   393
    unsigned int* __q = this->_M_bit_alloc(__n);
williamr@4
   394
    this->_M_end_of_storage._M_data = __q + (__n + _STLP_WORD_BIT - 1)/_STLP_WORD_BIT;
williamr@2
   395
    this->_M_start = iterator(__q, 0);
williamr@2
   396
    this->_M_finish = this->_M_start + difference_type(__n);
williamr@2
   397
  }
williamr@2
   398
  void _M_insert_aux(iterator __position, bool __x) {
williamr@2
   399
    if (this->_M_finish._M_p != this->_M_end_of_storage._M_data) {
williamr@4
   400
      _STLP_PRIV __copy_backward(__position, this->_M_finish, this->_M_finish + 1,
williamr@4
   401
                                 random_access_iterator_tag(), (difference_type*)0 );
williamr@2
   402
      *__position = __x;
williamr@2
   403
      ++this->_M_finish;
williamr@2
   404
    }
williamr@2
   405
    else {
williamr@4
   406
      size_type __len = size() ? 2 * size() : _STLP_WORD_BIT;
williamr@2
   407
      unsigned int* __q = this->_M_bit_alloc(__len);
williamr@2
   408
      iterator __i = copy(begin(), __position, iterator(__q, 0));
williamr@2
   409
      *__i++ = __x;
williamr@2
   410
      this->_M_finish = copy(__position, end(), __i);
williamr@2
   411
      this->_M_deallocate();
williamr@4
   412
      this->_M_end_of_storage._M_data = __q + (__len + _STLP_WORD_BIT - 1)/_STLP_WORD_BIT;
williamr@2
   413
      this->_M_start = iterator(__q, 0);
williamr@2
   414
    }
williamr@2
   415
  }
williamr@2
   416
williamr@4
   417
#if defined (_STLP_MEMBER_TEMPLATES)
williamr@2
   418
  template <class _InputIterator>
williamr@2
   419
  void _M_initialize_range(_InputIterator __first, _InputIterator __last,
williamr@4
   420
                           const input_iterator_tag &) {
williamr@2
   421
    this->_M_start = iterator();
williamr@2
   422
    this->_M_finish = iterator();
williamr@2
   423
    this->_M_end_of_storage._M_data = 0;
williamr@4
   424
    for ( ; __first != __last; ++__first)
williamr@2
   425
      push_back(*__first);
williamr@2
   426
  }
williamr@2
   427
williamr@2
   428
  template <class _ForwardIterator>
williamr@2
   429
  void _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last,
williamr@2
   430
                           const forward_iterator_tag &) {
williamr@2
   431
    size_type __n = distance(__first, __last);
williamr@2
   432
    _M_initialize(__n);
williamr@4
   433
    copy(__first, __last, this->_M_start);
williamr@2
   434
  }
williamr@2
   435
williamr@2
   436
  template <class _InputIterator>
williamr@2
   437
  void _M_insert_range(iterator __pos,
williamr@2
   438
                       _InputIterator __first, _InputIterator __last,
williamr@2
   439
                       const input_iterator_tag &) {
williamr@2
   440
    for ( ; __first != __last; ++__first) {
williamr@2
   441
      __pos = insert(__pos, *__first);
williamr@2
   442
      ++__pos;
williamr@2
   443
    }
williamr@2
   444
  }
williamr@2
   445
williamr@2
   446
  template <class _ForwardIterator>
williamr@2
   447
  void _M_insert_range(iterator __position,
williamr@2
   448
                       _ForwardIterator __first, _ForwardIterator __last,
williamr@2
   449
                       const forward_iterator_tag &) {
williamr@2
   450
    if (__first != __last) {
williamr@2
   451
      size_type __n = distance(__first, __last);
williamr@2
   452
      if (capacity() - size() >= __n) {
williamr@4
   453
        _STLP_PRIV __copy_backward(__position, end(), this->_M_finish + difference_type(__n),
williamr@4
   454
                                   random_access_iterator_tag(), (difference_type*)0 );
williamr@2
   455
        copy(__first, __last, __position);
williamr@2
   456
        this->_M_finish += difference_type(__n);
williamr@2
   457
      }
williamr@2
   458
      else {
williamr@2
   459
        size_type __len = size() + (max)(size(), __n);
williamr@2
   460
        unsigned int* __q = this->_M_bit_alloc(__len);
williamr@2
   461
        iterator __i = copy(begin(), __position, iterator(__q, 0));
williamr@2
   462
        __i = copy(__first, __last, __i);
williamr@2
   463
        this->_M_finish = copy(__position, end(), __i);
williamr@2
   464
        this->_M_deallocate();
williamr@4
   465
        this->_M_end_of_storage._M_data = __q + (__len + _STLP_WORD_BIT - 1)/_STLP_WORD_BIT;
williamr@2
   466
        this->_M_start = iterator(__q, 0);
williamr@2
   467
      }
williamr@2
   468
    }
williamr@4
   469
  }
williamr@2
   470
williamr@2
   471
#endif /* _STLP_MEMBER_TEMPLATES */
williamr@2
   472
williamr@2
   473
public:
williamr@2
   474
  iterator begin() { return this->_M_start; }
williamr@2
   475
  const_iterator begin() const { return this->_M_start; }
williamr@2
   476
  iterator end() { return this->_M_finish; }
williamr@2
   477
  const_iterator end() const { return this->_M_finish; }
williamr@2
   478
williamr@2
   479
  reverse_iterator rbegin() { return reverse_iterator(end()); }
williamr@4
   480
  const_reverse_iterator rbegin() const {
williamr@4
   481
    return const_reverse_iterator(end());
williamr@2
   482
  }
williamr@2
   483
  reverse_iterator rend() { return reverse_iterator(begin()); }
williamr@4
   484
  const_reverse_iterator rend() const {
williamr@4
   485
    return const_reverse_iterator(begin());
williamr@2
   486
  }
williamr@2
   487
williamr@2
   488
  size_type size() const { return size_type(end() - begin()); }
williamr@2
   489
  size_type max_size() const { return size_type(-1); }
williamr@2
   490
  size_type capacity() const {
williamr@2
   491
    return size_type(const_iterator(this->_M_end_of_storage._M_data, 0) - begin());
williamr@2
   492
  }
williamr@2
   493
  bool empty() const { return begin() == end(); }
williamr@4
   494
  reference operator[](size_type __n)
williamr@2
   495
  { return *(begin() + difference_type(__n)); }
williamr@4
   496
  const_reference operator[](size_type __n) const
williamr@2
   497
  { return *(begin() + difference_type(__n)); }
williamr@2
   498
williamr@2
   499
  void _M_range_check(size_type __n) const {
williamr@2
   500
    if (__n >= this->size())
williamr@2
   501
      __stl_throw_range_error("vector<bool>");
williamr@2
   502
  }
williamr@2
   503
williamr@2
   504
  reference at(size_type __n)
williamr@2
   505
    { _M_range_check(__n); return (*this)[__n]; }
williamr@2
   506
  const_reference at(size_type __n) const
williamr@2
   507
    { _M_range_check(__n); return (*this)[__n]; }
williamr@2
   508
williamr@2
   509
  explicit __BVECTOR(const allocator_type& __a = allocator_type())
williamr@4
   510
    : _STLP_PRIV _Bvector_base<_Alloc >(__a) {}
williamr@2
   511
williamr@2
   512
  __BVECTOR(size_type __n, bool __val,
williamr@4
   513
            const allocator_type& __a = allocator_type())
williamr@4
   514
    : _STLP_PRIV _Bvector_base<_Alloc >(__a) {
williamr@2
   515
    _M_initialize(__n);
williamr@2
   516
    fill(this->_M_start._M_p, (__chunk_type*)(this->_M_end_of_storage._M_data), __val ? ~0 : 0);
williamr@2
   517
  }
williamr@2
   518
williamr@2
   519
  explicit __BVECTOR(size_type __n)
williamr@4
   520
    : _STLP_PRIV _Bvector_base<_Alloc >(allocator_type()) {
williamr@2
   521
    _M_initialize(__n);
williamr@2
   522
    fill(this->_M_start._M_p, (__chunk_type*)(this->_M_end_of_storage._M_data), 0);
williamr@2
   523
  }
williamr@2
   524
williamr@4
   525
  __BVECTOR(const _Self& __x)
williamr@4
   526
    : _STLP_PRIV _Bvector_base<_Alloc >(__x.get_allocator()) {
williamr@2
   527
    _M_initialize(__x.size());
williamr@2
   528
    copy(__x.begin(), __x.end(), this->_M_start);
williamr@2
   529
  }
williamr@2
   530
williamr@2
   531
#if defined (_STLP_MEMBER_TEMPLATES)
williamr@2
   532
  template <class _Integer>
williamr@2
   533
  void _M_initialize_dispatch(_Integer __n, _Integer __x, const __true_type&) {
williamr@2
   534
    _M_initialize(__n);
williamr@2
   535
    fill(this->_M_start._M_p, this->_M_end_of_storage._M_data, __x ? ~0 : 0);
williamr@2
   536
  }
williamr@4
   537
williamr@2
   538
  template <class _InputIterator>
williamr@2
   539
  void _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
williamr@2
   540
                              const __false_type&) {
williamr@2
   541
    _M_initialize_range(__first, __last, _STLP_ITERATOR_CATEGORY(__first, _InputIterator));
williamr@2
   542
  }
williamr@4
   543
#  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
williamr@2
   544
  // Check whether it's an integral type.  If so, it's not an iterator.
williamr@2
   545
  template <class _InputIterator>
williamr@2
   546
  __BVECTOR(_InputIterator __first, _InputIterator __last)
williamr@4
   547
    : _STLP_PRIV _Bvector_base<_Alloc >(allocator_type()) {
williamr@4
   548
    typedef typename _IsIntegral<_InputIterator>::_Ret _Integral;
williamr@2
   549
    _M_initialize_dispatch(__first, __last, _Integral());
williamr@2
   550
  }
williamr@4
   551
#  endif
williamr@2
   552
  template <class _InputIterator>
williamr@2
   553
  __BVECTOR(_InputIterator __first, _InputIterator __last,
williamr@2
   554
            const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL)
williamr@4
   555
    : _STLP_PRIV _Bvector_base<_Alloc >(__a) {
williamr@4
   556
    typedef typename _IsIntegral<_InputIterator>::_Ret _Integral;
williamr@2
   557
    _M_initialize_dispatch(__first, __last, _Integral());
williamr@2
   558
  }
williamr@2
   559
#else /* _STLP_MEMBER_TEMPLATES */
williamr@2
   560
  __BVECTOR(const_iterator __first, const_iterator __last,
williamr@2
   561
            const allocator_type& __a = allocator_type())
williamr@4
   562
    : _STLP_PRIV _Bvector_base<_Alloc >(__a) {
williamr@2
   563
    size_type __n = distance(__first, __last);
williamr@2
   564
    _M_initialize(__n);
williamr@2
   565
    copy(__first, __last, this->_M_start);
williamr@2
   566
  }
williamr@2
   567
  __BVECTOR(const bool* __first, const bool* __last,
williamr@2
   568
            const allocator_type& __a = allocator_type())
williamr@4
   569
    : _STLP_PRIV _Bvector_base<_Alloc >(__a) {
williamr@2
   570
    size_type __n = distance(__first, __last);
williamr@2
   571
    _M_initialize(__n);
williamr@2
   572
    copy(__first, __last, this->_M_start);
williamr@2
   573
  }
williamr@2
   574
#endif /* _STLP_MEMBER_TEMPLATES */
williamr@2
   575
williamr@4
   576
  __BVECTOR(__move_source<_Self> src)
williamr@4
   577
    : _STLP_PRIV _Bvector_base<_Alloc >(__move_source<_Base>(src.get())) {}
williamr@4
   578
williamr@4
   579
  ~__BVECTOR() {}
williamr@2
   580
williamr@2
   581
  __BVECTOR_QUALIFIED& operator=(const __BVECTOR_QUALIFIED& __x) {
williamr@2
   582
    if (&__x == this) return *this;
williamr@2
   583
    if (__x.size() > capacity()) {
williamr@2
   584
      this->_M_deallocate();
williamr@2
   585
      _M_initialize(__x.size());
williamr@2
   586
    }
williamr@2
   587
    copy(__x.begin(), __x.end(), begin());
williamr@2
   588
    this->_M_finish = begin() + difference_type(__x.size());
williamr@2
   589
    return *this;
williamr@2
   590
  }
williamr@2
   591
williamr@2
   592
  // assign(), a generalized assignment member function.  Two
williamr@2
   593
  // versions: one that takes a count, and one that takes a range.
williamr@2
   594
  // The range version is a member template, so we dispatch on whether
williamr@2
   595
  // or not the type is an integer.
williamr@2
   596
williamr@2
   597
  void _M_fill_assign(size_t __n, bool __x) {
williamr@2
   598
    if (__n > size()) {
williamr@2
   599
      fill(this->_M_start._M_p, (__chunk_type*)(this->_M_end_of_storage._M_data), __x ? ~0 : 0);
williamr@2
   600
      insert(end(), __n - size(), __x);
williamr@2
   601
    }
williamr@2
   602
    else {
williamr@2
   603
      erase(begin() + __n, end());
williamr@2
   604
      fill(this->_M_start._M_p, (__chunk_type*)(this->_M_end_of_storage._M_data), __x ? ~0 : 0);
williamr@2
   605
    }
williamr@2
   606
  }
williamr@2
   607
  void assign(size_t __n, bool __x) { _M_fill_assign(__n, __x); }
williamr@2
   608
williamr@4
   609
#if defined (_STLP_MEMBER_TEMPLATES)
williamr@2
   610
  template <class _InputIterator>
williamr@2
   611
  void assign(_InputIterator __first, _InputIterator __last) {
williamr@4
   612
    typedef typename _IsIntegral<_InputIterator>::_Ret _Integral;
williamr@2
   613
    _M_assign_dispatch(__first, __last, _Integral());
williamr@2
   614
  }
williamr@2
   615
williamr@2
   616
  template <class _Integer>
williamr@2
   617
  void _M_assign_dispatch(_Integer __n, _Integer __val, const __true_type&)
williamr@2
   618
    { _M_fill_assign((size_t) __n, (bool) __val); }
williamr@2
   619
williamr@2
   620
  template <class _InputIter>
williamr@2
   621
  void _M_assign_dispatch(_InputIter __first, _InputIter __last, const __false_type&)
williamr@2
   622
    { _M_assign_aux(__first, __last, _STLP_ITERATOR_CATEGORY(__first, _InputIter)); }
williamr@2
   623
williamr@2
   624
  template <class _InputIterator>
williamr@2
   625
  void _M_assign_aux(_InputIterator __first, _InputIterator __last,
williamr@2
   626
                     const input_iterator_tag &) {
williamr@2
   627
    iterator __cur = begin();
williamr@2
   628
    for ( ; __first != __last && __cur != end(); ++__cur, ++__first)
williamr@2
   629
      *__cur = *__first;
williamr@2
   630
    if (__first == __last)
williamr@2
   631
      erase(__cur, end());
williamr@2
   632
    else
williamr@2
   633
      insert(end(), __first, __last);
williamr@2
   634
  }
williamr@2
   635
williamr@2
   636
  template <class _ForwardIterator>
williamr@2
   637
  void _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
williamr@2
   638
                     const forward_iterator_tag &) {
williamr@2
   639
    size_type __len = distance(__first, __last);
williamr@2
   640
    if (__len < size())
williamr@2
   641
      erase(copy(__first, __last, begin()), end());
williamr@2
   642
    else {
williamr@2
   643
      _ForwardIterator __mid = __first;
williamr@2
   644
      advance(__mid, size());
williamr@2
   645
      copy(__first, __mid, begin());
williamr@2
   646
      insert(end(), __mid, __last);
williamr@2
   647
    }
williamr@4
   648
  }
williamr@2
   649
#endif /* _STLP_MEMBER_TEMPLATES */
williamr@2
   650
williamr@2
   651
  void reserve(size_type __n) {
williamr@2
   652
    if (capacity() < __n) {
williamr@4
   653
      if (max_size() < __n)
williamr@4
   654
        __stl_throw_length_error("vector<bool>");
williamr@2
   655
      unsigned int* __q = this->_M_bit_alloc(__n);
williamr@4
   656
      _STLP_PRIV _Bit_iterator __z(__q, 0);
williamr@2
   657
      this->_M_finish = copy(begin(), end(), __z);
williamr@2
   658
      this->_M_deallocate();
williamr@2
   659
      this->_M_start = iterator(__q, 0);
williamr@4
   660
      this->_M_end_of_storage._M_data = __q + (__n + _STLP_WORD_BIT - 1)/_STLP_WORD_BIT;
williamr@2
   661
    }
williamr@2
   662
  }
williamr@2
   663
williamr@2
   664
  reference front() { return *begin(); }
williamr@2
   665
  const_reference front() const { return *begin(); }
williamr@2
   666
  reference back() { return *(end() - 1); }
williamr@2
   667
  const_reference back() const { return *(end() - 1); }
williamr@2
   668
  void push_back(bool __x) {
williamr@2
   669
    if (this->_M_finish._M_p != this->_M_end_of_storage._M_data) {
williamr@2
   670
      *(this->_M_finish) = __x;
williamr@2
   671
      ++this->_M_finish;
williamr@2
   672
    }
williamr@2
   673
    else
williamr@2
   674
      _M_insert_aux(end(), __x);
williamr@2
   675
  }
williamr@2
   676
  void swap(__BVECTOR_QUALIFIED& __x) {
williamr@2
   677
    _STLP_STD::swap(this->_M_start, __x._M_start);
williamr@2
   678
    _STLP_STD::swap(this->_M_finish, __x._M_finish);
williamr@4
   679
    this->_M_end_of_storage.swap(__x._M_end_of_storage);
williamr@2
   680
  }
williamr@2
   681
  iterator insert(iterator __position, bool __x = bool()) {
williamr@2
   682
    difference_type __n = __position - begin();
williamr@2
   683
    if (this->_M_finish._M_p != this->_M_end_of_storage._M_data && __position == end()) {
williamr@2
   684
      *(this->_M_finish) = __x;
williamr@2
   685
      ++this->_M_finish;
williamr@2
   686
    }
williamr@2
   687
    else
williamr@2
   688
      _M_insert_aux(__position, __x);
williamr@2
   689
    return begin() + __n;
williamr@2
   690
  }
williamr@2
   691
williamr@4
   692
#if defined (_STLP_MEMBER_TEMPLATES)
williamr@2
   693
williamr@2
   694
  template <class _Integer>
williamr@2
   695
  void _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,
williamr@2
   696
                          const __true_type&) {
williamr@2
   697
    _M_fill_insert(__pos, (size_type) __n, (bool) __x);
williamr@2
   698
  }
williamr@2
   699
williamr@2
   700
  template <class _InputIterator>
williamr@2
   701
  void _M_insert_dispatch(iterator __pos,
williamr@2
   702
                          _InputIterator __first, _InputIterator __last,
williamr@2
   703
                          const __false_type&) {
williamr@2
   704
    _M_insert_range(__pos, __first, __last, _STLP_ITERATOR_CATEGORY(__first, _InputIterator));
williamr@2
   705
  }
williamr@2
   706
williamr@2
   707
  // Check whether it's an integral type.  If so, it's not an iterator.
williamr@2
   708
  template <class _InputIterator>
williamr@2
   709
  void insert(iterator __position,
williamr@2
   710
              _InputIterator __first, _InputIterator __last) {
williamr@4
   711
    typedef typename _IsIntegral<_InputIterator>::_Ret _Integral;
williamr@4
   712
    _M_insert_dispatch(__position, __first, __last, _Integral());
williamr@2
   713
  }
williamr@2
   714
#else /* _STLP_MEMBER_TEMPLATES */
williamr@2
   715
  void insert(iterator __position,
williamr@2
   716
              const_iterator __first, const_iterator __last) {
williamr@2
   717
    if (__first == __last) return;
williamr@2
   718
    size_type __n = distance(__first, __last);
williamr@2
   719
    if (capacity() - size() >= __n) {
williamr@4
   720
      _STLP_PRIV __copy_backward(__position, end(), this->_M_finish + __n,
williamr@4
   721
                                 random_access_iterator_tag(), (difference_type*)0 );
williamr@2
   722
      copy(__first, __last, __position);
williamr@2
   723
      this->_M_finish += __n;
williamr@2
   724
    }
williamr@2
   725
    else {
williamr@2
   726
      size_type __len = size() + (max)(size(), __n);
williamr@2
   727
      unsigned int* __q = this->_M_bit_alloc(__len);
williamr@2
   728
      iterator __i = copy(begin(), __position, iterator(__q, 0));
williamr@2
   729
      __i = copy(__first, __last, __i);
williamr@2
   730
      this->_M_finish = copy(__position, end(), __i);
williamr@2
   731
      this->_M_deallocate();
williamr@4
   732
      this->_M_end_of_storage._M_data = __q + (__len + _STLP_WORD_BIT - 1)/_STLP_WORD_BIT;
williamr@2
   733
      this->_M_start = iterator(__q, 0);
williamr@2
   734
    }
williamr@2
   735
  }
williamr@2
   736
williamr@2
   737
  void insert(iterator __position, const bool* __first, const bool* __last) {
williamr@2
   738
    if (__first == __last) return;
williamr@2
   739
    size_type __n = distance(__first, __last);
williamr@2
   740
    if (capacity() - size() >= __n) {
williamr@4
   741
      _STLP_PRIV __copy_backward(__position, end(), this->_M_finish + __n,
williamr@4
   742
                                 random_access_iterator_tag(), (difference_type*)0 );
williamr@2
   743
      copy(__first, __last, __position);
williamr@2
   744
      this->_M_finish += __n;
williamr@2
   745
    }
williamr@2
   746
    else {
williamr@2
   747
      size_type __len = size() + (max)(size(), __n);
williamr@2
   748
      unsigned int* __q = this->_M_bit_alloc(__len);
williamr@2
   749
      iterator __i = copy(begin(), __position, iterator(__q, 0));
williamr@2
   750
      __i = copy(__first, __last, __i);
williamr@2
   751
      this->_M_finish = copy(__position, end(), __i);
williamr@2
   752
      this->_M_deallocate();
williamr@4
   753
      this->_M_end_of_storage._M_data = __q + (__len + _STLP_WORD_BIT - 1)/_STLP_WORD_BIT;
williamr@2
   754
      this->_M_start = iterator(__q, 0);
williamr@2
   755
    }
williamr@2
   756
  }
williamr@2
   757
#endif /* _STLP_MEMBER_TEMPLATES */
williamr@4
   758
williamr@2
   759
  void _M_fill_insert(iterator __position, size_type __n, bool __x) {
williamr@2
   760
    if (__n == 0) return;
williamr@2
   761
    if (capacity() - size() >= __n) {
williamr@4
   762
      _STLP_PRIV __copy_backward(__position, end(), this->_M_finish + difference_type(__n),
williamr@4
   763
                                 random_access_iterator_tag(), (difference_type*)0 );
williamr@2
   764
      fill(__position, __position + difference_type(__n), __x);
williamr@2
   765
      this->_M_finish += difference_type(__n);
williamr@2
   766
    }
williamr@2
   767
    else {
williamr@2
   768
      size_type __len = size() + (max)(size(), __n);
williamr@2
   769
      unsigned int* __q = this->_M_bit_alloc(__len);
williamr@2
   770
      iterator __i = copy(begin(), __position, iterator(__q, 0));
williamr@2
   771
      fill_n(__i, __n, __x);
williamr@2
   772
      this->_M_finish = copy(__position, end(), __i + difference_type(__n));
williamr@2
   773
      this->_M_deallocate();
williamr@4
   774
      this->_M_end_of_storage._M_data = __q + (__len + _STLP_WORD_BIT - 1)/_STLP_WORD_BIT;
williamr@2
   775
      this->_M_start = iterator(__q, 0);
williamr@2
   776
    }
williamr@2
   777
  }
williamr@2
   778
williamr@2
   779
  void insert(iterator __position, size_type __n, bool __x) {
williamr@2
   780
    _M_fill_insert(__position, __n, __x);
williamr@2
   781
  }
williamr@2
   782
williamr@2
   783
  void pop_back() {
williamr@4
   784
    --this->_M_finish;
williamr@2
   785
  }
williamr@2
   786
  iterator erase(iterator __position) {
williamr@2
   787
    if (__position + 1 != end())
williamr@2
   788
      copy(__position + 1, end(), __position);
williamr@2
   789
      --this->_M_finish;
williamr@2
   790
    return __position;
williamr@2
   791
  }
williamr@2
   792
  iterator erase(iterator __first, iterator __last) {
williamr@2
   793
    this->_M_finish = copy(__last, end(), __first);
williamr@2
   794
    return __first;
williamr@2
   795
  }
williamr@2
   796
  void resize(size_type __new_size, bool __x = bool()) {
williamr@4
   797
    if (__new_size < size())
williamr@2
   798
      erase(begin() + difference_type(__new_size), end());
williamr@2
   799
    else
williamr@2
   800
      insert(end(), __new_size - size(), __x);
williamr@2
   801
  }
williamr@2
   802
  void flip() {
williamr@2
   803
    for (unsigned int* __p = this->_M_start._M_p; __p != this->_M_end_of_storage._M_data; ++__p)
williamr@2
   804
      *__p = ~*__p;
williamr@2
   805
  }
williamr@2
   806
williamr@2
   807
  void clear() { erase(begin(), end()); }
williamr@2
   808
};
williamr@2
   809
williamr@4
   810
#if defined  (_STLP_NO_BOOL) || defined (__HP_aCC) // fixed soon (03/17/2000)
williamr@4
   811
#  define _STLP_TEMPLATE_HEADER __BVEC_TMPL_HEADER
williamr@4
   812
#  define _STLP_TEMPLATE_CONTAINER __BVECTOR_QUALIFIED
williamr@4
   813
#  include <stl/_relops_cont.h>
williamr@4
   814
#  undef _STLP_TEMPLATE_CONTAINER
williamr@4
   815
#  undef _STLP_TEMPLATE_HEADER
williamr@4
   816
#endif /* NO_BOOL */
williamr@4
   817
williamr@4
   818
#if defined (_STLP_DEBUG) && !defined (_STLP_NO_BOOL)
williamr@4
   819
_STLP_MOVE_TO_STD_NAMESPACE
williamr@2
   820
#endif
williamr@2
   821
williamr@2
   822
_STLP_END_NAMESPACE
williamr@2
   823
williamr@4
   824
#undef vector
williamr@2
   825
#undef _Alloc
williamr@2
   826
#undef _STLP_VECBOOL_TEMPLATE
williamr@2
   827
#undef __BVECTOR
williamr@2
   828
#undef __BVECTOR_QUALIFIED
williamr@2
   829
#undef __BVEC_TMPL_HEADER
williamr@2
   830
williamr@4
   831
#undef _STLP_WORD_BIT
williamr@2
   832
williamr@2
   833
#endif /* _STLP_INTERNAL_BVECTOR_H */
williamr@2
   834
williamr@2
   835
// Local Variables:
williamr@2
   836
// mode:C++
williamr@2
   837
// End: