source: src/Helpers/enumeration.hpp@ 8fe1e2

Last change on this file since 8fe1e2 was 1b1ba8, checked in by Frederik Heber <heber@…>, 15 years ago

BUGFIX: enumeration.hpp needs <map> and <algorithms>.

  • Library version is now 7:3:0, API version is 1.1.3.
  • Property mode set to 100644
File size: 1.4 KB
Line 
1/*
2 * enumerator.hpp
3 *
4 * Created on: Dec 21, 2010
5 * Author: heber
6 */
7
8#ifndef ENUMERATOR_HPP_
9#define ENUMERATOR_HPP_
10
11// include config.h
12#ifdef HAVE_CONFIG_H
13#include <config.h>
14#endif
15
16#include <algorithm>
17#include <map>
18
19/************ struct to contain simple enumerations ***************/
20template <class C>
21struct enumeration{
22 enumeration() : max(0) {}
23 enumeration(unsigned int i) : max(i) {}
24 enumeration(const enumeration &src) :
25 there(src.there),
26 back(src.back),
27 max(src.max)
28 {}
29 enumeration &operator=(const enumeration &src){
30 /* no self-assignment check needed */
31 there = src.there;
32 back = src.back;
33 max = src.max;
34 return *this;
35 }
36 void add(const C &value){
37 if(!there.count(value)){
38 there[value]=max;
39 back[max++]=value;
40 }
41 }
42 unsigned int getMax() const{
43 return max;
44 }
45
46 std::map<C,unsigned int> there;
47 std::map<unsigned int,C> back;
48private:
49 unsigned int max;
50};
51
52/***** A counter to generate sequential numbers *******************/
53struct counter{
54 inline counter() : count(0){};
55 inline counter(int i) : count(i){};
56 inline unsigned int operator()(){
57 return count++;
58 }
59private:
60 unsigned int count;
61};
62
63template <class C,class ForwardIterator>
64enumeration<C> enumerate(ForwardIterator first,ForwardIterator last){
65 enumeration<C> res;
66 std::for_each(first,last,bind1st(mem_fun(&enumeration<C>::add),&res));
67 return res;
68}
69
70#endif /* ENUMERATOR_HPP_ */
Note: See TracBrowser for help on using the repository browser.