1 #ifndef Rose_BitFlags_H
2 #define Rose_BitFlags_H
4 #include <rosePublicConfig.h>
5 #include <boost/foreach.hpp>
6 #include <boost/format.hpp>
7 #include <boost/serialization/access.hpp>
8 #include <Sawyer/Assert.h>
9 #include <Sawyer/BitFlags.h>
59 template<
typename E,
typename V =
int64_t>
80 std::string
toString(std::vector<int64_t> constants,
const char*(*stringifier)(int64_t))
const {
82 if (this->
vector() != Vector(0)) {
84 std::vector<Enum> members = this->
split(constants, leftovers );
85 BOOST_FOREACH (Enum member, members) {
86 const char *name = stringifier(member);
87 ASSERT_not_null(name);
88 retval += std::string(retval.empty()?
"":
"|") + name;
90 if (leftovers != Vector(0))
91 retval += retval.empty()?
"":
"|" + (boost::format(
"%lx") % (
unsigned long)leftovers).str();
93 if (
const char* name = stringifier(0)) {
std::vector< Enum > split(std::vector< int64_t > constants, Vector &leftovers) const
Split a vector into the individual enum 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.