COIN-OR::LEMON - Graph Library

Changeset 372:7b6466ed488a in lemon-1.2


Ignore:
Timestamp:
11/07/08 14:04:54 (16 years ago)
Author:
Alpar Juttner <alpar@…>
Branch:
default
Phase:
public
Message:

Avoid bit operator precedence warning with gcc-4.3

Some of these warnings are actually revealed real bugs

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lemon/hypercube_graph.h

    r365 r372  
    5151      _dim = dim;
    5252      _node_num = 1 << dim;
    53       _edge_num = dim * (1 << dim-1);
     53      _edge_num = dim * (1 << (dim-1));
    5454    }
    5555
     
    7777
    7878    Node u(Edge edge) const {
    79       int base = edge._id & ((1 << _dim-1) - 1);
    80       int k = edge._id >> _dim-1;
    81       return ((base >> k) << k+1) | (base & ((1 << k) - 1));
     79      int base = edge._id & ((1 << (_dim-1)) - 1);
     80      int k = edge._id >> (_dim-1);
     81      return ((base >> k) << (k+1)) | (base & ((1 << k) - 1));
    8282    }
    8383
    8484    Node v(Edge edge) const {
    85       int base = edge._id & ((1 << _dim-1) - 1);
    86       int k = edge._id >> _dim-1;
    87       return ((base >> k) << k+1) | (base & ((1 << k) - 1)) | (1 << k);
     85      int base = edge._id & ((1 << (_dim-1)) - 1);
     86      int k = edge._id >> (_dim-1);
     87      return ((base >> k) << (k+1)) | (base & ((1 << k) - 1)) | (1 << k);
    8888    }
    8989
     
    106106      for ( ; (d & 1) == 0; d >>= 1) ++k;
    107107      if (d >> 1 != 0) return INVALID;
    108       return (k << _dim-1) | ((u._id >> k+1) << k) | (u._id & ((1 << k) - 1));
     108      return (k << (_dim-1)) | ((u._id >> (k+1)) << k) |
     109        (u._id & ((1 << k) - 1));
    109110    }
    110111
     
    112113      Edge edge = findEdge(u, v, prev);
    113114      if (edge == INVALID) return INVALID;
    114       int k = edge._id >> _dim-1;
     115      int k = edge._id >> (_dim-1);
    115116      return ((u._id >> k) & 1) == 1 ? edge._id << 1 : (edge._id << 1) | 1;
    116117    }
     
    195196    void nextInc(Edge& edge, bool& dir) const {
    196197      Node n = dir ? u(edge) : v(edge);
    197       int k = (edge._id >> _dim-1) + 1;
     198      int k = (edge._id >> (_dim-1)) + 1;
    198199      if (k < _dim) {
    199         edge._id = (k << _dim-1) |
    200                    ((n._id >> k+1) << k) | (n._id & ((1 << k) - 1));
     200        edge._id = (k << (_dim-1)) |
     201          ((n._id >> (k+1)) << k) | (n._id & ((1 << k) - 1));
    201202        dir = ((n._id >> k) & 1) == 0;
    202203      } else {
     
    214215      int k = (arc._id >> _dim) + 1;
    215216      if (k < _dim) {
    216         arc._id = (k << _dim-1) |
    217                   ((n._id >> k+1) << k) | (n._id & ((1 << k) - 1));
     217        arc._id = (k << (_dim-1)) |
     218          ((n._id >> (k+1)) << k) | (n._id & ((1 << k) - 1));
    218219        arc._id = (arc._id << 1) | (~(n._id >> k) & 1);
    219220      } else {
     
    230231      int k = (arc._id >> _dim) + 1;
    231232      if (k < _dim) {
    232         arc._id = (k << _dim-1) |
    233                   ((n._id >> k+1) << k) | (n._id & ((1 << k) - 1));
     233        arc._id = (k << (_dim-1)) |
     234          ((n._id >> (k+1)) << k) | (n._id & ((1 << k) - 1));
    234235        arc._id = (arc._id << 1) | ((n._id >> k) & 1);
    235236      } else {
     
    255256
    256257    int dimension(Edge edge) const {
    257       return edge._id >> _dim-1;
     258      return edge._id >> (_dim-1);
    258259    }
    259260
  • test/graph_test.cc

    r365 r372  
    322322  HypercubeGraph G(dim);
    323323  checkGraphNodeList(G, 1 << dim);
    324   checkGraphEdgeList(G, dim * (1 << dim-1));
     324  checkGraphEdgeList(G, dim * (1 << (dim-1)));
    325325  checkGraphArcList(G, dim * (1 << dim));
    326326
     
    331331    for (IncEdgeIt e(G, n); e != INVALID; ++e) {
    332332      check( (G.u(e) == n &&
    333               G.id(G.v(e)) == G.id(n) ^ (1 << G.dimension(e))) ||
     333              G.id(G.v(e)) == (G.id(n) ^ (1 << G.dimension(e)))) ||
    334334             (G.v(e) == n &&
    335               G.id(G.u(e)) == G.id(n) ^ (1 << G.dimension(e))),
     335              G.id(G.u(e)) == (G.id(n) ^ (1 << G.dimension(e)))),
    336336             "Wrong edge or wrong dimension");
    337337    }
     
    340340    for (OutArcIt a(G, n); a != INVALID; ++a) {
    341341      check(G.source(a) == n &&
    342             G.id(G.target(a)) == G.id(n) ^ (1 << G.dimension(a)),
     342            G.id(G.target(a)) == (G.id(n) ^ (1 << G.dimension(a))),
    343343            "Wrong arc or wrong dimension");
    344344    }
     
    347347    for (InArcIt a(G, n); a != INVALID; ++a) {
    348348      check(G.target(a) == n &&
    349             G.id(G.source(a)) == G.id(n) ^ (1 << G.dimension(a)),
     349            G.id(G.source(a)) == (G.id(n) ^ (1 << G.dimension(a))),
    350350            "Wrong arc or wrong dimension");
    351351    }
     
    353353
    354354  checkGraphConArcList(G, (1 << dim) * dim);
    355   checkGraphConEdgeList(G, dim * (1 << dim-1));
     355  checkGraphConEdgeList(G, dim * (1 << (dim-1)));
    356356
    357357  checkArcDirections(G);
Note: See TracChangeset for help on using the changeset viewer.