Skip to content

Commit 1a83f9b

Browse files
committed
bring back compatibility with C++98
- make type explicit (remove use of auto) - make iterators in for-loops explicit - use unordered_set only if C++ >= 2011, otherwise use set - include limits if (c)stdint not available - replace nullptr by NULL
1 parent 40b5e5f commit 1a83f9b

13 files changed

+139
-88
lines changed

CoinUtils/src/CoinDynamicConflictGraph.cpp

Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ using namespace std;
1212

1313
CoinDynamicConflictGraph::CoinDynamicConflictGraph ( size_t _size ) :
1414
CoinConflictGraph ( _size ),
15+
#if __cplusplus >= 201103L
1516
nodeConflicts( vector< ConflictSetType >( _size, ConflictSetType( 2048 ) ) ),
17+
#else
18+
nodeConflicts( vector< ConflictSetType >( _size ) ),
19+
#endif
1620
nodeCliques(std::vector< std::vector<size_t> >( _size )),
1721
nDirectConflicts( _size ),
1822
totalCliqueElements( 0 )
@@ -48,7 +52,7 @@ void CoinDynamicConflictGraph::addClique( size_t size, const size_t elements[] )
4852
cliques.push_back( CCCliqueType(elements, elements+size) );
4953

5054
// checking if elements are not sorted
51-
auto &clq = *cliques.rbegin();
55+
CCCliqueType &clq = *cliques.rbegin();
5256
bool sorted = true;
5357
for ( size_t i=0 ; i<clq.size()-1 ; ++i ) {
5458
if (clq[i] > clq[i+1]) {
@@ -69,7 +73,7 @@ bool CoinDynamicConflictGraph::conflicting ( size_t n1, size_t n2 ) const
6973
if ( cIt != nodeConflicts[n1].end() )
7074
return true;
7175

72-
const auto &nodeCliquesN1 = nodeCliques[n1];
76+
const std::vector<size_t> &nodeCliquesN1 = nodeCliques[n1];
7377

7478
if (nodeCliquesN1.size()==0)
7579
return false;
@@ -127,7 +131,16 @@ CoinDynamicConflictGraph::CoinDynamicConflictGraph (
127131
const char* sense,
128132
const double* rowRHS,
129133
const double* rowRange )
130-
: CoinDynamicConflictGraph( numCols*2 )
134+
:
135+
CoinConflictGraph ( numCols*2 ),
136+
#if __cplusplus >= 201103L
137+
nodeConflicts( vector< ConflictSetType >( numCols*2, ConflictSetType( 2048 ) ) ),
138+
#else
139+
nodeConflicts( vector< ConflictSetType >( numCols*2 ) ),
140+
#endif
141+
nodeCliques(std::vector< std::vector<size_t> >( numCols*2 )),
142+
nDirectConflicts( numCols*2 ),
143+
totalCliqueElements( 0 )
131144
{
132145
newBounds_.clear();
133146
const int *idxs = matrixByRow->getIndices();
@@ -453,18 +466,19 @@ void CoinDynamicConflictGraph::recomputeDegree()
453466
nConflicts_ = 0;
454467

455468
for ( size_t i=0 ; (i<size_) ; ++i ) {
456-
const auto &nodeDirConf = nodeConflicts[i];
469+
const ConflictSetType &nodeDirConf = nodeConflicts[i];
457470

458471
modified.clear();
459472

460473
// setting iv for initial ements
461474
modified.insert(modified.end(), nodeDirConf.begin(), nodeDirConf.end());
462475
modified.push_back( i );
463-
for ( const auto &el : modified )
464-
iv[el] = 1;
476+
for ( vector< int >::const_iterator it = modified.begin(); it != modified.end(); ++it )
477+
iv[*it] = 1;
465478

466-
for ( const auto &iclq : nodeCliques[i] ) {
467-
for ( const auto &el : cliques[iclq] ) {
479+
for ( std::vector<size_t>::const_iterator it1 = nodeCliques[i].begin(); it1 != nodeCliques[i].end(); ++it1 ) {
480+
for ( CCCliqueType::const_iterator it2 = cliques[*it1].begin(); it2 != cliques[*it1].end(); ++it2 ) {
481+
size_t el = *it2;
468482
if ( iv[el] == 0 ) {
469483
iv[el] = 1;
470484
modified.push_back(el);
@@ -474,8 +488,8 @@ void CoinDynamicConflictGraph::recomputeDegree()
474488

475489
degree_[i] = modified.size() - 1;
476490

477-
for ( const auto &el : modified )
478-
iv[el] = 0;
491+
for ( vector< int >::const_iterator it = modified.begin(); it != modified.end(); ++it )
492+
iv[*it] = 0;
479493

480494
minDegree_ = min(minDegree_, degree_[i]);
481495
maxDegree_ = max(maxDegree_, degree_[i]);
@@ -538,9 +552,17 @@ std::vector<std::string> CoinDynamicConflictGraph::differences(const CGraph* cgr
538552
#endif
539553

540554
CoinDynamicConflictGraph::CoinDynamicConflictGraph( const CoinStaticConflictGraph *cgraph, const size_t n, const size_t elements[] )
541-
: CoinDynamicConflictGraph( n )
555+
: CoinConflictGraph ( n ),
556+
#if __cplusplus >= 201103L
557+
nodeConflicts( vector< ConflictSetType >( n, ConflictSetType( 2048 ) ) ),
558+
#else
559+
nodeConflicts( vector< ConflictSetType >( n ) ),
560+
#endif
561+
nodeCliques(std::vector< std::vector<size_t> >( n )),
562+
nDirectConflicts( n ),
563+
totalCliqueElements( 0 )
542564
{
543-
const auto NOT_INCLUDED = numeric_limits<size_t>::max();
565+
const size_t NOT_INCLUDED = numeric_limits<size_t>::max();
544566

545567
vector< size_t > newIdx( cgraph->size(), NOT_INCLUDED );
546568

@@ -552,9 +574,9 @@ CoinDynamicConflictGraph::CoinDynamicConflictGraph( const CoinStaticConflictGrap
552574

553575
// direct neighbors in static cgraph
554576
for ( size_t i=0 ; (i<n) ; ++i ) {
555-
const auto nidx = elements[i];
556-
const auto *neighs = cgraph->nodeNeighs( nidx );
557-
const auto nNeighs = cgraph->nConflictsNode[ nidx ];
577+
const size_t nidx = elements[i];
578+
const size_t *neighs = cgraph->nodeNeighs( nidx );
579+
const size_t nNeighs = cgraph->nConflictsNode[ nidx ];
558580

559581
realNeighs.clear();
560582
for ( size_t j=0 ; (j<nNeighs) ; ++j )
@@ -586,12 +608,12 @@ CoinDynamicConflictGraph::CoinDynamicConflictGraph( const CoinStaticConflictGrap
586608

587609
std::pair< size_t, const size_t* > CoinDynamicConflictGraph::conflictingNodes ( size_t node, size_t* temp ) const
588610
{
589-
const auto &nodeCliquesNode = nodeCliques[node];
590-
const auto &nconf = nodeConflicts[node];
611+
const std::vector<size_t> &nodeCliquesNode = nodeCliques[node];
612+
const ConflictSetType &nconf = nodeConflicts[node];
591613
if (nodeCliquesNode.size()==0) {
592614
size_t i=0;
593-
for ( const auto &n : nconf )
594-
temp[i++] = n;
615+
for ( ConflictSetType::const_iterator it = nconf.begin(); it != nconf.begin(); ++it )
616+
temp[i++] = *it;
595617

596618
return pair< size_t, const size_t* >(nconf.size(), temp);
597619
}
@@ -604,16 +626,16 @@ std::pair< size_t, const size_t* > CoinDynamicConflictGraph::conflictingNodes (
604626
for ( vector< size_t >::const_iterator
605627
vit = nodeCliquesNode.begin() ; vit != nodeCliquesNode.end() ; ++ vit )
606628
{
607-
const auto &s = cliques[*vit];
608-
for ( const auto &n : s)
609-
if (n != node)
610-
res.insert(n);
629+
const CCCliqueType &s = cliques[*vit];
630+
for ( CCCliqueType::const_iterator it = s.begin(); it != s.end(); ++it )
631+
if (*it != node)
632+
res.insert(*it);
611633
}
612634

613635
// copying final result
614636
size_t i=0;
615-
for ( const auto &n : res )
616-
temp[i++] = n;
637+
for ( ConflictSetType::const_iterator it = res.begin(); it != res.end(); ++it )
638+
temp[i++] = *it;
617639

618640
return pair< size_t, const size_t* >(res.size(), temp);
619641
}
@@ -623,7 +645,7 @@ std::pair< size_t, const size_t* > CoinDynamicConflictGraph::conflictingNodes (
623645

624646
bool CoinDynamicConflictGraph::elementInClique( size_t idxClique, size_t node ) const
625647
{
626-
const auto &clique = cliques[idxClique];
648+
const CCCliqueType &clique = cliques[idxClique];
627649

628650
return std::binary_search(clique.begin(), clique.end(), node);
629651
}

CoinUtils/src/CoinDynamicConflictGraph.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@ class CoinStaticConflictGraph;
1414

1515
class CoinPackedMatrix;
1616

17+
#if __cplusplus >= 201103L
1718
#include <unordered_set>
1819
typedef std::unordered_set< size_t > ConflictSetType;
20+
#else
21+
#include <set>
22+
typedef std::set< size_t > ConflictSetType;
23+
#endif
1924
typedef std::vector< size_t > CCCliqueType;
2025

2126
/**

CoinUtils/src/CoinStaticConflictGraph.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
#include "CoinDynamicConflictGraph.hpp"
66

7-
87
using namespace std;
98

109
CoinStaticConflictGraph::CoinStaticConflictGraph ( const CoinDynamicConflictGraph *cgraph ) :
@@ -23,12 +22,12 @@ CoinStaticConflictGraph::CoinStaticConflictGraph ( const CoinDynamicConflictGrap
2322
// copying direct conflicts
2423
startConfNodes[0] = 0;
2524
for ( size_t i=0 ; (i<size()) ; ++i ) {
26-
const auto &s = cgraph->nodeConflicts[i];
25+
const ConflictSetType& s = cgraph->nodeConflicts[i];
2726
startConfNodes[i+1] = startConfNodes[i] + (size_t)s.size();
2827
nConflictsNode[i] = (size_t) s.size();
2928

3029
size_t iconf = startConfNodes[i];
31-
for ( auto sit = s.begin() ; ( sit != s.end() ) ; ++sit, ++iconf ) {
30+
for ( ConflictSetType::const_iterator sit = s.begin() ; sit != s.end() ; ++sit, ++iconf ) {
3231
conflicts[iconf] = *sit;
3332
} // copying node direct conflicts
3433
} // all nodes
@@ -37,12 +36,12 @@ CoinStaticConflictGraph::CoinStaticConflictGraph ( const CoinDynamicConflictGrap
3736
startClique[0] = 0;
3837
for ( size_t ic=0 ; ( ic<(size_t)cgraph->cliques.size() ) ; ++ic )
3938
{
40-
const auto &clique = cgraph->cliques[ic];
39+
const CCCliqueType& clique = cgraph->cliques[ic];
4140
cliqueSize[ic] = (size_t)clique.size();
4241
startClique[ic+1] = startClique[ic] + cliqueSize[ic];
4342
size_t pc = startClique[ic];
4443
// copying clique contents
45-
for ( auto cit = clique.begin() ; ( cit != clique.end() ) ; ++cit, ++pc ) {
44+
for ( CCCliqueType::const_iterator cit = clique.begin() ; ( cit != clique.end() ) ; ++cit, ++pc ) {
4645
cliques[pc] = *cit;
4746
++nNodeCliques[*cit];
4847
}
@@ -87,10 +86,10 @@ CoinStaticConflictGraph::CoinStaticConflictGraph ( const CoinStaticConflictGraph
8786
* Constructor that creates a subgraph
8887
* induced by a set of nodes
8988
*/
90-
CoinStaticConflictGraph::CoinStaticConflictGraph( const CoinStaticConflictGraph *cgraph, size_t n, const size_t elements[] )
91-
: CoinStaticConflictGraph( CoinDynamicConflictGraph(cgraph, n, elements) )
92-
{
93-
}
89+
//CoinStaticConflictGraph::CoinStaticConflictGraph( const CoinStaticConflictGraph *cgraph, size_t n, const size_t elements[] )
90+
// : CoinStaticConflictGraph( CoinDynamicConflictGraph(cgraph, n, elements) )
91+
//{
92+
//}
9493

9594
#include <set>
9695

@@ -167,11 +166,10 @@ const size_t *CoinStaticConflictGraph::nodeNeighs(size_t node) const
167166
return &conflicts[ startConfNodes[node] ];
168167
}
169168

170-
CoinStaticConflictGraph::CoinStaticConflictGraph( const CoinDynamicConflictGraph &cgraph )
171-
: CoinStaticConflictGraph( &cgraph )
172-
{
173-
174-
}
169+
//CoinStaticConflictGraph::CoinStaticConflictGraph( const CoinDynamicConflictGraph &cgraph )
170+
// : CoinStaticConflictGraph( &cgraph )
171+
//{
172+
//}
175173

176174

177175

CoinUtils/src/CoinStaticConflictGraph.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class CoinStaticConflictGraph : public CoinConflictGraph
2222
/**
2323
* Default constructor
2424
*/
25-
CoinStaticConflictGraph ( const CoinDynamicConflictGraph &cgraph );
25+
//CoinStaticConflictGraph ( const CoinDynamicConflictGraph &cgraph );
2626

2727
/**
2828
* Copy constructor
@@ -33,7 +33,7 @@ class CoinStaticConflictGraph : public CoinConflictGraph
3333
* Constructor that creates a subgraph
3434
* induced by a set of nodes
3535
*/
36-
CoinStaticConflictGraph ( const CoinStaticConflictGraph *cgraph, size_t n, const size_t elements[] );
36+
//CoinStaticConflictGraph ( const CoinStaticConflictGraph *cgraph, size_t n, const size_t elements[] );
3737

3838
/**
3939
* Checks if two nodes conflict

CoinUtils/src/bron_kerbosch.cpp

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ ArrayOfVertices* array_of_vertices_create(size_t size) {
6565
void array_of_vertices_free(ArrayOfVertices *av) {
6666
delete[] av->vertices;
6767
delete av;
68-
av = nullptr;
68+
av = NULL;
6969
}
7070

7171
ListOfVertices* list_of_vertices_create() {
@@ -76,7 +76,7 @@ ListOfVertices* list_of_vertices_create() {
7676

7777
void list_of_vertices_free(ListOfVertices* lv) {
7878
delete lv;
79-
lv = nullptr;
79+
lv = NULL;
8080
}
8181

8282
BronKerbosch* bk_create(const CGraph *cgraph) {
@@ -88,9 +88,9 @@ BronKerbosch* bk_create(const CGraph *cgraph) {
8888
size_t *neighs = new size_t[cgSize];
8989

9090
bk->vertices.reserve(cgSize);
91-
bk->bit = nullptr;
92-
bk->mask = nullptr;
93-
bk->clqSet = nullptr;
91+
bk->bit = NULL;
92+
bk->mask = NULL;
93+
bk->clqSet = NULL;
9494

9595
for(size_t i = 0; i < cgSize; i++) {
9696
size_t realDegree = cgraph_degree(cgraph, i);
@@ -174,16 +174,16 @@ void bk_free(BronKerbosch **_bk) {
174174
}
175175

176176
delete bk;
177-
*_bk = nullptr;
177+
*_bk = NULL;
178178
}
179179

180180
std::vector<size_t> exclude_neighbors_u(const BronKerbosch *bk, const ListOfVertices *P, size_t u) {
181181
std::vector<size_t> P_excluding_N_u;
182182
P_excluding_N_u.reserve(bk->nVertices);
183183

184-
for(const size_t &vertex : P->vertices) {
185-
if(!cgraph_conflicting_nodes(bk->cgraph, bk->vertices[u].id, bk->vertices[vertex].id)) {
186-
P_excluding_N_u.push_back(vertex);
184+
for(std::list<size_t>::const_iterator it = P->vertices.begin(); it != P->vertices.end(); ++it ) {
185+
if(!cgraph_conflicting_nodes(bk->cgraph, bk->vertices[u].id, bk->vertices[*it].id)) {
186+
P_excluding_N_u.push_back(*it);
187187
}
188188
}
189189

@@ -271,10 +271,10 @@ ListOfVertices* create_new_P(const BronKerbosch *bk, const ListOfVertices *P, co
271271
ListOfVertices *newP = list_of_vertices_create();
272272

273273
//newP = P intersection N(v)
274-
for(const size_t &vertex : P->vertices) {
275-
if(cgraph_conflicting_nodes(bk->cgraph, bk->vertices[v].id, bk->vertices[vertex].id)) {
276-
newP->vertices.push_back(vertex);
277-
newP->totalWeight += bk->vertices[vertex].weight;
274+
for(std::list<size_t>::const_iterator it = P->vertices.begin(); it != P->vertices.end(); ++it ) {
275+
if(cgraph_conflicting_nodes(bk->cgraph, bk->vertices[v].id, bk->vertices[*it].id)) {
276+
newP->vertices.push_back(*it);
277+
newP->totalWeight += bk->vertices[*it].weight;
278278
}
279279
}
280280

@@ -304,7 +304,8 @@ void bron_kerbosch_algorithm(BronKerbosch *bk, const ArrayOfVertices *C, ListOfV
304304
const size_t u = *(P->vertices.begin());
305305
const std::vector<size_t> &P_excluding_N_u = exclude_neighbors_u(bk, P, u);
306306

307-
for(const size_t &v : P_excluding_N_u) {
307+
for(std::vector<size_t>::const_iterator it = P_excluding_N_u.begin(); it != P_excluding_N_u.end(); ++it ) {
308+
size_t v = *it;
308309
ArrayOfVertices *newC = create_new_C(bk, C, v);
309310
ArrayOfVertices *newS = create_new_S(bk, S, v);
310311
ListOfVertices *newP = create_new_P(bk, P, v);

CoinUtils/src/cgraph.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@
99
#include "clique.h"
1010
#include "vint_set.h"
1111

12+
#ifdef COINUTILS_HAS_CSTDINT
13+
#include <cstdint>
14+
#elif defined(COINUTILS_HAS_STDINT_H)
15+
#include <stdint.h>
16+
#else
17+
#include <limits>
18+
#endif
19+
1220
#define LINE_SIZE 2048
1321
#define MAX_NAME_SIZE 64
1422

@@ -248,7 +256,8 @@ bool cgraph_conflicting_nodes(const CGraph *cgraph, const size_t i, const size_t
248256
}
249257

250258
FIND_IN_CLIQUES:
251-
for (const size_t idx : cgraph->nodeCliques[i]) {
259+
for (std::vector<size_t>::const_iterator it = cgraph->nodeCliques[i].begin(); it != cgraph->nodeCliques[i].end(); ++it) {
260+
size_t idx = *it;
252261
if (clq_set_clique_has_element(cgraph->clqSet, idx, j)) {
253262
#ifdef DEBUG
254263
assert(clq_set_clique_has_element(cgraph->clqSet, idx, i));
@@ -284,7 +293,8 @@ size_t cgraph_get_all_conflicting(const CGraph *cgraph, size_t node, size_t *nei
284293
}
285294

286295
/* now filling information from cliques, i.e., implicitly stored conflicts */
287-
for (const size_t idxClique : cgraph->nodeCliques[node]) {
296+
for (std::vector<size_t>::const_iterator it = cgraph->nodeCliques[node].begin(); it != cgraph->nodeCliques[node].end(); ++it) {
297+
const size_t idxClique = *it;
288298
const size_t *clqEl = clq_set_clique_elements(cgraph->clqSet, idxClique);
289299
for (size_t j = 0; j < clq_set_clique_size(cgraph->clqSet, idxClique); j++) {
290300
if (!iv[clqEl[j]]) {
@@ -704,7 +714,8 @@ void cgraph_recompute_degree(CGraph *cgraph) {
704714
}
705715

706716
//conflicts stored as cliques
707-
for (const size_t idxClique : cgraph->nodeCliques[i]) {
717+
for (std::vector<size_t>::const_iterator it = cgraph->nodeCliques[i].begin(); it != cgraph->nodeCliques[i].end(); ++it) {
718+
const size_t idxClique = *it;
708719
const size_t *clqEl = clq_set_clique_elements(cgraph->clqSet, idxClique);
709720
for (size_t k = 0; k < clq_set_clique_size(cgraph->clqSet, idxClique); k++) {
710721
if (!iv[clqEl[k]] && clqEl[k] != i) {
@@ -771,7 +782,8 @@ size_t cgraph_get_best_n_neighbors(const CGraph *cgraph, size_t node, const doub
771782

772783
/* conflicts stored in cliques */
773784
const CliqueSet *clqSet = cgraph->clqSet;
774-
for (const size_t clique : cgraph->nodeCliques[node]) {
785+
for (std::vector<size_t>::const_iterator it = cgraph->nodeCliques[node].begin(); it != cgraph->nodeCliques[node].end(); ++it) {
786+
const size_t clique = *it;
775787
const size_t *el = clq_set_clique_elements(clqSet, clique);
776788
for (size_t j = 0; j < clq_set_clique_size(clqSet, clique); j++) {
777789
#ifdef DEBUG

0 commit comments

Comments
 (0)