OSDN Git Service

* src/Makefile.am (sources): Add bitset.cc
authorgdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Nov 2000 01:09:09 +0000 (01:09 +0000)
committergdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Nov 2000 01:09:09 +0000 (01:09 +0000)
* src/Makefile.in: Regenrate.

* include/bits/std_bitset.h (_GLIBCPP_BITSET_BITS_PER_WORD): New
macro. Replace __BITS_PER_WORDS throughout.
(__BITS_PER_WORDS): Remove.
(bitset<>::_M_do_find_first, bitset<>::_M_do_find_next): Move
definitions to src/bitset.cc.

* src/bitset.cc (bitset<>::_M_do_find_first,
bitset<>::_M_do_find_next):  Define here.
(_Bit_count<>::_S_bit_count, _Find_one<>::_S_first_one): Define
here. Explicitly instantiate definitions.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37837 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/std_bitset.h
libstdc++-v3/src/Makefile.am
libstdc++-v3/src/Makefile.in
libstdc++-v3/src/bitset.cc

index 11e529a..c873733 100644 (file)
@@ -1,3 +1,19 @@
+2000-11-29  Gabriel Dos Reis  <gdr@codesourcery.com>
+
+       * src/Makefile.am (sources): Add bitset.cc
+       * src/Makefile.in: Regenrate.
+
+       * include/bits/std_bitset.h (_GLIBCPP_BITSET_BITS_PER_WORD): New
+       macro. Replace __BITS_PER_WORDS throughout.
+       (__BITS_PER_WORDS): Remove.
+       (bitset<>::_M_do_find_first, bitset<>::_M_do_find_next): Move
+       definitions to src/bitset.cc.
+
+       * src/bitset.cc (bitset<>::_M_do_find_first,
+       bitset<>::_M_do_find_next):  Define here.
+       (_Bit_count<>::_S_bit_count, _Find_one<>::_S_first_one): Define
+       here. Explicitly instantiate definitions.
+
 2000-11-28  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
 
        * config/cpu/powerpc/bits/atomicity.h (__exchange_and_add): Silence
index 0d90f28..d4bf10c 100644 (file)
@@ -42,9 +42,9 @@
 #include <bits/std_iostream.h>   // for istream, ostream
 #endif
 
-#define __BITS_PER_WORD (CHAR_BIT*sizeof(unsigned long))
+#define _GLIBCPP_BITSET_BITS_PER_WORD (CHAR_BIT*sizeof(unsigned long))
 #define __BITSET_WORDS(__n) \
- ((__n) < 1 ? 1 : ((__n) + __BITS_PER_WORD - 1)/__BITS_PER_WORD)
+ ((__n) < 1 ? 1 : ((__n) + _GLIBCPP_BITSET_BITS_PER_WORD - 1)/_GLIBCPP_BITSET_BITS_PER_WORD)
 
 __STL_BEGIN_NAMESPACE
 
@@ -82,11 +82,11 @@ struct _Base_bitset {
   }
 
   static size_t _S_whichword( size_t __pos )
-    { return __pos / __BITS_PER_WORD; }
+    { return __pos / _GLIBCPP_BITSET_BITS_PER_WORD; }
   static size_t _S_whichbyte( size_t __pos )
-    { return (__pos % __BITS_PER_WORD) / CHAR_BIT; }
+    { return (__pos % _GLIBCPP_BITSET_BITS_PER_WORD) / CHAR_BIT; }
   static size_t _S_whichbit( size_t __pos )
-    { return __pos % __BITS_PER_WORD; }
+    { return __pos % _GLIBCPP_BITSET_BITS_PER_WORD; }
   static _WordT _S_maskbit( size_t __pos )
     { return (static_cast<_WordT>(1)) << _S_whichbit(__pos); }
 
@@ -176,15 +176,15 @@ template<size_t _Nw>
 void _Base_bitset<_Nw>::_M_do_left_shift(size_t __shift) 
 {
   if (__shift != 0) {
-    const size_t __wshift = __shift / __BITS_PER_WORD;
-    const size_t __offset = __shift % __BITS_PER_WORD;
+    const size_t __wshift = __shift / _GLIBCPP_BITSET_BITS_PER_WORD;
+    const size_t __offset = __shift % _GLIBCPP_BITSET_BITS_PER_WORD;
 
     if (__offset == 0)
       for (size_t __n = _Nw - 1; __n >= __wshift; --__n)
         _M_w[__n] = _M_w[__n - __wshift];
 
     else {
-      const size_t __sub_offset = __BITS_PER_WORD - __offset;
+      const size_t __sub_offset = _GLIBCPP_BITSET_BITS_PER_WORD - __offset;
       for (size_t __n = _Nw - 1; __n > __wshift; --__n)
         _M_w[__n] = (_M_w[__n - __wshift] << __offset) | 
                     (_M_w[__n - __wshift - 1] >> __sub_offset);
@@ -199,8 +199,8 @@ template<size_t _Nw>
 void _Base_bitset<_Nw>::_M_do_right_shift(size_t __shift) 
 {
   if (__shift != 0) {
-    const size_t __wshift = __shift / __BITS_PER_WORD;
-    const size_t __offset = __shift % __BITS_PER_WORD;
+    const size_t __wshift = __shift / _GLIBCPP_BITSET_BITS_PER_WORD;
+    const size_t __offset = __shift % _GLIBCPP_BITSET_BITS_PER_WORD;
     const size_t __limit = _Nw - __wshift - 1;
 
     if (__offset == 0)
@@ -208,7 +208,7 @@ void _Base_bitset<_Nw>::_M_do_right_shift(size_t __shift)
         _M_w[__n] = _M_w[__n + __wshift];
 
     else {
-      const size_t __sub_offset = __BITS_PER_WORD - __offset;
+      const size_t __sub_offset = _GLIBCPP_BITSET_BITS_PER_WORD - __offset;
       for (size_t __n = 0; __n < __limit; ++__n)
         _M_w[__n] = (_M_w[__n + __wshift] >> __offset) |
                     (_M_w[__n + __wshift + 1] << __sub_offset);
@@ -240,7 +240,7 @@ size_t _Base_bitset<_Nw>::_M_do_find_first(size_t __not_found) const
         unsigned char __this_byte
           = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
         if ( __this_byte )
-          return __i*__BITS_PER_WORD + __j*CHAR_BIT +
+          return __i*_GLIBCPP_BITSET_BITS_PER_WORD + __j*CHAR_BIT +
             _First_one<true>::_S_first_one[__this_byte];
 
         __thisword >>= CHAR_BIT;
@@ -259,7 +259,7 @@ _Base_bitset<_Nw>::_M_do_find_next(size_t __prev, size_t __not_found) const
   ++__prev;
 
   // check out of bounds
-  if ( __prev >= _Nw * __BITS_PER_WORD )
+  if ( __prev >= _Nw * _GLIBCPP_BITSET_BITS_PER_WORD )
     return __not_found;
 
     // search first word
@@ -277,7 +277,7 @@ _Base_bitset<_Nw>::_M_do_find_next(size_t __prev, size_t __not_found) const
       unsigned char __this_byte
         = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
       if ( __this_byte )
-        return __i*__BITS_PER_WORD + __j*CHAR_BIT +
+        return __i*_GLIBCPP_BITSET_BITS_PER_WORD + __j*CHAR_BIT +
           _First_one<true>::_S_first_one[__this_byte];
 
       __thisword >>= CHAR_BIT;
@@ -294,7 +294,7 @@ _Base_bitset<_Nw>::_M_do_find_next(size_t __prev, size_t __not_found) const
         unsigned char __this_byte
           = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
         if ( __this_byte )
-          return __i*__BITS_PER_WORD + __j*CHAR_BIT +
+          return __i*_GLIBCPP_BITSET_BITS_PER_WORD + __j*CHAR_BIT +
             _First_one<true>::_S_first_one[__this_byte];
 
         __thisword >>= CHAR_BIT;
@@ -321,11 +321,11 @@ __STL_TEMPLATE_NULL struct _Base_bitset<1> {
   _Base_bitset(unsigned long __val) : _M_w(__val) {}
 
   static size_t _S_whichword( size_t __pos )
-    { return __pos / __BITS_PER_WORD; }
+    { return __pos / _GLIBCPP_BITSET_BITS_PER_WORD; }
   static size_t _S_whichbyte( size_t __pos )
-    { return (__pos % __BITS_PER_WORD) / CHAR_BIT; }
+    { return (__pos % _GLIBCPP_BITSET_BITS_PER_WORD) / CHAR_BIT; }
   static size_t _S_whichbit( size_t __pos )
-    {  return __pos % __BITS_PER_WORD; }
+    {  return __pos % _GLIBCPP_BITSET_BITS_PER_WORD; }
   static _WordT _S_maskbit( size_t __pos )
     { return (static_cast<_WordT>(1)) << _S_whichbit(__pos); }
 
@@ -370,63 +370,6 @@ __STL_TEMPLATE_NULL struct _Base_bitset<1> {
 
 };
 
-//
-// Definitions of non-inline functions from the single-word version of
-//  _Base_bitset.
-//
-
-size_t _Base_bitset<1>::_M_do_find_first(size_t __not_found) const
-{
-  _WordT __thisword = _M_w;
-
-  if ( __thisword != static_cast<_WordT>(0) ) {
-    // find byte within word
-    for ( size_t __j = 0; __j < sizeof(_WordT); __j++ ) {
-      unsigned char __this_byte
-        = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
-      if ( __this_byte )
-        return __j*CHAR_BIT + _First_one<true>::_S_first_one[__this_byte];
-
-      __thisword >>= CHAR_BIT;
-    }
-  }
-  // not found, so return a value that indicates failure.
-  return __not_found;
-}
-
-size_t _Base_bitset<1>::_M_do_find_next(size_t __prev, size_t __not_found ) const
-{
-  // make bound inclusive
-  ++__prev;
-
-  // check out of bounds
-  if ( __prev >= __BITS_PER_WORD )
-    return __not_found;
-
-    // search first (and only) word
-  _WordT __thisword = _M_w;
-
-  // mask off bits below bound
-  __thisword &= (~static_cast<_WordT>(0)) << _S_whichbit(__prev);
-
-  if ( __thisword != static_cast<_WordT>(0) ) {
-    // find byte within word
-    // get first byte into place
-    __thisword >>= _S_whichbyte(__prev) * CHAR_BIT;
-    for ( size_t __j = _S_whichbyte(__prev); __j < sizeof(_WordT); __j++ ) {
-      unsigned char __this_byte
-        = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
-      if ( __this_byte )
-        return __j*CHAR_BIT + _First_one<true>::_S_first_one[__this_byte];
-
-      __thisword >>= CHAR_BIT;
-    }
-  }
-
-  // not found, so return a value that indicates failure.
-  return __not_found;
-} // end _M_do_find_next
-
 
 // ------------------------------------------------------------
 // Helper class to zero out the unused high-order bits in the highest word.
@@ -455,7 +398,7 @@ private:
 
 private:
   void _M_do_sanitize() {
-    _Sanitize<_Nb%__BITS_PER_WORD>::_M_do_sanitize(this->_M_hiword());
+    _Sanitize<_Nb%_GLIBCPP_BITSET_BITS_PER_WORD>::_M_do_sanitize(this->_M_hiword());
   }
 
 public:
@@ -942,120 +885,6 @@ ostream& operator<<(ostream& __os, const bitset<_Nb>& __x) {
 
 #endif /* __STL_USE_NEW_IOSTREAMS */
 
-// ------------------------------------------------------------
-// Lookup tables for find and count operations.
-
-template<bool __dummy>
-unsigned char _Bit_count<__dummy>::_S_bit_count[] = {
-  0, /*   0 */ 1, /*   1 */ 1, /*   2 */ 2, /*   3 */ 1, /*   4 */
-  2, /*   5 */ 2, /*   6 */ 3, /*   7 */ 1, /*   8 */ 2, /*   9 */
-  2, /*  10 */ 3, /*  11 */ 2, /*  12 */ 3, /*  13 */ 3, /*  14 */
-  4, /*  15 */ 1, /*  16 */ 2, /*  17 */ 2, /*  18 */ 3, /*  19 */
-  2, /*  20 */ 3, /*  21 */ 3, /*  22 */ 4, /*  23 */ 2, /*  24 */
-  3, /*  25 */ 3, /*  26 */ 4, /*  27 */ 3, /*  28 */ 4, /*  29 */
-  4, /*  30 */ 5, /*  31 */ 1, /*  32 */ 2, /*  33 */ 2, /*  34 */
-  3, /*  35 */ 2, /*  36 */ 3, /*  37 */ 3, /*  38 */ 4, /*  39 */
-  2, /*  40 */ 3, /*  41 */ 3, /*  42 */ 4, /*  43 */ 3, /*  44 */
-  4, /*  45 */ 4, /*  46 */ 5, /*  47 */ 2, /*  48 */ 3, /*  49 */
-  3, /*  50 */ 4, /*  51 */ 3, /*  52 */ 4, /*  53 */ 4, /*  54 */
-  5, /*  55 */ 3, /*  56 */ 4, /*  57 */ 4, /*  58 */ 5, /*  59 */
-  4, /*  60 */ 5, /*  61 */ 5, /*  62 */ 6, /*  63 */ 1, /*  64 */
-  2, /*  65 */ 2, /*  66 */ 3, /*  67 */ 2, /*  68 */ 3, /*  69 */
-  3, /*  70 */ 4, /*  71 */ 2, /*  72 */ 3, /*  73 */ 3, /*  74 */
-  4, /*  75 */ 3, /*  76 */ 4, /*  77 */ 4, /*  78 */ 5, /*  79 */
-  2, /*  80 */ 3, /*  81 */ 3, /*  82 */ 4, /*  83 */ 3, /*  84 */
-  4, /*  85 */ 4, /*  86 */ 5, /*  87 */ 3, /*  88 */ 4, /*  89 */
-  4, /*  90 */ 5, /*  91 */ 4, /*  92 */ 5, /*  93 */ 5, /*  94 */
-  6, /*  95 */ 2, /*  96 */ 3, /*  97 */ 3, /*  98 */ 4, /*  99 */
-  3, /* 100 */ 4, /* 101 */ 4, /* 102 */ 5, /* 103 */ 3, /* 104 */
-  4, /* 105 */ 4, /* 106 */ 5, /* 107 */ 4, /* 108 */ 5, /* 109 */
-  5, /* 110 */ 6, /* 111 */ 3, /* 112 */ 4, /* 113 */ 4, /* 114 */
-  5, /* 115 */ 4, /* 116 */ 5, /* 117 */ 5, /* 118 */ 6, /* 119 */
-  4, /* 120 */ 5, /* 121 */ 5, /* 122 */ 6, /* 123 */ 5, /* 124 */
-  6, /* 125 */ 6, /* 126 */ 7, /* 127 */ 1, /* 128 */ 2, /* 129 */
-  2, /* 130 */ 3, /* 131 */ 2, /* 132 */ 3, /* 133 */ 3, /* 134 */
-  4, /* 135 */ 2, /* 136 */ 3, /* 137 */ 3, /* 138 */ 4, /* 139 */
-  3, /* 140 */ 4, /* 141 */ 4, /* 142 */ 5, /* 143 */ 2, /* 144 */
-  3, /* 145 */ 3, /* 146 */ 4, /* 147 */ 3, /* 148 */ 4, /* 149 */
-  4, /* 150 */ 5, /* 151 */ 3, /* 152 */ 4, /* 153 */ 4, /* 154 */
-  5, /* 155 */ 4, /* 156 */ 5, /* 157 */ 5, /* 158 */ 6, /* 159 */
-  2, /* 160 */ 3, /* 161 */ 3, /* 162 */ 4, /* 163 */ 3, /* 164 */
-  4, /* 165 */ 4, /* 166 */ 5, /* 167 */ 3, /* 168 */ 4, /* 169 */
-  4, /* 170 */ 5, /* 171 */ 4, /* 172 */ 5, /* 173 */ 5, /* 174 */
-  6, /* 175 */ 3, /* 176 */ 4, /* 177 */ 4, /* 178 */ 5, /* 179 */
-  4, /* 180 */ 5, /* 181 */ 5, /* 182 */ 6, /* 183 */ 4, /* 184 */
-  5, /* 185 */ 5, /* 186 */ 6, /* 187 */ 5, /* 188 */ 6, /* 189 */
-  6, /* 190 */ 7, /* 191 */ 2, /* 192 */ 3, /* 193 */ 3, /* 194 */
-  4, /* 195 */ 3, /* 196 */ 4, /* 197 */ 4, /* 198 */ 5, /* 199 */
-  3, /* 200 */ 4, /* 201 */ 4, /* 202 */ 5, /* 203 */ 4, /* 204 */
-  5, /* 205 */ 5, /* 206 */ 6, /* 207 */ 3, /* 208 */ 4, /* 209 */
-  4, /* 210 */ 5, /* 211 */ 4, /* 212 */ 5, /* 213 */ 5, /* 214 */
-  6, /* 215 */ 4, /* 216 */ 5, /* 217 */ 5, /* 218 */ 6, /* 219 */
-  5, /* 220 */ 6, /* 221 */ 6, /* 222 */ 7, /* 223 */ 3, /* 224 */
-  4, /* 225 */ 4, /* 226 */ 5, /* 227 */ 4, /* 228 */ 5, /* 229 */
-  5, /* 230 */ 6, /* 231 */ 4, /* 232 */ 5, /* 233 */ 5, /* 234 */
-  6, /* 235 */ 5, /* 236 */ 6, /* 237 */ 6, /* 238 */ 7, /* 239 */
-  4, /* 240 */ 5, /* 241 */ 5, /* 242 */ 6, /* 243 */ 5, /* 244 */
-  6, /* 245 */ 6, /* 246 */ 7, /* 247 */ 5, /* 248 */ 6, /* 249 */
-  6, /* 250 */ 7, /* 251 */ 6, /* 252 */ 7, /* 253 */ 7, /* 254 */
-  8  /* 255 */
-}; // end _Bit_count
-
-template<bool __dummy>
-unsigned char _First_one<__dummy>::_S_first_one[] = {
-  0, /*   0 */ 0, /*   1 */ 1, /*   2 */ 0, /*   3 */ 2, /*   4 */
-  0, /*   5 */ 1, /*   6 */ 0, /*   7 */ 3, /*   8 */ 0, /*   9 */
-  1, /*  10 */ 0, /*  11 */ 2, /*  12 */ 0, /*  13 */ 1, /*  14 */
-  0, /*  15 */ 4, /*  16 */ 0, /*  17 */ 1, /*  18 */ 0, /*  19 */
-  2, /*  20 */ 0, /*  21 */ 1, /*  22 */ 0, /*  23 */ 3, /*  24 */
-  0, /*  25 */ 1, /*  26 */ 0, /*  27 */ 2, /*  28 */ 0, /*  29 */
-  1, /*  30 */ 0, /*  31 */ 5, /*  32 */ 0, /*  33 */ 1, /*  34 */
-  0, /*  35 */ 2, /*  36 */ 0, /*  37 */ 1, /*  38 */ 0, /*  39 */
-  3, /*  40 */ 0, /*  41 */ 1, /*  42 */ 0, /*  43 */ 2, /*  44 */
-  0, /*  45 */ 1, /*  46 */ 0, /*  47 */ 4, /*  48 */ 0, /*  49 */
-  1, /*  50 */ 0, /*  51 */ 2, /*  52 */ 0, /*  53 */ 1, /*  54 */
-  0, /*  55 */ 3, /*  56 */ 0, /*  57 */ 1, /*  58 */ 0, /*  59 */
-  2, /*  60 */ 0, /*  61 */ 1, /*  62 */ 0, /*  63 */ 6, /*  64 */
-  0, /*  65 */ 1, /*  66 */ 0, /*  67 */ 2, /*  68 */ 0, /*  69 */
-  1, /*  70 */ 0, /*  71 */ 3, /*  72 */ 0, /*  73 */ 1, /*  74 */
-  0, /*  75 */ 2, /*  76 */ 0, /*  77 */ 1, /*  78 */ 0, /*  79 */
-  4, /*  80 */ 0, /*  81 */ 1, /*  82 */ 0, /*  83 */ 2, /*  84 */
-  0, /*  85 */ 1, /*  86 */ 0, /*  87 */ 3, /*  88 */ 0, /*  89 */
-  1, /*  90 */ 0, /*  91 */ 2, /*  92 */ 0, /*  93 */ 1, /*  94 */
-  0, /*  95 */ 5, /*  96 */ 0, /*  97 */ 1, /*  98 */ 0, /*  99 */
-  2, /* 100 */ 0, /* 101 */ 1, /* 102 */ 0, /* 103 */ 3, /* 104 */
-  0, /* 105 */ 1, /* 106 */ 0, /* 107 */ 2, /* 108 */ 0, /* 109 */
-  1, /* 110 */ 0, /* 111 */ 4, /* 112 */ 0, /* 113 */ 1, /* 114 */
-  0, /* 115 */ 2, /* 116 */ 0, /* 117 */ 1, /* 118 */ 0, /* 119 */
-  3, /* 120 */ 0, /* 121 */ 1, /* 122 */ 0, /* 123 */ 2, /* 124 */
-  0, /* 125 */ 1, /* 126 */ 0, /* 127 */ 7, /* 128 */ 0, /* 129 */
-  1, /* 130 */ 0, /* 131 */ 2, /* 132 */ 0, /* 133 */ 1, /* 134 */
-  0, /* 135 */ 3, /* 136 */ 0, /* 137 */ 1, /* 138 */ 0, /* 139 */
-  2, /* 140 */ 0, /* 141 */ 1, /* 142 */ 0, /* 143 */ 4, /* 144 */
-  0, /* 145 */ 1, /* 146 */ 0, /* 147 */ 2, /* 148 */ 0, /* 149 */
-  1, /* 150 */ 0, /* 151 */ 3, /* 152 */ 0, /* 153 */ 1, /* 154 */
-  0, /* 155 */ 2, /* 156 */ 0, /* 157 */ 1, /* 158 */ 0, /* 159 */
-  5, /* 160 */ 0, /* 161 */ 1, /* 162 */ 0, /* 163 */ 2, /* 164 */
-  0, /* 165 */ 1, /* 166 */ 0, /* 167 */ 3, /* 168 */ 0, /* 169 */
-  1, /* 170 */ 0, /* 171 */ 2, /* 172 */ 0, /* 173 */ 1, /* 174 */
-  0, /* 175 */ 4, /* 176 */ 0, /* 177 */ 1, /* 178 */ 0, /* 179 */
-  2, /* 180 */ 0, /* 181 */ 1, /* 182 */ 0, /* 183 */ 3, /* 184 */
-  0, /* 185 */ 1, /* 186 */ 0, /* 187 */ 2, /* 188 */ 0, /* 189 */
-  1, /* 190 */ 0, /* 191 */ 6, /* 192 */ 0, /* 193 */ 1, /* 194 */
-  0, /* 195 */ 2, /* 196 */ 0, /* 197 */ 1, /* 198 */ 0, /* 199 */
-  3, /* 200 */ 0, /* 201 */ 1, /* 202 */ 0, /* 203 */ 2, /* 204 */
-  0, /* 205 */ 1, /* 206 */ 0, /* 207 */ 4, /* 208 */ 0, /* 209 */
-  1, /* 210 */ 0, /* 211 */ 2, /* 212 */ 0, /* 213 */ 1, /* 214 */
-  0, /* 215 */ 3, /* 216 */ 0, /* 217 */ 1, /* 218 */ 0, /* 219 */
-  2, /* 220 */ 0, /* 221 */ 1, /* 222 */ 0, /* 223 */ 5, /* 224 */
-  0, /* 225 */ 1, /* 226 */ 0, /* 227 */ 2, /* 228 */ 0, /* 229 */
-  1, /* 230 */ 0, /* 231 */ 3, /* 232 */ 0, /* 233 */ 1, /* 234 */
-  0, /* 235 */ 2, /* 236 */ 0, /* 237 */ 1, /* 238 */ 0, /* 239 */
-  4, /* 240 */ 0, /* 241 */ 1, /* 242 */ 0, /* 243 */ 2, /* 244 */
-  0, /* 245 */ 1, /* 246 */ 0, /* 247 */ 3, /* 248 */ 0, /* 249 */
-  1, /* 250 */ 0, /* 251 */ 2, /* 252 */ 0, /* 253 */ 1, /* 254 */
-  0, /* 255 */
-}; // end _First_one
 
 #if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
 #pragma reset woff 1209
@@ -1063,8 +892,6 @@ unsigned char _First_one<__dummy>::_S_first_one[] = {
 
 __STL_END_NAMESPACE
 
-
-#undef __BITS_PER_WORD
 #undef __BITSET_WORDS
 
 #endif /* __SGI_STL_BITSET */
index 3d8f50e..6165018 100644 (file)
@@ -21,7 +21,7 @@
 ## Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
 ## USA.
 
-## $Id: Makefile.am,v 1.51 2000/11/23 06:46:31 bkoz Exp $
+## $Id: Makefile.am,v 1.52 2000/11/25 09:11:15 bkoz Exp $
 
 AUTOMAKE_OPTIONS = 1.3 gnits
 MAINT_CHARSET = latin1
@@ -177,7 +177,7 @@ sources = \
        limitsMEMBERS.cc \
        cmath.cc \
        complex.cc complexf.cc complexl.cc complex_io.cc \
-       stdexcept.cc \
+       stdexcept.cc bitset.cc \
        c++io.cc ios.cc stdstreams.cc strstream.cc \
        locale.cc localename.cc codecvt.cc \
        locale-inst.cc stl-inst.cc misc-inst.cc valarray-inst.cc string-inst.cc
index 86a1a90..3921cfc 100644 (file)
@@ -168,7 +168,7 @@ build_headers =     bits/std_limits.h bits/c++config.h bits/c++io.h bits/c++thread
 
 headers = $(base_headers) $(c_headers)
 
-sources =      limitsMEMBERS.cc        cmath.cc        complex.cc complexf.cc complexl.cc complex_io.cc        stdexcept.cc    c++io.cc ios.cc stdstreams.cc strstream.cc      locale.cc localename.cc codecvt.cc      locale-inst.cc stl-inst.cc misc-inst.cc valarray-inst.cc string-inst.cc
+sources =      limitsMEMBERS.cc        cmath.cc        complex.cc complexf.cc complexl.cc complex_io.cc        stdexcept.cc bitset.cc  c++io.cc ios.cc stdstreams.cc strstream.cc      locale.cc localename.cc codecvt.cc      locale-inst.cc stl-inst.cc misc-inst.cc valarray-inst.cc string-inst.cc
 
 
 wstring_sources =      wstring-inst.cc
@@ -247,9 +247,9 @@ libinst_wstring_la_LDFLAGS =
 libinst_wstring_la_LIBADD = 
 libinst_wstring_la_OBJECTS =  wstring-inst.lo
 libstdc___la_OBJECTS =  limitsMEMBERS.lo cmath.lo complex.lo complexf.lo \
-complexl.lo complex_io.lo stdexcept.lo c++io.lo ios.lo stdstreams.lo \
-strstream.lo locale.lo localename.lo codecvt.lo locale-inst.lo \
-stl-inst.lo misc-inst.lo valarray-inst.lo string-inst.lo
+complexl.lo complex_io.lo stdexcept.lo bitset.lo c++io.lo ios.lo \
+stdstreams.lo strstream.lo locale.lo localename.lo codecvt.lo \
+locale-inst.lo stl-inst.lo misc-inst.lo valarray-inst.lo string-inst.lo
 CXXFLAGS = @CXXFLAGS@
 CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
 CXXLD = $(CXX)
@@ -400,7 +400,7 @@ distdir: $(DISTFILES)
        @for file in $(DISTFILES); do \
          if test -f $$file; then d=.; else d=$(srcdir); fi; \
          if test -d $$d/$$file; then \
-           cp -pr $$d/$$file $(distdir)/$$file; \
+           cp -pr $$/$$file $(distdir)/$$file; \
          else \
            test -f $(distdir)/$$file \
            || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
index cd8c71f..599a399 100644 (file)
-/* Low-level implementation of bitset template class from ISO C++.  */
-
-// Copyright (C) 1997-1999 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
+/*
+ * Copyright (c) 1998
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ */ 
 
 #include <bits/std_bitset.h>
-#include <bits/std_climits.h>
-
-
-static const size_t word_bits = sizeof (__bitset_word) * CHAR_BIT;
 
+//
+// Definitions of non-inline functions from the single-word version of
+//  _Base_bitset.
+//
 
-void
-__bitset_base_lshift (__bitset_word *arr, size_t n, size_t nlast,
-                     size_t offset, size_t nbits)
+size_t
+std::_Base_bitset<1>::_M_do_find_first(size_t __not_found) const
 {
-  arr[n - 1] = arr[n - 1 - offset] << nbits;
+  _WordT __thisword = _M_w;
 
-  for (size_t cnt = n - 1; cnt > offset; --cnt)
-    {
-      arr[cnt] |= arr[cnt - 1 - offset] >> (word_bits - nbits);
-      arr[cnt - 1] = arr[cnt - 1 - offset] << nbits;
-    }
+  if ( __thisword != static_cast<_WordT>(0) ) {
+    // find byte within word
+    for ( size_t __j = 0; __j < sizeof(_WordT); __j++ ) {
+      unsigned char __this_byte
+        = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
+      if ( __this_byte )
+        return __j*CHAR_BIT + _First_one<true>::_S_first_one[__this_byte];
 
-  memset (arr, '\0', offset * sizeof (__bitset_word));
-}
-
-
-void
-__bitset_base_rshift (__bitset_word *arr, size_t n, size_t nlast,
-                     size_t offset, size_t nbits)
-{
-  arr[0] = arr[offset] >> nbits;
-
-  for (size_t cnt = offset + 1; cnt < n; ++cnt)
-    {
-      arr[cnt - 1 - offset] |= arr[cnt] << (word_bits - nbits);
-      arr[cnt - offset] = arr[cnt] >> nbits;
+      __thisword >>= CHAR_BIT;
     }
-
-  memset (&arr[n - offset], '\0', offset * sizeof (__bitset_word));
+  }
+  // not found, so return a value that indicates failure.
+  return __not_found;
 }
 
-
 size_t
-__bitset_base_count (__bitset_word *arr, size_t n)
+std::_Base_bitset<1>::_M_do_find_next(size_t __prev, size_t __not_found) const
 {
-  size_t result = 0;
-
-  while (n > 0)
-    {
-      __bitset_word word = arr[n];
-
-      if (sizeof (__bitset_word) == 4)
-       {
-         word = (word & 0x55555555) + ((word >> 1) & 0x55555555);
-         word = (word & 0x33333333) + ((word >> 2) & 0x33333333);
-         word = (word + (word >> 4)) & 0x0f0f0f0f;
-         word = word + (word >> 8);
-         word = (word + (word >> 16)) & 0xff;
-       }
-      else
-       {
-         // The only other possibility is a 64 bit word.
-         word = ((word & ((0x55555555UL << 16) << 16 | 0x55555555UL))
-                 + ((word >> 1)
-                    & ((0x55555555UL << 16) << 16 | 0x55555555UL)));
-         word = ((word & ((0x33333333UL << 16) << 16 | 0x33333333UL))
-                 + ((word >> 1)
-                    & ((0x33333333UL << 16) << 16 | 0x33333333UL)));
-         word = ((word + (word >> 4))
-                 & ((0x0f0f0f0fUL << 16) << 16 | 0x0f0f0f0fUL));
-         word = (word + (word >> 8));
-         word = (word + (word >> 16));
-         word = (word + ((word >> 16) >> 16)) & 0xff;
-       }
-
-      result += word;
+  // make bound inclusive
+  ++__prev;
+
+  // check out of bounds
+  if ( __prev >= _GLIBCPP_BITSET_BITS_PER_WORD )
+    return __not_found;
+
+    // search first (and only) word
+  _WordT __thisword = _M_w;
+
+  // mask off bits below bound
+  __thisword &= (~static_cast<_WordT>(0)) << _S_whichbit(__prev);
+
+  if ( __thisword != static_cast<_WordT>(0) ) {
+    // find byte within word
+    // get first byte into place
+    __thisword >>= _S_whichbyte(__prev) * CHAR_BIT;
+    for ( size_t __j = _S_whichbyte(__prev); __j < sizeof(_WordT); __j++ ) {
+      unsigned char __this_byte
+        = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
+      if ( __this_byte )
+        return __j*CHAR_BIT + _First_one<true>::_S_first_one[__this_byte];
+
+      __thisword >>= CHAR_BIT;
     }
+  }
+
+  // not found, so return a value that indicates failure.
+  return __not_found;
+} // end _M_do_find_next
+
+// ------------------------------------------------------------
+// Lookup tables for find and count operations.
+
+template<bool __dummy>
+unsigned char std::_Bit_count<__dummy>::_S_bit_count[] = {
+  0, /*   0 */ 1, /*   1 */ 1, /*   2 */ 2, /*   3 */ 1, /*   4 */
+  2, /*   5 */ 2, /*   6 */ 3, /*   7 */ 1, /*   8 */ 2, /*   9 */
+  2, /*  10 */ 3, /*  11 */ 2, /*  12 */ 3, /*  13 */ 3, /*  14 */
+  4, /*  15 */ 1, /*  16 */ 2, /*  17 */ 2, /*  18 */ 3, /*  19 */
+  2, /*  20 */ 3, /*  21 */ 3, /*  22 */ 4, /*  23 */ 2, /*  24 */
+  3, /*  25 */ 3, /*  26 */ 4, /*  27 */ 3, /*  28 */ 4, /*  29 */
+  4, /*  30 */ 5, /*  31 */ 1, /*  32 */ 2, /*  33 */ 2, /*  34 */
+  3, /*  35 */ 2, /*  36 */ 3, /*  37 */ 3, /*  38 */ 4, /*  39 */
+  2, /*  40 */ 3, /*  41 */ 3, /*  42 */ 4, /*  43 */ 3, /*  44 */
+  4, /*  45 */ 4, /*  46 */ 5, /*  47 */ 2, /*  48 */ 3, /*  49 */
+  3, /*  50 */ 4, /*  51 */ 3, /*  52 */ 4, /*  53 */ 4, /*  54 */
+  5, /*  55 */ 3, /*  56 */ 4, /*  57 */ 4, /*  58 */ 5, /*  59 */
+  4, /*  60 */ 5, /*  61 */ 5, /*  62 */ 6, /*  63 */ 1, /*  64 */
+  2, /*  65 */ 2, /*  66 */ 3, /*  67 */ 2, /*  68 */ 3, /*  69 */
+  3, /*  70 */ 4, /*  71 */ 2, /*  72 */ 3, /*  73 */ 3, /*  74 */
+  4, /*  75 */ 3, /*  76 */ 4, /*  77 */ 4, /*  78 */ 5, /*  79 */
+  2, /*  80 */ 3, /*  81 */ 3, /*  82 */ 4, /*  83 */ 3, /*  84 */
+  4, /*  85 */ 4, /*  86 */ 5, /*  87 */ 3, /*  88 */ 4, /*  89 */
+  4, /*  90 */ 5, /*  91 */ 4, /*  92 */ 5, /*  93 */ 5, /*  94 */
+  6, /*  95 */ 2, /*  96 */ 3, /*  97 */ 3, /*  98 */ 4, /*  99 */
+  3, /* 100 */ 4, /* 101 */ 4, /* 102 */ 5, /* 103 */ 3, /* 104 */
+  4, /* 105 */ 4, /* 106 */ 5, /* 107 */ 4, /* 108 */ 5, /* 109 */
+  5, /* 110 */ 6, /* 111 */ 3, /* 112 */ 4, /* 113 */ 4, /* 114 */
+  5, /* 115 */ 4, /* 116 */ 5, /* 117 */ 5, /* 118 */ 6, /* 119 */
+  4, /* 120 */ 5, /* 121 */ 5, /* 122 */ 6, /* 123 */ 5, /* 124 */
+  6, /* 125 */ 6, /* 126 */ 7, /* 127 */ 1, /* 128 */ 2, /* 129 */
+  2, /* 130 */ 3, /* 131 */ 2, /* 132 */ 3, /* 133 */ 3, /* 134 */
+  4, /* 135 */ 2, /* 136 */ 3, /* 137 */ 3, /* 138 */ 4, /* 139 */
+  3, /* 140 */ 4, /* 141 */ 4, /* 142 */ 5, /* 143 */ 2, /* 144 */
+  3, /* 145 */ 3, /* 146 */ 4, /* 147 */ 3, /* 148 */ 4, /* 149 */
+  4, /* 150 */ 5, /* 151 */ 3, /* 152 */ 4, /* 153 */ 4, /* 154 */
+  5, /* 155 */ 4, /* 156 */ 5, /* 157 */ 5, /* 158 */ 6, /* 159 */
+  2, /* 160 */ 3, /* 161 */ 3, /* 162 */ 4, /* 163 */ 3, /* 164 */
+  4, /* 165 */ 4, /* 166 */ 5, /* 167 */ 3, /* 168 */ 4, /* 169 */
+  4, /* 170 */ 5, /* 171 */ 4, /* 172 */ 5, /* 173 */ 5, /* 174 */
+  6, /* 175 */ 3, /* 176 */ 4, /* 177 */ 4, /* 178 */ 5, /* 179 */
+  4, /* 180 */ 5, /* 181 */ 5, /* 182 */ 6, /* 183 */ 4, /* 184 */
+  5, /* 185 */ 5, /* 186 */ 6, /* 187 */ 5, /* 188 */ 6, /* 189 */
+  6, /* 190 */ 7, /* 191 */ 2, /* 192 */ 3, /* 193 */ 3, /* 194 */
+  4, /* 195 */ 3, /* 196 */ 4, /* 197 */ 4, /* 198 */ 5, /* 199 */
+  3, /* 200 */ 4, /* 201 */ 4, /* 202 */ 5, /* 203 */ 4, /* 204 */
+  5, /* 205 */ 5, /* 206 */ 6, /* 207 */ 3, /* 208 */ 4, /* 209 */
+  4, /* 210 */ 5, /* 211 */ 4, /* 212 */ 5, /* 213 */ 5, /* 214 */
+  6, /* 215 */ 4, /* 216 */ 5, /* 217 */ 5, /* 218 */ 6, /* 219 */
+  5, /* 220 */ 6, /* 221 */ 6, /* 222 */ 7, /* 223 */ 3, /* 224 */
+  4, /* 225 */ 4, /* 226 */ 5, /* 227 */ 4, /* 228 */ 5, /* 229 */
+  5, /* 230 */ 6, /* 231 */ 4, /* 232 */ 5, /* 233 */ 5, /* 234 */
+  6, /* 235 */ 5, /* 236 */ 6, /* 237 */ 6, /* 238 */ 7, /* 239 */
+  4, /* 240 */ 5, /* 241 */ 5, /* 242 */ 6, /* 243 */ 5, /* 244 */
+  6, /* 245 */ 6, /* 246 */ 7, /* 247 */ 5, /* 248 */ 6, /* 249 */
+  6, /* 250 */ 7, /* 251 */ 6, /* 252 */ 7, /* 253 */ 7, /* 254 */
+  8  /* 255 */
+}; // end _Bit_count
+
+template<bool __dummy>
+unsigned char std::_First_one<__dummy>::_S_first_one[] = {
+  0, /*   0 */ 0, /*   1 */ 1, /*   2 */ 0, /*   3 */ 2, /*   4 */
+  0, /*   5 */ 1, /*   6 */ 0, /*   7 */ 3, /*   8 */ 0, /*   9 */
+  1, /*  10 */ 0, /*  11 */ 2, /*  12 */ 0, /*  13 */ 1, /*  14 */
+  0, /*  15 */ 4, /*  16 */ 0, /*  17 */ 1, /*  18 */ 0, /*  19 */
+  2, /*  20 */ 0, /*  21 */ 1, /*  22 */ 0, /*  23 */ 3, /*  24 */
+  0, /*  25 */ 1, /*  26 */ 0, /*  27 */ 2, /*  28 */ 0, /*  29 */
+  1, /*  30 */ 0, /*  31 */ 5, /*  32 */ 0, /*  33 */ 1, /*  34 */
+  0, /*  35 */ 2, /*  36 */ 0, /*  37 */ 1, /*  38 */ 0, /*  39 */
+  3, /*  40 */ 0, /*  41 */ 1, /*  42 */ 0, /*  43 */ 2, /*  44 */
+  0, /*  45 */ 1, /*  46 */ 0, /*  47 */ 4, /*  48 */ 0, /*  49 */
+  1, /*  50 */ 0, /*  51 */ 2, /*  52 */ 0, /*  53 */ 1, /*  54 */
+  0, /*  55 */ 3, /*  56 */ 0, /*  57 */ 1, /*  58 */ 0, /*  59 */
+  2, /*  60 */ 0, /*  61 */ 1, /*  62 */ 0, /*  63 */ 6, /*  64 */
+  0, /*  65 */ 1, /*  66 */ 0, /*  67 */ 2, /*  68 */ 0, /*  69 */
+  1, /*  70 */ 0, /*  71 */ 3, /*  72 */ 0, /*  73 */ 1, /*  74 */
+  0, /*  75 */ 2, /*  76 */ 0, /*  77 */ 1, /*  78 */ 0, /*  79 */
+  4, /*  80 */ 0, /*  81 */ 1, /*  82 */ 0, /*  83 */ 2, /*  84 */
+  0, /*  85 */ 1, /*  86 */ 0, /*  87 */ 3, /*  88 */ 0, /*  89 */
+  1, /*  90 */ 0, /*  91 */ 2, /*  92 */ 0, /*  93 */ 1, /*  94 */
+  0, /*  95 */ 5, /*  96 */ 0, /*  97 */ 1, /*  98 */ 0, /*  99 */
+  2, /* 100 */ 0, /* 101 */ 1, /* 102 */ 0, /* 103 */ 3, /* 104 */
+  0, /* 105 */ 1, /* 106 */ 0, /* 107 */ 2, /* 108 */ 0, /* 109 */
+  1, /* 110 */ 0, /* 111 */ 4, /* 112 */ 0, /* 113 */ 1, /* 114 */
+  0, /* 115 */ 2, /* 116 */ 0, /* 117 */ 1, /* 118 */ 0, /* 119 */
+  3, /* 120 */ 0, /* 121 */ 1, /* 122 */ 0, /* 123 */ 2, /* 124 */
+  0, /* 125 */ 1, /* 126 */ 0, /* 127 */ 7, /* 128 */ 0, /* 129 */
+  1, /* 130 */ 0, /* 131 */ 2, /* 132 */ 0, /* 133 */ 1, /* 134 */
+  0, /* 135 */ 3, /* 136 */ 0, /* 137 */ 1, /* 138 */ 0, /* 139 */
+  2, /* 140 */ 0, /* 141 */ 1, /* 142 */ 0, /* 143 */ 4, /* 144 */
+  0, /* 145 */ 1, /* 146 */ 0, /* 147 */ 2, /* 148 */ 0, /* 149 */
+  1, /* 150 */ 0, /* 151 */ 3, /* 152 */ 0, /* 153 */ 1, /* 154 */
+  0, /* 155 */ 2, /* 156 */ 0, /* 157 */ 1, /* 158 */ 0, /* 159 */
+  5, /* 160 */ 0, /* 161 */ 1, /* 162 */ 0, /* 163 */ 2, /* 164 */
+  0, /* 165 */ 1, /* 166 */ 0, /* 167 */ 3, /* 168 */ 0, /* 169 */
+  1, /* 170 */ 0, /* 171 */ 2, /* 172 */ 0, /* 173 */ 1, /* 174 */
+  0, /* 175 */ 4, /* 176 */ 0, /* 177 */ 1, /* 178 */ 0, /* 179 */
+  2, /* 180 */ 0, /* 181 */ 1, /* 182 */ 0, /* 183 */ 3, /* 184 */
+  0, /* 185 */ 1, /* 186 */ 0, /* 187 */ 2, /* 188 */ 0, /* 189 */
+  1, /* 190 */ 0, /* 191 */ 6, /* 192 */ 0, /* 193 */ 1, /* 194 */
+  0, /* 195 */ 2, /* 196 */ 0, /* 197 */ 1, /* 198 */ 0, /* 199 */
+  3, /* 200 */ 0, /* 201 */ 1, /* 202 */ 0, /* 203 */ 2, /* 204 */
+  0, /* 205 */ 1, /* 206 */ 0, /* 207 */ 4, /* 208 */ 0, /* 209 */
+  1, /* 210 */ 0, /* 211 */ 2, /* 212 */ 0, /* 213 */ 1, /* 214 */
+  0, /* 215 */ 3, /* 216 */ 0, /* 217 */ 1, /* 218 */ 0, /* 219 */
+  2, /* 220 */ 0, /* 221 */ 1, /* 222 */ 0, /* 223 */ 5, /* 224 */
+  0, /* 225 */ 1, /* 226 */ 0, /* 227 */ 2, /* 228 */ 0, /* 229 */
+  1, /* 230 */ 0, /* 231 */ 3, /* 232 */ 0, /* 233 */ 1, /* 234 */
+  0, /* 235 */ 2, /* 236 */ 0, /* 237 */ 1, /* 238 */ 0, /* 239 */
+  4, /* 240 */ 0, /* 241 */ 1, /* 242 */ 0, /* 243 */ 2, /* 244 */
+  0, /* 245 */ 1, /* 246 */ 0, /* 247 */ 3, /* 248 */ 0, /* 249 */
+  1, /* 250 */ 0, /* 251 */ 2, /* 252 */ 0, /* 253 */ 1, /* 254 */
+  0, /* 255 */
+}; // end _First_one
+
+// Explicitly instantiate them.
+
+template unsigned char std::_Bit_count<false>::_S_bit_count[];
+template unsigned char std::_Bit_count<true>::_S_bit_count[];
+
+template unsigned char std::_First_one<false>::_S_first_one[];
+template unsigned char std::_First_one<true>::_S_first_one[];
 
-  return result;
-}