SkBitSet: cleanup. Remove unused fn, more general exporter.
Change-Id: I090a20decf30631f2464a820c6a056a81b6cc1a3
Reviewed-on: https://skia-review.googlesource.com/c/163784
Commit-Queue: Hal Canary <halcanary@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
diff --git a/src/utils/SkBitSet.h b/src/utils/SkBitSet.h
index ebbf4ff..dbfc80c 100644
--- a/src/utils/SkBitSet.h
+++ b/src/utils/SkBitSet.h
@@ -10,8 +10,6 @@
#include "SkTemplates.h"
-#include <vector>
-
class SkBitSet {
public:
explicit SkBitSet(int numberOfBits) {
@@ -30,33 +28,22 @@
*chunk |= mask;
}
- template<typename T>
- void setAll(T* array, int len) {
- static_assert(std::is_integral<T>::value, "T is integral");
- for (int i = 0; i < len; ++i) {
- this->set(static_cast<int>(array[i]));
- }
- }
-
bool has(int index) const {
const uint32_t* chunk = this->internalGet(index);
uint32_t mask = 1 << (index & 31);
return chunk && SkToBool(*chunk & mask);
}
- /** Export indices of set bits to T array. */
- template<typename T>
- void exportTo(std::vector<T>* array) const {
- static_assert(std::is_integral<T>::value, "T is integral");
- SkASSERT(array);
- uint32_t* data = reinterpret_cast<uint32_t*>(fBitData.get());
- for (unsigned int i = 0; i < fDwordCount; ++i) {
- uint32_t value = data[i];
- if (value) { // There are set bits
- unsigned int index = i * 32;
- for (unsigned int j = 0; j < 32; ++j) {
+ // Calls f(unsigned) for each set value.
+ template<typename FN>
+ void getSetValues(FN f) const {
+ const uint32_t* data = fBitData.get();
+ for (unsigned i = 0; i < fDwordCount; ++i) {
+ if (uint32_t value = data[i]) { // There are set bits
+ unsigned index = i * 32;
+ for (unsigned j = 0; j < 32; ++j) {
if (0x1 & (value >> j)) {
- array->push_back(index + j);
+ f(index | j);
}
}
}