LCOV - code coverage report
Current view: top level - intl/icu/source/common/unicode - enumset.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 13 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 16 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // © 2016 and later: Unicode, Inc. and others.
       2             : // License & terms of use: http://www.unicode.org/copyright.html
       3             : /*
       4             : ******************************************************************************
       5             : *
       6             : *   Copyright (C) 2012,2014 International Business Machines
       7             : *   Corporation and others.  All Rights Reserved.
       8             : *
       9             : ******************************************************************************
      10             : */
      11             : 
      12             : /**
      13             :  * \file
      14             :  * \brief C++: internal template EnumSet<>
      15             :  */
      16             : 
      17             : #ifndef ENUMSET_H
      18             : #define ENUMSET_H
      19             : 
      20             : #include "unicode/utypes.h"
      21             : 
      22             : #if U_SHOW_CPLUSPLUS_API
      23             : 
      24             : U_NAMESPACE_BEGIN
      25             : 
      26             : /* Can't use #ifndef U_HIDE_INTERNAL_API for the entire EnumSet class, needed in .h file declarations */
      27             : /**
      28             :  * enum bitset for boolean fields. Similar to Java EnumSet<>. 
      29             :  * Needs to range check. Used for private instance variables.
      30             :  * @internal
      31             :  */
      32             : template<typename T, uint32_t minValue, uint32_t limitValue>
      33             : class EnumSet {
      34             : public:
      35           0 :     inline EnumSet() : fBools(0) {}
      36             :     inline EnumSet(const EnumSet<T,minValue,limitValue>& other) : fBools(other.fBools) {}
      37           0 :     inline ~EnumSet() {}
      38             : #ifndef U_HIDE_INTERNAL_API
      39           0 :     inline void clear() { fBools=0; }
      40             :     inline void add(T toAdd) { set(toAdd, 1); }
      41             :     inline void remove(T toRemove) { set(toRemove, 0); }
      42           0 :     inline int32_t contains(T toCheck) const { return get(toCheck); }
      43           0 :     inline void set(T toSet, int32_t v) { fBools=(fBools&(~flag(toSet)))|(v?(flag(toSet)):0); }
      44           0 :     inline int32_t get(T toCheck) const { return (fBools & flag(toCheck))?1:0; }
      45             :     inline UBool isValidEnum(T toCheck) const {  return (toCheck>=minValue&&toCheck<limitValue); }
      46           0 :     inline UBool isValidValue(int32_t v) const { return (v==0||v==1); }
      47           0 :     inline const EnumSet<T,minValue,limitValue>& operator=(const EnumSet<T,minValue,limitValue>& other) {
      48           0 :         fBools = other.fBools;
      49           0 :         return *this;
      50             :     }
      51             :   
      52           0 :     inline uint32_t getAll() const {
      53           0 :         return fBools; 
      54             :     }
      55             : #endif /* U_HIDE_INTERNAL_API */
      56             : 
      57             : private:
      58           0 :     inline uint32_t flag(T toCheck) const { return (1<<(toCheck-minValue)); }
      59             : private:
      60             :     uint32_t fBools;
      61             : };
      62             : 
      63             : U_NAMESPACE_END
      64             : 
      65             : #endif /* U_SHOW_CPLUSPLUS_API */
      66             : #endif /* ENUMSET_H */

Generated by: LCOV version 1.13