From a77cee01ff6b604cb08bb13e242f546e8eccc26d Mon Sep 17 00:00:00 2001 From: deal Date: Sat, 15 Mar 2003 18:21:01 +0000 Subject: [PATCH] Tighten code a little. Work around a bug in gcc2.95 on solaris that would generate duplicate assembler labels. git-svn-id: https://svn.dealii.org/trunk@7330 0785d39b-7218-0410-832d-ea1e28bc413d --- .../deal.II/source/grid/grid_reordering.cc | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/deal.II/deal.II/source/grid/grid_reordering.cc b/deal.II/deal.II/source/grid/grid_reordering.cc index 457cabec28..980091ded3 100644 --- a/deal.II/deal.II/source/grid/grid_reordering.cc +++ b/deal.II/deal.II/source/grid/grid_reordering.cc @@ -1212,7 +1212,7 @@ namespace internal */ struct Edge { - unsigned int v0, v1; + const unsigned int v0, v1; bool operator < (const Edge &e) const { return ((v0 < e.v0) || ((v0 == e.v0) && (v1 < e.v1))); @@ -1225,15 +1225,11 @@ namespace internal { std::set edges; - for (std::vector >::const_iterator c = cells.begin(); - c != cells.end(); ++c) + std::vector >::const_iterator c = cells.begin(); + for (; c != cells.end(); ++c) { // construct the four edges - const Edge cell_edges[4] = { { c->vertices[0], c->vertices[1] }, - { c->vertices[1], c->vertices[2] }, - { c->vertices[3], c->vertices[2] }, - { c->vertices[0], c->vertices[3] } }; - // and the reverse edges + // in reverse order const Edge reverse_edges[4] = { { c->vertices[1], c->vertices[0] }, { c->vertices[2], c->vertices[1] }, { c->vertices[2], c->vertices[3] }, @@ -1241,14 +1237,27 @@ namespace internal // for each of them, check // whether they are already // in the set - for (unsigned int i=0; i<4; ++i) - if (edges.find (reverse_edges[i]) != edges.end()) - return false; + // + // unroll the loop by hand to + // avoid a nasty compiler error + // in gcc2.95 that generated + // duplicate assembler labels + // otherwise + if ((edges.find (reverse_edges[0]) != edges.end()) || + (edges.find (reverse_edges[1]) != edges.end()) || + (edges.find (reverse_edges[2]) != edges.end()) || + (edges.find (reverse_edges[3]) != edges.end())) + return false; // ok, not. insert them + // in the order in which + // we want them // (std::set eliminates // duplicated by itself) for (unsigned int i=0; i<4; ++i) - edges.insert (cell_edges[i]); + { + const Edge e = { reverse_edges[i].v1, reverse_edges[i].v0 }; + edges.insert (e); + } // then go on with next // cell } -- 2.39.5