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 > class Enum {
6  public:
7  class Iterator {
8  public:
9  Iterator( int value ) : m_value( value ) {}
10 
11  T operator*( void ) const { return T( m_value ); }
12 
13  void operator++( void ) { ++m_value; }
14 
15  bool operator!=( Iterator rhs ) { return m_value != rhs.m_value; }
16 
17  private:
18  int m_value;
19  };
20 };
21 
22 template < typename T, T first, T last > typename Enum< T, first, last >::Iterator begin( Enum< T, first, last > ) {
23  return typename Enum< T, first, last >::Iterator( int( first ) );
24 }
25 
26 template < typename T, T first, T last > typename Enum< T, first, last >::Iterator end( Enum< T, first, last > ) {
27  return typename Enum< T, first, last >::Iterator( int( last ) + 1 );
28 }
Definition: enumclass.h:7
Iterator(int value)
Definition: enumclass.h:9
Enum< T, first, last >::Iterator begin(Enum< T, first, last >)
Definition: enumclass.h:22
int m_value
Definition: enumclass.h:18
bool operator!=(Iterator rhs)
Definition: enumclass.h:15
Enum< T, first, last >::Iterator end(Enum< T, first, last >)
Definition: enumclass.h:26
T operator*(void) const
Definition: enumclass.h:11
void operator++(void)
Definition: enumclass.h:13
Definition: enumclass.h:5