UDQActive.hpp
Go to the documentation of this file.
1/*
2 Copyright 2019 Equinor ASA.
3
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM 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 3 of the License, or
9 (at your option) any later version.
10
11 OPM 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
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18*/
19
20
21#ifndef UDQ_USAGE_HPP
22#define UDQ_USAGE_HPP
23
24#include <cstdlib>
25#include <string>
26#include <vector>
27#include <unordered_map>
28
30
31namespace Opm {
32
33class UDAValue;
34class UDQConfig;
35class UDQActive {
36public:
37
38 class Record{
39 public:
41 input_index(0),
43 uad_code(0),
44 use_count(1)
45 {}
46
47 Record(const std::string& udq_arg, std::size_t input_index_arg, std::size_t use_index_arg, const std::string& wgname_arg, UDAControl control_arg) :
48 udq(udq_arg),
49 input_index(input_index_arg),
50 use_index(use_index_arg),
51 wgname(wgname_arg),
52 control(control_arg),
53 uad_code(UDQ::uadCode(control_arg)),
54 use_count(1)
55 {}
56
57 bool operator==(const Record& other) const {
58 if ((this->udq == other.udq) &&
59 (this->input_index == other.input_index) &&
60 (this->use_index == other.use_index) &&
61 (this->wgname == other.wgname) &&
62 (this->control == other.control) &&
63 (this->uad_code == other.uad_code) &&
64 (this->use_count == other.use_count))
65 return true;
66 return false;
67 }
68
69 bool operator!=(const Record& other) const {
70 return !(*this == other);
71 }
72
73 template<class Serializer>
74 void serializeOp(Serializer& serializer)
75 {
76 serializer(udq);
77 serializer(input_index);
78 serializer(use_index);
79 serializer(wgname);
80 serializer(control);
81 serializer(uad_code);
82 serializer(use_count);
83 }
84
86 std::size_t input_index;
87 std::size_t use_index = 0;
91 std::size_t use_count;
92 };
93
95 public:
97 input_index(0),
99 {}
100
101 InputRecord(std::size_t input_index_arg, const std::string& udq_arg, const std::string& wgname_arg, UDAControl control_arg) :
102 input_index(input_index_arg),
103 udq(udq_arg),
104 wgname(wgname_arg),
105 control(control_arg)
106 {}
107
108 bool operator==(const InputRecord& other) const {
109 return this->input_index == other.input_index &&
110 this->udq == other.udq &&
111 this->wgname == other.wgname &&
112 this->control == other.control;
113 }
114
115 template<class Serializer>
116 void serializeOp(Serializer& serializer)
117 {
118 serializer(input_index);
119 serializer(udq);
120 serializer(wgname);
121 serializer(control);
122 }
123
124 std::size_t input_index;
128 };
129
131
132 int update(const UDQConfig& udq_config, const UDAValue& uda, const std::string& wgname, UDAControl control);
133 std::size_t IUAD_size() const;
134 std::size_t IUAP_size() const;
135 explicit operator bool() const;
136 Record operator[](std::size_t index) const;
137 const std::vector<Record>& get_iuad() const;
138 std::vector<InputRecord> get_iuap() const;
139
140 bool operator==(const UDQActive& data) const;
141
142 template<class Serializer>
143 void serializeOp(Serializer& serializer)
144 {
145 serializer.vector(input_data);
146 serializer.vector(output_data);
147 serializer(udq_keys);
148 serializer(wg_keys);
149 }
150
151private:
152 std::string udq_hash(const std::string& udq, UDAControl control);
153 std::string wg_hash(const std::string& wgname, UDAControl control);
154 int add(const UDQConfig& udq_config, const std::string& udq, const std::string& wgname, UDAControl control);
155 int update_input(const UDQConfig& udq_config, const UDAValue& uda, const std::string& wgname, UDAControl control);
156 int drop(const std::string& wgname, UDAControl control);
157
158 std::vector<InputRecord> input_data;
159 std::vector<Record> mutable output_data;
160 std::unordered_map<std::string, std::size_t> udq_keys;
161 std::unordered_map<std::string, std::size_t> wg_keys;
162};
163
164}
165
166#endif
int index
Definition: cJSON.h:168
const char *const string
Definition: cJSON.h:170
Definition: Serializer.hpp:38
Definition: UDAValue.hpp:32
Definition: UDQActive.hpp:94
void serializeOp(Serializer &serializer)
Definition: UDQActive.hpp:116
UDAControl control
Definition: UDQActive.hpp:127
std::string wgname
Definition: UDQActive.hpp:126
InputRecord(std::size_t input_index_arg, const std::string &udq_arg, const std::string &wgname_arg, UDAControl control_arg)
Definition: UDQActive.hpp:101
std::string udq
Definition: UDQActive.hpp:125
std::size_t input_index
Definition: UDQActive.hpp:124
InputRecord()
Definition: UDQActive.hpp:96
bool operator==(const InputRecord &other) const
Definition: UDQActive.hpp:108
Definition: UDQActive.hpp:38
std::size_t use_count
Definition: UDQActive.hpp:91
std::string udq
Definition: UDQActive.hpp:85
Record()
Definition: UDQActive.hpp:40
std::string wgname
Definition: UDQActive.hpp:88
Record(const std::string &udq_arg, std::size_t input_index_arg, std::size_t use_index_arg, const std::string &wgname_arg, UDAControl control_arg)
Definition: UDQActive.hpp:47
UDAControl control
Definition: UDQActive.hpp:89
int uad_code
Definition: UDQActive.hpp:90
void serializeOp(Serializer &serializer)
Definition: UDQActive.hpp:74
bool operator!=(const Record &other) const
Definition: UDQActive.hpp:69
std::size_t input_index
Definition: UDQActive.hpp:86
std::size_t use_index
Definition: UDQActive.hpp:87
bool operator==(const Record &other) const
Definition: UDQActive.hpp:57
Definition: UDQActive.hpp:35
static UDQActive serializeObject()
int update(const UDQConfig &udq_config, const UDAValue &uda, const std::string &wgname, UDAControl control)
Record operator[](std::size_t index) const
void serializeOp(Serializer &serializer)
Definition: UDQActive.hpp:143
std::size_t IUAD_size() const
const std::vector< Record > & get_iuad() const
std::vector< InputRecord > get_iuap() const
bool operator==(const UDQActive &data) const
std::size_t IUAP_size() const
Definition: UDQConfig.hpp:41
char bool
Definition: msvc_stdbool.h:17
int uadCode(UDAControl control)
Definition: A.hpp:4
UDAControl
Definition: UDQEnums.hpp:136
static std::string data()
Definition: exprtk.hpp:40022