1 #ifndef ROSE_BitFlags_H
2 #define ROSE_BitFlags_H
4 #include <rosePublicConfig.h>
5 #include <boost/format.hpp>
6 #include <boost/serialization/access.hpp>
7 #include <Sawyer/Assert.h>
8 #include <Sawyer/BitFlags.h>
58 template<
typename E,
typename V =
int64_t>
79 std::string
toString(std::vector<int64_t> constants,
const char*(*stringifier)(int64_t))
const {
81 if (this->
vector() != Vector(0)) {
83 std::vector<Enum> members = this->
split(constants, leftovers );
84 for (Enum member: members) {
85 const char *name = stringifier(member);
86 ASSERT_not_null(name);
87 retval += std::string(retval.empty()?
"":
"|") + name;
89 if (leftovers != Vector(0))
90 retval += retval.empty()?
"":
"|" + (boost::format(
"%lx") % (
unsigned long)leftovers).str();
92 if (
const char* name = stringifier(0)) {
105 makeBitFlags(E enumMember) {
106 return BitFlags<E>(enumMember);
std::vector< Enum > split() const
Split a vector into the individual bits values.
Main namespace for the ROSE library.
Stores a vector of enum bit flags.
Vector vector() const
Current value of the bit vector.
BitFlags(Vector v)
Construct bit vector from value or bit.
Name space for the entire library.
std::string toString(std::vector< int64_t > constants, const char *(*stringifier)(int64_t)) const
Convert to string.
BitFlags()
Default constructor with all bits clear.
Stores a vector of enum bit flags.