summaryrefslogtreecommitdiffstats
path: root/Source/JavaScriptCore/wtf/Bitmap.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/wtf/Bitmap.h')
-rw-r--r--Source/JavaScriptCore/wtf/Bitmap.h22
1 files changed, 16 insertions, 6 deletions
diff --git a/Source/JavaScriptCore/wtf/Bitmap.h b/Source/JavaScriptCore/wtf/Bitmap.h
index 4dd88f6..b046b61 100644
--- a/Source/JavaScriptCore/wtf/Bitmap.h
+++ b/Source/JavaScriptCore/wtf/Bitmap.h
@@ -21,8 +21,8 @@
#include "FixedArray.h"
#include "StdLibExtras.h"
-
#include <stdint.h>
+#include <string.h>
namespace WTF {
@@ -36,9 +36,10 @@ public:
bool get(size_t) const;
void set(size_t);
+ bool testAndSet(size_t);
+ size_t nextPossiblyUnset(size_t) const;
void clear(size_t);
void clearAll();
- void advanceToNextFreeBit(size_t&) const;
size_t count(size_t = 0) const;
size_t isEmpty() const;
size_t isFull() const;
@@ -76,6 +77,16 @@ inline void Bitmap<size>::set(size_t n)
}
template<size_t size>
+inline bool Bitmap<size>::testAndSet(size_t n)
+{
+ WordType mask = one << (n % wordSize);
+ size_t index = n / wordSize;
+ bool result = bits[index] & mask;
+ bits[index] |= mask;
+ return result;
+}
+
+template<size_t size>
inline void Bitmap<size>::clear(size_t n)
{
bits[n / wordSize] &= ~(one << (n % wordSize));
@@ -88,12 +99,11 @@ inline void Bitmap<size>::clearAll()
}
template<size_t size>
-inline void Bitmap<size>::advanceToNextFreeBit(size_t& start) const
+inline size_t Bitmap<size>::nextPossiblyUnset(size_t start) const
{
if (!~bits[start / wordSize])
- start = ((start / wordSize) + 1) * wordSize;
- else
- ++start;
+ return ((start / wordSize) + 1) * wordSize;
+ return start + 1;
}
template<size_t size>