DISPLACE  1.0
A spatial model of fisheries to help sustainable fishing and maritime spatial planning
options.h
Go to the documentation of this file.
1 /* --------------------------------------------------------------------------
2  * DISPLACE: DYNAMIC INDIVIDUAL VESSEL-BASED SPATIAL PLANNING
3  * AND EFFORT DISPLACEMENT
4  * Copyright (c) 2012, 2013, 2014, 2015 Francois Bastardie <fba@aqua.dtu.dk>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19  * --------------------------------------------------------------------------
20  */
21 #ifndef OPTIONS_H
22 #define OPTIONS_H
23 
24 #include <map>
25 #include <string>
26 #include <vector>
27 
28 #include <commons_global.h>
29 
30 template <typename OPT, int N, typename TYPE>
31 class Option
32 {
33 public:
34  Option() {}
35 
36  void setOption (OPT option, TYPE value) {
38  }
39 
40  void setOption (std::string option, TYPE value) {
41  Iterator it = mMap.find(option);
42  if (it != mMap.end())
43  setOption(it->second, value);
44  }
45 
46  constexpr int n() const { return N; }
47 
48  const TYPE &option(OPT option) const {
49  return mOptions[option];
50  }
51 
52  template <typename _CTYPE = TYPE>
53  typename std::enable_if<std::is_same<_CTYPE, bool>::value, std::string>::type
54  toString() const {
55  std::string ret;
56  ConstIterator it = mMap.begin();
57  while (it != mMap.end()) {
58  if (option(it->second)) {
59  ret += it->first;
60  ret += " ";
61  }
62  ++it;
63  }
64 
65  return ret;
66  }
67 
68  friend bool operator == (const Option<OPT,N,TYPE> &o1, const Option<OPT,N,TYPE> &o2) {
69  for (int i = 0; i < N; ++i) {
70  if (o1.mOptions[i] != o2.mOptions[i])
71  return false;
72  }
73  return true;
74  }
75 
76 protected:
77  TYPE mOptions[N];
78  typedef std::map<std::string, OPT> Map;
79  typedef typename Map::iterator Iterator;
80  typedef typename Map::const_iterator ConstIterator;
82 };
83 
84 namespace Options {
85 
86 enum Dyn_Alloc {
116 
118 };
119 
120 enum Pop_Sce {
139 
141 };
142 
145 
147 };
148 
149 } // namespace
150 
151 class COMMONSSHARED_EXPORT DynAllocOptions : public Option<Options::Dyn_Alloc, Options::Dyn_Alloc_last, bool>
152 {
153 public:
154  DynAllocOptions();
155 };
156 
157 class COMMONSSHARED_EXPORT PopSceOptions : public Option<Options::Pop_Sce, Options::Pop_Sce_last, bool>
158 {
159 public:
160  PopSceOptions();
161 };
162 
163 class COMMONSSHARED_EXPORT ClosureOptions : public Option<Options::Closure_Opt, Options::Closure_Opt_last, std::vector<int>> {
164  std::vector<bool> mBannedMetiers;
165 public:
166  void update();
167 
168  bool isMetierBanned(int metier) const {
169  if (metier < (int)mBannedMetiers.size())
170  return mBannedMetiers[metier];
171  return false;
172  }
173 };
174 
175 #endif // OPTIONS_H
Definition: options.h:144
Definition: options.h:128
Definition: options.h:94
void setOption(OPT option, TYPE value)
Definition: options.h:36
Definition: options.h:151
Definition: options.h:97
std::enable_if< std::is_same< _CTYPE, bool >::value, std::string >::type toString() const
Definition: options.h:54
Definition: options.h:122
Definition: options.h:121
Definition: options.h:103
Definition: options.h:136
Definition: options.h:96
Map mMap
Definition: options.h:81
Definition: options.h:84
Definition: options.h:107
Definition: options.h:124
Definition: options.h:130
std::map< std::string, OPT > Map
Definition: options.h:78
Definition: options.h:90
Definition: options.h:131
Definition: options.h:138
Definition: options.h:163
Definition: options.h:114
Definition: options.h:106
Definition: options.h:99
friend bool operator==(const Option< OPT, N, TYPE > &o1, const Option< OPT, N, TYPE > &o2)
Definition: options.h:68
Definition: options.h:126
void setOption(std::string option, TYPE value)
Definition: options.h:40
Pop_Sce
Definition: options.h:120
Definition: options.h:104
Definition: options.h:135
Definition: options.h:100
Closure_Opt
Definition: options.h:143
Option()
Definition: options.h:34
Definition: options.h:140
Definition: options.h:115
Definition: options.h:132
Definition: options.h:98
Definition: options.h:112
Definition: options.h:123
Definition: options.h:133
Map::const_iterator ConstIterator
Definition: options.h:80
Map::iterator Iterator
Definition: options.h:79
Definition: options.h:87
std::pair< box, unsigned > value
Definition: diffusion.cpp:30
Definition: options.h:89
TYPE mOptions[N]
Definition: options.h:77
Definition: options.h:105
Definition: options.h:31
Definition: options.h:157
Definition: options.h:91
Definition: options.h:125
Definition: options.h:111
Definition: options.h:146
Definition: options.h:93
Definition: options.h:110
constexpr int n() const
Definition: options.h:46
bool isMetierBanned(int metier) const
Definition: options.h:168
Definition: options.h:117
Definition: options.h:109
const TYPE & option(OPT option) const
Definition: options.h:48
Definition: options.h:102
Definition: options.h:113
Definition: options.h:108
Definition: options.h:137
Definition: options.h:101
Dyn_Alloc
Definition: options.h:86
Definition: options.h:95
#define COMMONSSHARED_EXPORT
Definition: commons_global.h:23
Definition: options.h:129