Skip to content
Snippets Groups Projects
Commit 7fdf5710 authored by Uwe Schulzweida's avatar Uwe Schulzweida
Browse files

set_query_parameter: parse key=levidx

parent bfd04761
No related branches found
No related tags found
1 merge request!355M214003/develop
Pipeline #103593 passed
Subproject commit 12a7893cbae4aa7b33a6d67d2d683fb1204f0208
Subproject commit 2c786cad0d08c0dfcf59c4cd79bc19f9c2ffe089
......@@ -46,6 +46,27 @@ decode_cell_parameter(std::string const &param)
return cells;
}
static std::vector<int>
decode_levidx_parameter(std::string const &param)
{
const std::string separator("/to/");
std::vector<int> levidx;
auto n = param.find(separator);
if (n == std::string::npos) { levidx.push_back(parameter_to_int(param)); }
else
{
auto v1 = parameter_to_int(param.substr(0, n));
auto v2 = parameter_to_int(param.substr(n + separator.size()));
if (v2 < v1) cdo_abort("Second parameter %zu muss be greater than first parameter %zu!", v2, v1);
levidx.push_back(v1);
auto numVals = (v2 - v1 + 1);
if (numVals > 1) levidx.push_back(numVals);
}
return levidx;
}
std::string
set_query_parameter(const KVList &kvlist, CdiQuery *query)
{
......@@ -57,14 +78,10 @@ set_query_parameter(const KVList &kvlist, CdiQuery *query)
int numValues = kv.nvalues;
if (numValues < 1) cdo_abort("Missing value for parameter key >%s<!", key);
// clang-format off
if (key == "name")
{
std::vector<char*> queryNames(numValues);
for (int i = 0; i < numValues; ++i)
{
queryNames[i] = (char*)kv.values[i].c_str();
}
std::vector<char *> queryNames(numValues);
for (int i = 0; i < numValues; ++i) { queryNames[i] = (char *) kv.values[i].c_str(); }
cdiQuerySetNames(query, queryNames.size(), queryNames.data());
}
else if (key == "step")
......@@ -85,13 +102,18 @@ set_query_parameter(const KVList &kvlist, CdiQuery *query)
auto queryCells = decode_cell_parameter(kv.values[0]);
cdiQuerySetCellidx(query, queryCells.size(), queryCells.data());
}
else if (key == "levidx")
{
if (numValues > 1) cdo_abort("Too many values for key=levidx (maxvalues=1 or range=start/to/end)");
auto queryCells = decode_levidx_parameter(kv.values[0]);
cdiQuerySetLevidx(query, queryCells.size(), queryCells.data());
}
else if (key == "path")
{
path = kv.values[0];
for (int i = 1; i < numValues; ++i) path += "," + kv.values[i];
for (int i = 1; i < numValues; ++i) { path += "," + kv.values[i]; }
}
else cdo_abort("Invalid parameter key >%s<!", key);
// clang-format on
else { cdo_abort("Invalid parameter key >%s<!", key); }
}
return path;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment