Introduce a poor man's version of STL's bitset.

Used in a separate upcoming patch...
Review URL: http://codereview.chromium.org/7472029

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8715 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent bab9ec0b
......@@ -30,6 +30,7 @@
#include <stdlib.h>
#include <string.h>
#include <climits>
#include "globals.h"
#include "checks.h"
......@@ -885,6 +886,30 @@ class SimpleStringBuilder {
DISALLOW_IMPLICIT_CONSTRUCTORS(SimpleStringBuilder);
};
// A poor man's version of STL's bitset: A bit set of enums E (without explicit
// values), fitting into an integral type T.
template <class E, class T = int>
class EnumSet {
public:
explicit EnumSet(T bits = 0) : bits_(bits) {}
bool IsEmpty() const { return bits_ == 0; }
bool Contains(E element) const { return (bits_ & Mask(element)) != 0; }
void Add(E element) { bits_ |= Mask(element); }
void Remove(E element) { bits_ &= ~Mask(element); }
T ToIntegral() const { return bits_; }
private:
T Mask(E element) const {
// The strange typing in ASSERT is necessary to avoid stupid warnings, see:
// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43680
ASSERT(element < static_cast<int>(sizeof(T) * CHAR_BIT));
return 1 << element;
}
T bits_;
};
} } // namespace v8::internal
#endif // V8_UTILS_H_
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment