OpenHantek
enumclass.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: GPL-2.0+
2 
3 #pragma once
4 
5 template< typename T, T first, T last >
6 class Enum
7 {
8 public:
9  class Iterator
10  {
11  public:
12  Iterator( int value ) :
13  m_value( value )
14  { }
15 
16  T operator*( void ) const {
17  return T(m_value);
18  }
19 
20  void operator++( void ) {
21  ++m_value;
22  }
23 
24  bool operator!=( Iterator rhs ) {
25  return m_value != rhs.m_value;
26  }
27 
28  private:
29  int m_value;
30  };
31 };
32 
33 template< typename T, T first, T last >
35  return typename Enum<T,first,last>::Iterator( int(first) );
36 }
37 
38 template< typename T, T first, T last >
40  return typename Enum<T,first,last>::Iterator( int(last) + 1 );
41 }
Enum< T, first, last >::Iterator end(Enum< T, first, last >)
Definition: enumclass.h:39
Definition: enumclass.h:9
Iterator(int value)
Definition: enumclass.h:12
int m_value
Definition: enumclass.h:29
bool operator!=(Iterator rhs)
Definition: enumclass.h:24
Enum< T, first, last >::Iterator begin(Enum< T, first, last >)
Definition: enumclass.h:34
T operator*(void) const
Definition: enumclass.h:16
void operator++(void)
Definition: enumclass.h:20
Definition: enumclass.h:6