COIN-OR::LEMON - Graph Library

Changeset 372:7b6466ed488a in lemon-1.2 for lemon/hypercube_graph.h


Ignore:
Timestamp:
11/07/08 14:04:54 (11 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

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.