source: src/CodePatterns/enumeration.hpp@ 084729c

Action_Thermostats Add_AtomRandomPerturbation Add_RotateAroundBondAction Add_SelectAtomByNameAction Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_StructOpt_integration_tests Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_ChronosMutex Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion GeometryObjects Gui_displays_atomic_force_velocity IndependentFragmentGrids_IntegrationTest JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks RotateToPrincipalAxisSystem_UndoRedo StoppableMakroAction Subpackage_CodePatterns Subpackage_JobMarket Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg ThirdParty_MPQC_rebuilt_buildsystem TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps Ubuntu_1604_changes stable
Last change on this file since 084729c was 084729c, checked in by Frederik Heber <heber@…>, 8 years ago

Squashed 'ThirdParty/CodePatterns/' content from commit c1e1041

git-subtree-dir: ThirdParty/CodePatterns
git-subtree-split: c1e10418c454f98be2f43d93167642b0008428fc

  • 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.