| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 2011 Apple Inc. All rights reserved. | 2  * Copyright (C) 2011 Apple Inc. All rights reserved. | 
| 3  * | 3  * | 
| 4  * Redistribution and use in source and binary forms, with or without | 4  * Redistribution and use in source and binary forms, with or without | 
| 5  * modification, are permitted provided that the following conditions | 5  * modification, are permitted provided that the following conditions | 
| 6  * are met: | 6  * are met: | 
| 7  * 1. Redistributions of source code must retain the above copyright | 7  * 1. Redistributions of source code must retain the above copyright | 
| 8  *    notice, this list of conditions and the following disclaimer. | 8  *    notice, this list of conditions and the following disclaimer. | 
| 9  * 2. Redistributions in binary form must reproduce the above copyright | 9  * 2. Redistributions in binary form must reproduce the above copyright | 
| 10  *    notice, this list of conditions and the following disclaimer in the | 10  *    notice, this list of conditions and the following disclaimer in the | 
| 11  *    documentation and/or other materials provided with the distribution. | 11  *    documentation and/or other materials provided with the distribution. | 
| 12  * | 12  * | 
| 13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY | 13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY | 
| 14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 
| 16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR | 16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR | 
| 17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 
| 18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 
| 19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 
| 20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | 20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | 
| 21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
| 22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
| 23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| 24  */ | 24  */ | 
| 25 | 25 | 
| 26 #ifndef BitVector_h | 26 #ifndef BitVector_h | 
| 27 #define BitVector_h | 27 #define BitVector_h | 
| 28 | 28 | 
| 29 #include <stdio.h> | 29 #include <stdio.h> | 
| 30 #include <wtf/Assertions.h> | 30 #include "wtf/Assertions.h" | 
| 31 #include <wtf/PrintStream.h> | 31 #include "wtf/PrintStream.h" | 
| 32 #include <wtf/StdLibExtras.h> | 32 #include "wtf/StdLibExtras.h" | 
|  | 33 #include "wtf/WTFExport.h" | 
| 33 | 34 | 
| 34 namespace WTF { | 35 namespace WTF { | 
| 35 | 36 | 
| 36 // This is a space-efficient, resizeable bitvector class. In the common case it | 37 // This is a space-efficient, resizeable bitvector class. In the common case it | 
| 37 // occupies one word, but if necessary, it will inflate this one word to point | 38 // occupies one word, but if necessary, it will inflate this one word to point | 
| 38 // to a single chunk of out-of-line allocated storage to store an arbitrary numb
     er | 39 // to a single chunk of out-of-line allocated storage to store an arbitrary numb
     er | 
| 39 // of bits. | 40 // of bits. | 
| 40 // | 41 // | 
| 41 // - The bitvector remembers the bound of how many bits can be stored, but this | 42 // - The bitvector remembers the bound of how many bits can be stored, but this | 
| 42 //   may be slightly greater (by as much as some platform-specific constant) | 43 //   may be slightly greater (by as much as some platform-specific constant) | 
| 43 //   than the last argument passed to ensureSize(). | 44 //   than the last argument passed to ensureSize(). | 
| 44 // | 45 // | 
| 45 // - The bitvector can resize itself automatically (set, clear, get) or can be u
     sed | 46 // - The bitvector can resize itself automatically (set, clear, get) or can be u
     sed | 
| 46 //   in a manual mode, which is faster (quickSet, quickClear, quickGet, ensureSi
     ze). | 47 //   in a manual mode, which is faster (quickSet, quickClear, quickGet, ensureSi
     ze). | 
| 47 // | 48 // | 
| 48 // - Accesses ASSERT that you are within bounds. | 49 // - Accesses ASSERT that you are within bounds. | 
| 49 // | 50 // | 
| 50 // - Bits are automatically initialized to zero. | 51 // - Bits are automatically initialized to zero. | 
| 51 // | 52 // | 
| 52 // On the other hand, this BitVector class may not be the fastest around, since | 53 // On the other hand, this BitVector class may not be the fastest around, since | 
| 53 // it does conditionals on every get/set/clear. But it is great if you need to | 54 // it does conditionals on every get/set/clear. But it is great if you need to | 
| 54 // juggle a lot of variable-length BitVectors and you're worried about wasting | 55 // juggle a lot of variable-length BitVectors and you're worried about wasting | 
| 55 // space. | 56 // space. | 
| 56 | 57 | 
| 57 class BitVector { | 58 class WTF_EXPORT BitVector { | 
| 58 public: | 59 public: | 
| 59     BitVector() | 60     BitVector() | 
| 60         : m_bitsOrPointer(makeInlineBits(0)) | 61         : m_bitsOrPointer(makeInlineBits(0)) | 
| 61     { | 62     { | 
| 62     } | 63     } | 
| 63 | 64 | 
| 64     explicit BitVector(size_t numBits) | 65     explicit BitVector(size_t numBits) | 
| 65         : m_bitsOrPointer(makeInlineBits(0)) | 66         : m_bitsOrPointer(makeInlineBits(0)) | 
| 66     { | 67     { | 
| 67         ensureSize(numBits); | 68         ensureSize(numBits); | 
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 236     } | 237     } | 
| 237 | 238 | 
| 238     uintptr_t m_bitsOrPointer; | 239     uintptr_t m_bitsOrPointer; | 
| 239 }; | 240 }; | 
| 240 | 241 | 
| 241 } // namespace WTF | 242 } // namespace WTF | 
| 242 | 243 | 
| 243 using WTF::BitVector; | 244 using WTF::BitVector; | 
| 244 | 245 | 
| 245 #endif // BitVector_h | 246 #endif // BitVector_h | 
| OLD | NEW | 
|---|