| Index: icu51/source/common/unicode/enumset.h
|
| ===================================================================
|
| --- icu51/source/common/unicode/enumset.h (revision 0)
|
| +++ icu51/source/common/unicode/enumset.h (revision 0)
|
| @@ -0,0 +1,61 @@
|
| +/*
|
| +******************************************************************************
|
| +*
|
| +* Copyright (C) 2012, International Business Machines
|
| +* Corporation and others. All Rights Reserved.
|
| +*
|
| +******************************************************************************
|
| +*/
|
| +
|
| +/**
|
| + * \file
|
| + * \brief C++: internal template EnumSet<>
|
| + */
|
| +
|
| +#ifndef ENUMSET_H
|
| +#define ENUMSET_H
|
| +
|
| +#include "unicode/utypes.h"
|
| +
|
| +#if U_SHOW_CPLUSPLUS_API
|
| +
|
| +U_NAMESPACE_BEGIN
|
| +
|
| +/**
|
| + * enum bitset for boolean fields. Similar to Java EnumSet<>.
|
| + * Needs to range check.
|
| + * @internal
|
| + */
|
| +template<typename T, uint32_t minValue, uint32_t limitValue>
|
| +class EnumSet {
|
| +public:
|
| + inline EnumSet() : fBools(0) {}
|
| + inline EnumSet(const EnumSet<T,minValue,limitValue>& other) : fBools(other.fBools) {}
|
| + inline ~EnumSet() {}
|
| + inline void clear() { fBools=0; }
|
| + inline void add(T toAdd) { set(toAdd, 1); }
|
| + inline void remove(T toRemove) { set(toRemove, 0); }
|
| + inline int32_t contains(T toCheck) const { return get(toCheck); }
|
| + inline void set(T toSet, int32_t v) { fBools=(fBools&(~flag(toSet)))|(v?(flag(toSet)):0); }
|
| + inline int32_t get(T toCheck) const { return (fBools & flag(toCheck))?1:0; }
|
| + inline UBool isValidEnum(T toCheck) const { return (toCheck>=minValue&&toCheck<limitValue); }
|
| + inline UBool isValidValue(int32_t v) const { return (v==0||v==1); }
|
| + inline const EnumSet<T,minValue,limitValue>& operator=(const EnumSet<T,minValue,limitValue>& other) {
|
| + fBools = other.fBools;
|
| + return *this;
|
| + }
|
| +
|
| + inline uint32_t getAll() const {
|
| + return fBools;
|
| + }
|
| +
|
| +private:
|
| + inline uint32_t flag(T toCheck) const { return (1<<(toCheck-minValue)); }
|
| +private:
|
| + uint32_t fBools;
|
| +};
|
| +
|
| +U_NAMESPACE_END
|
| +
|
| +#endif /* U_SHOW_CPLUSPLUS_API */
|
| +#endif /* ENUMSET_H */
|
|
|
| Property changes on: icu51/source/common/unicode/enumset.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|