source: src/CodePatterns/enumeration.hpp@ c1e104

Last change on this file since c1e104 was 9b8fa4, checked in by Frederik Heber <heber@…>, 14 years ago

Huge update of file structure to place installation header files into right folder.

  • The problem ist that we desire use as include "CodePatterns/...". For this to work, especially with the new Observer subfolder structure, it has been necessary to place all header files away from their source files into a distinct folder called CodePatterns. This emulates the later, after make install present structure.
  • essentially all source and header files had to be changed to adapt the include.
  • all Makefile.am's had to be changed.
  • nobase_ ... was removed such that header files are installed flat and not creating their subfolder along the process.
  • We placed Observer into its own convenience library and own folder Observer away from Patterns.

Some other changes:

  • FIX: MemDebug.hpp inclusion has been removed in all stubs.
  • 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.