Skip to content
Snippets Groups Projects
Commit fa316352 authored by Jö Fahlke's avatar Jö Fahlke
Browse files

[Clang] Fix warning about an unchecked enumerator in switch().

```
/home/joe/Projekte/dune-simd/dune-istl/dune/istl/matrixmarket.hh:706:18: warning: enumeration values 'general' and 'unknown_structure' not handled in switch [-Wswitch]
          switch(mmHeader.structure)
```

- Move the `switch(mmHeader.structure)` out of the loop over the entries and
  and check all structure types there.  This will throw immediately for
  unknown structure types, rather then reading all entries and then throwing.
- Write the `for()` loop in a less unusual format; i.e. don't try and save on
  local integer variables.
parent d330d131
No related branches found
No related tags found
1 merge request!218[Clang] Fix warning about an unchecked enumerator in switch().
Pipeline #
......@@ -705,49 +705,54 @@ namespace Dune
// data structure
std::vector<std::set<IndexData<D> > > rows(matrix.N()*brows);
for(; entries>0; --entries) {
std::size_t row;
IndexData<D> data;
skipComments(file);
file>>row;
--row; // Index was 1 based.
assert(row/bcols<matrix.N());
file>>data;
assert(data.index/bcols<matrix.M());
rows[row].insert(data);
if(row!=data.index){
switch(mmHeader.structure)
{
case symmetric :
{
IndexData<D> data_sym(data);
data_sym.index = row;
rows[data.index].insert(data_sym);
}
break;
case skew_symmetric :
{
IndexData<D> data_sym;
data_sym.number = -data.number;
data_sym.index = row;
rows[data.index].insert(data_sym);
}
break;
case hermitian :
{
IndexData<D> data_sym;
data_sym.number = conj(data.number);
data_sym.index = row;
rows[data.index].insert(data_sym);
}
break;
}
auto readloop = [&] (auto symmetryFixup) {
for(std::size_t i = 0; i < entries; ++i) {
std::size_t row;
IndexData<D> data;
skipComments(file);
file>>row;
--row; // Index was 1 based.
assert(row/bcols<matrix.N());
file>>data;
assert(data.index/bcols<matrix.M());
rows[row].insert(data);
if(row!=data.index)
symmetryFixup(row, data);
}
}
};
if(mmHeader.structure== unknown_structure)
switch(mmHeader.structure)
{
case general:
readloop([](auto...){});
break;
case symmetric :
readloop([&](auto row, auto data) {
IndexData<D> data_sym(data);
data_sym.index = row;
rows[data.index].insert(data_sym);
});
break;
case skew_symmetric :
readloop([&](auto row, auto data) {
IndexData<D> data_sym;
data_sym.number = -data.number;
data_sym.index = row;
rows[data.index].insert(data_sym);
});
break;
case hermitian :
readloop([&](auto row, auto data) {
IndexData<D> data_sym;
data_sym.number = conj(data.number);
data_sym.index = row;
rows[data.index].insert(data_sym);
});
break;
default:
DUNE_THROW(Dune::NotImplemented,
"Only general, symmetric, skew-symmetric and hermitian is supported right now!");
}
// Setup the matrix sparsity pattern
int nnz=0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment