89{
91 std::string resultString = "success";
92
93 for (auto [key, value] : paramValue.items()) {
94 try {
95
96
97
100 if (srchIdx == 0) {
101
102
103
104
105
107 int vsize =
value.size();
108 if (vsize == 1 || vsize == paramSize) {
109
110
111
112
115 resultString =
"Incorrect JSON type for parameter " +
key;
116 break;
117 }
118
120 break;
121 }
122 else if (paramType == JSON::value_t::array) {
123 int elementSize =
value[0].size();
124 JSON::value_t elementType =
value[0].type();
125 size_t arrayLength =
value.size();
126
127
128
129
130
131
132 if (arrayLength ==
m_numChannelsPerSide && elementType == paramType &&
int(elementSize) == paramSize) {
133
134
135
138 }
139 }
140 else if (int(arrayLength) == paramSize || paramSize == -1) {
141
142
143
145 }
146 else {
148 resultString =
"Invalid value format for array parameter " + paramKey +
" on side " +
m_sideLabels[
side];
149 break;
150 }
151 }
152 else if (paramType == JSON::value_t::object) {
153
154
155
156 }
157 else {
158
159
160
163 resultString =
"Invalid array length for parameter " + paramKey +
" on side " +
m_sideLabels[
side];
164 break;
165 }
166 else {
167
168
169
171 if (!
checkType(value[chan], paramType)) {
173 resultString = "Incorrect JSON type for parameter " + paramKey + "paramType = " +
174 std::to_string((
unsigned int) paramType) +
", value type = " + std::to_string((
unsigned int) value[chan].
type());
175 break;
176 }
177
179 }
180 }
181 }
182 }
183 else {
184
185
187 try {
188 int chanIndex = std::stoi(keyRemainder);
191 resultString =
"Invalid channel specifier in values for parameter " +
key;
192 break;
193 }
194
195 if (!
checkType(value, paramType, paramSize)) {
197 resultString =
"Incorrect JSON type for parameter " +
key;
198 break;
199 }
200
202 }
203 catch(...) {
205 resultString =
"Invalid channel specifier for parameter " +
key;
206 break;
207 }
208 }
209 }
210
211 }
212 }
213 catch (...) {
215 resultString =
"Exception caught while parsing key " +
key;
216 }
217 }
218
219 return {
result, resultString};
220}
size_t size() const
Number of registered mappings.
void setChannelParameter(unsigned int side, unsigned int chanIndex, const std::string &key, T value)
void setPerSideParameter(unsigned int side, std::string key, T value)