| Last change
 on this file since 9fad45 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 ***************/ | 
|---|
| 20 | template <class C> | 
|---|
| 21 | struct 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; | 
|---|
| 48 | private: | 
|---|
| 49 | unsigned int max; | 
|---|
| 50 | }; | 
|---|
| 51 |  | 
|---|
| 52 | /***** A counter to generate sequential numbers *******************/ | 
|---|
| 53 | struct counter{ | 
|---|
| 54 | inline counter() : count(0){}; | 
|---|
| 55 | inline counter(int i) : count(i){}; | 
|---|
| 56 | inline unsigned int operator()(){ | 
|---|
| 57 | return count++; | 
|---|
| 58 | } | 
|---|
| 59 | private: | 
|---|
| 60 | unsigned int count; | 
|---|
| 61 | }; | 
|---|
| 62 |  | 
|---|
| 63 | template <class C,class ForwardIterator> | 
|---|
| 64 | enumeration<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.