0
24
0
2
2
1
1
1
1
1
1
4
4
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -62,16 +62,16 @@ |
| 62 | 62 |
/** |
| 63 | 63 |
\dir concepts |
| 64 | 64 |
\brief Concept descriptors and checking classes. |
| 65 | 65 |
|
| 66 | 66 |
This directory contains the concept descriptors and concept checking tools. |
| 67 | 67 |
For more information see the \ref concept "Concepts" module. |
| 68 | 68 |
*/ |
| 69 | 69 |
|
| 70 | 70 |
/** |
| 71 | 71 |
\dir bits |
| 72 | 72 |
\brief Auxiliary tools for implementation. |
| 73 | 73 |
|
| 74 |
This directory contains some auxiliary classes for implementing graphs, |
|
| 74 |
This directory contains some auxiliary classes for implementing graphs, |
|
| 75 | 75 |
maps and some other classes. |
| 76 | 76 |
As a user you typically don't have to deal with these files. |
| 77 | 77 |
*/ |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -294,25 +294,25 @@ |
| 294 | 294 |
@defgroup graph_concepts Graph Structure Concepts |
| 295 | 295 |
@ingroup concept |
| 296 | 296 |
\brief Skeleton and concept checking classes for graph structures |
| 297 | 297 |
|
| 298 | 298 |
This group describes the skeletons and concept checking classes of LEMON's |
| 299 | 299 |
graph structures and helper classes used to implement these. |
| 300 | 300 |
*/ |
| 301 | 301 |
|
| 302 | 302 |
/** |
| 303 | 303 |
@defgroup map_concepts Map Concepts |
| 304 | 304 |
@ingroup concept |
| 305 | 305 |
\brief Skeleton and concept checking classes for maps |
| 306 |
|
|
| 306 |
|
|
| 307 | 307 |
This group describes the skeletons and concept checking classes of maps. |
| 308 | 308 |
*/ |
| 309 | 309 |
|
| 310 | 310 |
/** |
| 311 | 311 |
\anchor demoprograms |
| 312 | 312 |
|
| 313 | 313 |
@defgroup demos Demo programs |
| 314 | 314 |
|
| 315 | 315 |
Some demo programs are listed here. Their full source codes can be found in |
| 316 | 316 |
the \c demo subdirectory of the source tree. |
| 317 | 317 |
|
| 318 | 318 |
It order to compile them, use <tt>--enable-demo</tt> configure option when |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -87,25 +87,25 @@ |
| 87 | 87 |
cutime=ts.tms_cutime/tck; |
| 88 | 88 |
cstime=ts.tms_cstime/tck; |
| 89 | 89 |
#endif |
| 90 | 90 |
} |
| 91 | 91 |
|
| 92 | 92 |
std::string getWinFormattedDate() |
| 93 | 93 |
{
|
| 94 | 94 |
std::ostringstream os; |
| 95 | 95 |
#ifdef WIN32 |
| 96 | 96 |
SYSTEMTIME time; |
| 97 | 97 |
GetSystemTime(&time); |
| 98 | 98 |
char buf1[11], buf2[9], buf3[5]; |
| 99 |
|
|
| 99 |
if (GetDateFormat(MY_LOCALE, 0, &time, |
|
| 100 | 100 |
("ddd MMM dd"), buf1, 11) &&
|
| 101 | 101 |
GetTimeFormat(MY_LOCALE, 0, &time, |
| 102 | 102 |
("HH':'mm':'ss"), buf2, 9) &&
|
| 103 | 103 |
GetDateFormat(MY_LOCALE, 0, &time, |
| 104 | 104 |
("yyyy"), buf3, 5)) {
|
| 105 | 105 |
os << buf1 << ' ' << buf2 << ' ' << buf3; |
| 106 | 106 |
} |
| 107 | 107 |
else os << "unknown"; |
| 108 | 108 |
#else |
| 109 | 109 |
timeval tv; |
| 110 | 110 |
gettimeofday(&tv, 0); |
| 111 | 111 |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -382,25 +382,25 @@ |
| 382 | 382 |
} |
| 383 | 383 |
if (is) is.putback(c); |
| 384 | 384 |
else if (is.eof()) is.clear(); |
| 385 | 385 |
} |
| 386 | 386 |
}; |
| 387 | 387 |
|
| 388 | 388 |
} |
| 389 | 389 |
|
| 390 | 390 |
template <typename Digraph> |
| 391 | 391 |
class DigraphReader; |
| 392 | 392 |
|
| 393 | 393 |
template <typename Digraph> |
| 394 |
DigraphReader<Digraph> digraphReader(Digraph& digraph, |
|
| 394 |
DigraphReader<Digraph> digraphReader(Digraph& digraph, |
|
| 395 | 395 |
std::istream& is = std::cin); |
| 396 | 396 |
template <typename Digraph> |
| 397 | 397 |
DigraphReader<Digraph> digraphReader(Digraph& digraph, const std::string& fn); |
| 398 | 398 |
template <typename Digraph> |
| 399 | 399 |
DigraphReader<Digraph> digraphReader(Digraph& digraph, const char *fn); |
| 400 | 400 |
|
| 401 | 401 |
/// \ingroup lemon_io |
| 402 | 402 |
/// |
| 403 | 403 |
/// \brief \ref lgf-format "LGF" reader for directed graphs |
| 404 | 404 |
/// |
| 405 | 405 |
/// This utility reads an \ref lgf-format "LGF" file. |
| 406 | 406 |
/// |
| ... | ... |
@@ -554,25 +554,25 @@ |
| 554 | 554 |
|
| 555 | 555 |
if (local_is) {
|
| 556 | 556 |
delete _is; |
| 557 | 557 |
} |
| 558 | 558 |
|
| 559 | 559 |
} |
| 560 | 560 |
|
| 561 | 561 |
private: |
| 562 | 562 |
|
| 563 | 563 |
template <typename DGR> |
| 564 | 564 |
friend DigraphReader<DGR> digraphReader(DGR& digraph, std::istream& is); |
| 565 | 565 |
template <typename DGR> |
| 566 |
friend DigraphReader<DGR> digraphReader(DGR& digraph, |
|
| 566 |
friend DigraphReader<DGR> digraphReader(DGR& digraph, |
|
| 567 | 567 |
const std::string& fn); |
| 568 | 568 |
template <typename DGR> |
| 569 | 569 |
friend DigraphReader<DGR> digraphReader(DGR& digraph, const char *fn); |
| 570 | 570 |
|
| 571 | 571 |
DigraphReader(DigraphReader& other) |
| 572 | 572 |
: _is(other._is), local_is(other.local_is), _digraph(other._digraph), |
| 573 | 573 |
_use_nodes(other._use_nodes), _use_arcs(other._use_arcs), |
| 574 | 574 |
_skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) {
|
| 575 | 575 |
|
| 576 | 576 |
other._is = 0; |
| 577 | 577 |
other.local_is = false; |
| 578 | 578 |
|
| ... | ... |
@@ -1220,27 +1220,27 @@ |
| 1220 | 1220 |
/// \brief Return a \ref DigraphReader class |
| 1221 | 1221 |
/// |
| 1222 | 1222 |
/// This function just returns a \ref DigraphReader class. |
| 1223 | 1223 |
/// \relates DigraphReader |
| 1224 | 1224 |
template <typename Digraph> |
| 1225 | 1225 |
DigraphReader<Digraph> digraphReader(Digraph& digraph, const char* fn) {
|
| 1226 | 1226 |
DigraphReader<Digraph> tmp(digraph, fn); |
| 1227 | 1227 |
return tmp; |
| 1228 | 1228 |
} |
| 1229 | 1229 |
|
| 1230 | 1230 |
template <typename Graph> |
| 1231 | 1231 |
class GraphReader; |
| 1232 |
|
|
| 1232 |
|
|
| 1233 | 1233 |
template <typename Graph> |
| 1234 |
GraphReader<Graph> graphReader(Graph& graph, |
|
| 1234 |
GraphReader<Graph> graphReader(Graph& graph, |
|
| 1235 | 1235 |
std::istream& is = std::cin); |
| 1236 | 1236 |
template <typename Graph> |
| 1237 | 1237 |
GraphReader<Graph> graphReader(Graph& graph, const std::string& fn); |
| 1238 | 1238 |
template <typename Graph> |
| 1239 | 1239 |
GraphReader<Graph> graphReader(Graph& graph, const char *fn); |
| 1240 | 1240 |
|
| 1241 | 1241 |
/// \ingroup lemon_io |
| 1242 | 1242 |
/// |
| 1243 | 1243 |
/// \brief \ref lgf-format "LGF" reader for undirected graphs |
| 1244 | 1244 |
/// |
| 1245 | 1245 |
/// This utility reads an \ref lgf-format "LGF" file. |
| 1246 | 1246 |
/// |
| ... | ... |
@@ -1357,25 +1357,25 @@ |
| 1357 | 1357 |
} |
| 1358 | 1358 |
|
| 1359 | 1359 |
if (local_is) {
|
| 1360 | 1360 |
delete _is; |
| 1361 | 1361 |
} |
| 1362 | 1362 |
|
| 1363 | 1363 |
} |
| 1364 | 1364 |
|
| 1365 | 1365 |
private: |
| 1366 | 1366 |
template <typename GR> |
| 1367 | 1367 |
friend GraphReader<GR> graphReader(GR& graph, std::istream& is); |
| 1368 | 1368 |
template <typename GR> |
| 1369 |
friend GraphReader<GR> graphReader(GR& graph, const std::string& fn); |
|
| 1369 |
friend GraphReader<GR> graphReader(GR& graph, const std::string& fn); |
|
| 1370 | 1370 |
template <typename GR> |
| 1371 | 1371 |
friend GraphReader<GR> graphReader(GR& graph, const char *fn); |
| 1372 | 1372 |
|
| 1373 | 1373 |
GraphReader(GraphReader& other) |
| 1374 | 1374 |
: _is(other._is), local_is(other.local_is), _graph(other._graph), |
| 1375 | 1375 |
_use_nodes(other._use_nodes), _use_edges(other._use_edges), |
| 1376 | 1376 |
_skip_nodes(other._skip_nodes), _skip_edges(other._skip_edges) {
|
| 1377 | 1377 |
|
| 1378 | 1378 |
other._is = 0; |
| 1379 | 1379 |
other.local_is = false; |
| 1380 | 1380 |
|
| 1381 | 1381 |
_node_index.swap(other._node_index); |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -497,25 +497,25 @@ |
| 497 | 497 |
it != _attributes.end(); ++it) {
|
| 498 | 498 |
delete it->second; |
| 499 | 499 |
} |
| 500 | 500 |
|
| 501 | 501 |
if (local_os) {
|
| 502 | 502 |
delete _os; |
| 503 | 503 |
} |
| 504 | 504 |
} |
| 505 | 505 |
|
| 506 | 506 |
private: |
| 507 | 507 |
|
| 508 | 508 |
template <typename DGR> |
| 509 |
friend DigraphWriter<DGR> digraphWriter(const DGR& digraph, |
|
| 509 |
friend DigraphWriter<DGR> digraphWriter(const DGR& digraph, |
|
| 510 | 510 |
std::ostream& os); |
| 511 | 511 |
template <typename DGR> |
| 512 | 512 |
friend DigraphWriter<DGR> digraphWriter(const DGR& digraph, |
| 513 | 513 |
const std::string& fn); |
| 514 | 514 |
template <typename DGR> |
| 515 | 515 |
friend DigraphWriter<DGR> digraphWriter(const DGR& digraph, |
| 516 | 516 |
const char *fn); |
| 517 | 517 |
|
| 518 | 518 |
DigraphWriter(DigraphWriter& other) |
| 519 | 519 |
: _os(other._os), local_os(other.local_os), _digraph(other._digraph), |
| 520 | 520 |
_skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) {
|
| 521 | 521 |
|
| ... | ... |
@@ -1073,25 +1073,25 @@ |
| 1073 | 1073 |
|
| 1074 | 1074 |
private: |
| 1075 | 1075 |
|
| 1076 | 1076 |
template <typename GR> |
| 1077 | 1077 |
friend GraphWriter<GR> graphWriter(const GR& graph, |
| 1078 | 1078 |
std::ostream& os); |
| 1079 | 1079 |
template <typename GR> |
| 1080 | 1080 |
friend GraphWriter<GR> graphWriter(const GR& graph, |
| 1081 | 1081 |
const std::string& fn); |
| 1082 | 1082 |
template <typename GR> |
| 1083 | 1083 |
friend GraphWriter<GR> graphWriter(const GR& graph, |
| 1084 | 1084 |
const char *fn); |
| 1085 |
|
|
| 1085 |
|
|
| 1086 | 1086 |
GraphWriter(GraphWriter& other) |
| 1087 | 1087 |
: _os(other._os), local_os(other.local_os), _graph(other._graph), |
| 1088 | 1088 |
_skip_nodes(other._skip_nodes), _skip_edges(other._skip_edges) {
|
| 1089 | 1089 |
|
| 1090 | 1090 |
other._os = 0; |
| 1091 | 1091 |
other.local_os = false; |
| 1092 | 1092 |
|
| 1093 | 1093 |
_node_index.swap(other._node_index); |
| 1094 | 1094 |
_edge_index.swap(other._edge_index); |
| 1095 | 1095 |
|
| 1096 | 1096 |
_node_maps.swap(other._node_maps); |
| 1097 | 1097 |
_edge_maps.swap(other._edge_maps); |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -831,26 +831,26 @@ |
| 831 | 831 |
bool operator!=(const Edge& edge) const {return id != edge.id;}
|
| 832 | 832 |
bool operator<(const Edge& edge) const {return id < edge.id;}
|
| 833 | 833 |
}; |
| 834 | 834 |
|
| 835 | 835 |
class Arc {
|
| 836 | 836 |
friend class ListGraphBase; |
| 837 | 837 |
protected: |
| 838 | 838 |
|
| 839 | 839 |
int id; |
| 840 | 840 |
explicit Arc(int pid) { id = pid;}
|
| 841 | 841 |
|
| 842 | 842 |
public: |
| 843 |
operator Edge() const {
|
|
| 844 |
return id != -1 ? edgeFromId(id / 2) : INVALID; |
|
| 843 |
operator Edge() const {
|
|
| 844 |
return id != -1 ? edgeFromId(id / 2) : INVALID; |
|
| 845 | 845 |
} |
| 846 | 846 |
|
| 847 | 847 |
Arc() {}
|
| 848 | 848 |
Arc (Invalid) { id = -1; }
|
| 849 | 849 |
bool operator==(const Arc& arc) const {return id == arc.id;}
|
| 850 | 850 |
bool operator!=(const Arc& arc) const {return id != arc.id;}
|
| 851 | 851 |
bool operator<(const Arc& arc) const {return id < arc.id;}
|
| 852 | 852 |
}; |
| 853 | 853 |
|
| 854 | 854 |
|
| 855 | 855 |
|
| 856 | 856 |
ListGraphBase() |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -957,38 +957,38 @@ |
| 957 | 957 |
} |
| 958 | 958 |
} |
| 959 | 959 |
}; |
| 960 | 960 |
|
| 961 | 961 |
template <typename From, typename To> |
| 962 | 962 |
struct PathCopySelectorBackward<From, To, true> {
|
| 963 | 963 |
static void copy(const From& from, To& to) {
|
| 964 | 964 |
to.clear(); |
| 965 | 965 |
to.buildRev(from); |
| 966 | 966 |
} |
| 967 | 967 |
}; |
| 968 | 968 |
|
| 969 |
|
|
| 969 |
|
|
| 970 | 970 |
template <typename From, typename To, |
| 971 | 971 |
bool revEnable = RevPathTagIndicator<From>::value> |
| 972 | 972 |
struct PathCopySelector {
|
| 973 | 973 |
static void copy(const From& from, To& to) {
|
| 974 | 974 |
PathCopySelectorForward<From, To>::copy(from, to); |
| 975 |
} |
|
| 975 |
} |
|
| 976 | 976 |
}; |
| 977 | 977 |
|
| 978 | 978 |
template <typename From, typename To> |
| 979 | 979 |
struct PathCopySelector<From, To, true> {
|
| 980 | 980 |
static void copy(const From& from, To& to) {
|
| 981 | 981 |
PathCopySelectorBackward<From, To>::copy(from, to); |
| 982 |
} |
|
| 982 |
} |
|
| 983 | 983 |
}; |
| 984 | 984 |
|
| 985 | 985 |
} |
| 986 | 986 |
|
| 987 | 987 |
|
| 988 | 988 |
/// \brief Make a copy of a path. |
| 989 | 989 |
/// |
| 990 | 990 |
/// This function makes a copy of a path. |
| 991 | 991 |
template <typename From, typename To> |
| 992 | 992 |
void pathCopy(const From& from, To& to) {
|
| 993 | 993 |
checkConcept<concepts::PathDumper<typename From::Digraph>, From>(); |
| 994 | 994 |
_path_bits::PathCopySelector<From, To>::copy(from, to); |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -457,26 +457,26 @@ |
| 457 | 457 |
bool operator!=(const Edge& arc) const {return _id != arc._id;}
|
| 458 | 458 |
bool operator<(const Edge& arc) const {return _id < arc._id;}
|
| 459 | 459 |
}; |
| 460 | 460 |
|
| 461 | 461 |
class Arc {
|
| 462 | 462 |
friend class SmartGraphBase; |
| 463 | 463 |
protected: |
| 464 | 464 |
|
| 465 | 465 |
int _id; |
| 466 | 466 |
explicit Arc(int id) { _id = id;}
|
| 467 | 467 |
|
| 468 | 468 |
public: |
| 469 |
operator Edge() const {
|
|
| 470 |
return _id != -1 ? edgeFromId(_id / 2) : INVALID; |
|
| 469 |
operator Edge() const {
|
|
| 470 |
return _id != -1 ? edgeFromId(_id / 2) : INVALID; |
|
| 471 | 471 |
} |
| 472 | 472 |
|
| 473 | 473 |
Arc() {}
|
| 474 | 474 |
Arc (Invalid) { _id = -1; }
|
| 475 | 475 |
bool operator==(const Arc& arc) const {return _id == arc._id;}
|
| 476 | 476 |
bool operator!=(const Arc& arc) const {return _id != arc._id;}
|
| 477 | 477 |
bool operator<(const Arc& arc) const {return _id < arc._id;}
|
| 478 | 478 |
}; |
| 479 | 479 |
|
| 480 | 480 |
|
| 481 | 481 |
|
| 482 | 482 |
SmartGraphBase() |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -1180,25 +1180,25 @@ |
| 1180 | 1180 |
if (less(jd, nodes[jd].next) || |
| 1181 | 1181 |
nodes[jd].item == nodes[pd].item) {
|
| 1182 | 1182 |
nodes[nodes[jd].next].prio = nodes[jd].prio; |
| 1183 | 1183 |
nodes[nodes[jd].next].item = nodes[jd].item; |
| 1184 | 1184 |
} |
| 1185 | 1185 |
popLeft(pd); |
| 1186 | 1186 |
deleteNode(jd); |
| 1187 | 1187 |
jd = pd; |
| 1188 | 1188 |
} else {
|
| 1189 | 1189 |
int ld = nodes[nodes[jd].next].left; |
| 1190 | 1190 |
popLeft(nodes[jd].next); |
| 1191 | 1191 |
pushRight(jd, ld); |
| 1192 |
if (less(ld, nodes[jd].left) || |
|
| 1192 |
if (less(ld, nodes[jd].left) || |
|
| 1193 | 1193 |
nodes[ld].item == nodes[pd].item) {
|
| 1194 | 1194 |
nodes[jd].item = nodes[ld].item; |
| 1195 | 1195 |
nodes[jd].prio = nodes[ld].prio; |
| 1196 | 1196 |
} |
| 1197 | 1197 |
if (nodes[nodes[jd].next].item == nodes[ld].item) {
|
| 1198 | 1198 |
setPrio(nodes[jd].next); |
| 1199 | 1199 |
} |
| 1200 | 1200 |
jd = nodes[jd].left; |
| 1201 | 1201 |
} |
| 1202 | 1202 |
} |
| 1203 | 1203 |
} else {
|
| 1204 | 1204 |
jd = nodes[jd].left; |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -175,25 +175,25 @@ |
| 175 | 175 |
check(u==dfs_test.predNode(v),"Wrong tree."); |
| 176 | 176 |
check(dfs_test.dist(v) - dfs_test.dist(u) == 1, |
| 177 | 177 |
"Wrong distance. (" << dfs_test.dist(u) << "->"
|
| 178 | 178 |
<< dfs_test.dist(v) << ")"); |
| 179 | 179 |
} |
| 180 | 180 |
} |
| 181 | 181 |
} |
| 182 | 182 |
|
| 183 | 183 |
{
|
| 184 | 184 |
Dfs<Digraph> dfs(G); |
| 185 | 185 |
check(dfs.run(s1,t1) && dfs.reached(t1),"Node 3 is reachable from Node 6."); |
| 186 | 186 |
} |
| 187 |
|
|
| 187 |
|
|
| 188 | 188 |
{
|
| 189 | 189 |
NullMap<Node,Arc> myPredMap; |
| 190 | 190 |
dfs(G).predMap(myPredMap).run(s); |
| 191 | 191 |
} |
| 192 | 192 |
} |
| 193 | 193 |
|
| 194 | 194 |
int main() |
| 195 | 195 |
{
|
| 196 | 196 |
checkDfs<ListDigraph>(); |
| 197 | 197 |
checkDfs<SmartDigraph>(); |
| 198 | 198 |
return 0; |
| 199 | 199 |
} |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -61,25 +61,25 @@ |
| 61 | 61 |
|
| 62 | 62 |
SmartDigraph::NodeMap<ListDigraph::Node> nr(from); |
| 63 | 63 |
SmartDigraph::ArcMap<ListDigraph::Arc> er(from); |
| 64 | 64 |
|
| 65 | 65 |
ListDigraph::NodeMap<SmartDigraph::Node> ncr(to); |
| 66 | 66 |
ListDigraph::ArcMap<SmartDigraph::Arc> ecr(to); |
| 67 | 67 |
|
| 68 | 68 |
digraphCopy(from, to). |
| 69 | 69 |
nodeMap(fnm, tnm).arcMap(fam, tam). |
| 70 | 70 |
nodeRef(nr).arcRef(er). |
| 71 | 71 |
nodeCrossRef(ncr).arcCrossRef(ecr). |
| 72 | 72 |
node(fn, tn).arc(fa, ta).run(); |
| 73 |
|
|
| 73 |
|
|
| 74 | 74 |
check(countNodes(from) == countNodes(to), "Wrong copy."); |
| 75 | 75 |
check(countArcs(from) == countArcs(to), "Wrong copy."); |
| 76 | 76 |
|
| 77 | 77 |
for (SmartDigraph::NodeIt it(from); it != INVALID; ++it) {
|
| 78 | 78 |
check(ncr[nr[it]] == it, "Wrong copy."); |
| 79 | 79 |
check(fnm[it] == tnm[nr[it]], "Wrong copy."); |
| 80 | 80 |
} |
| 81 | 81 |
|
| 82 | 82 |
for (SmartDigraph::ArcIt it(from); it != INVALID; ++it) {
|
| 83 | 83 |
check(ecr[er[it]] == it, "Wrong copy."); |
| 84 | 84 |
check(fam[it] == tam[er[it]], "Wrong copy."); |
| 85 | 85 |
check(nr[from.source(it)] == to.source(er[it]), "Wrong copy."); |
| ... | ... |
@@ -89,25 +89,25 @@ |
| 89 | 89 |
for (ListDigraph::NodeIt it(to); it != INVALID; ++it) {
|
| 90 | 90 |
check(nr[ncr[it]] == it, "Wrong copy."); |
| 91 | 91 |
} |
| 92 | 92 |
|
| 93 | 93 |
for (ListDigraph::ArcIt it(to); it != INVALID; ++it) {
|
| 94 | 94 |
check(er[ecr[it]] == it, "Wrong copy."); |
| 95 | 95 |
} |
| 96 | 96 |
check(tn == nr[fn], "Wrong copy."); |
| 97 | 97 |
check(ta == er[fa], "Wrong copy."); |
| 98 | 98 |
|
| 99 | 99 |
// Test repeated copy |
| 100 | 100 |
digraphCopy(from, to).run(); |
| 101 |
|
|
| 101 |
|
|
| 102 | 102 |
check(countNodes(from) == countNodes(to), "Wrong copy."); |
| 103 | 103 |
check(countArcs(from) == countArcs(to), "Wrong copy."); |
| 104 | 104 |
} |
| 105 | 105 |
|
| 106 | 106 |
void graph_copy_test() {
|
| 107 | 107 |
const int nn = 10; |
| 108 | 108 |
|
| 109 | 109 |
// Build a graph |
| 110 | 110 |
SmartGraph from; |
| 111 | 111 |
SmartGraph::NodeMap<int> fnm(from); |
| 112 | 112 |
SmartGraph::ArcMap<int> fam(from); |
| 113 | 113 |
SmartGraph::EdgeMap<int> fem(from); |
| ... | ... |
@@ -191,25 +191,25 @@ |
| 191 | 191 |
for (ListGraph::ArcIt it(to); it != INVALID; ++it) {
|
| 192 | 192 |
check(ar[acr[it]] == it, "Wrong copy."); |
| 193 | 193 |
} |
| 194 | 194 |
for (ListGraph::EdgeIt it(to); it != INVALID; ++it) {
|
| 195 | 195 |
check(er[ecr[it]] == it, "Wrong copy."); |
| 196 | 196 |
} |
| 197 | 197 |
check(tn == nr[fn], "Wrong copy."); |
| 198 | 198 |
check(ta == ar[fa], "Wrong copy."); |
| 199 | 199 |
check(te == er[fe], "Wrong copy."); |
| 200 | 200 |
|
| 201 | 201 |
// Test repeated copy |
| 202 | 202 |
graphCopy(from, to).run(); |
| 203 |
|
|
| 203 |
|
|
| 204 | 204 |
check(countNodes(from) == countNodes(to), "Wrong copy."); |
| 205 | 205 |
check(countEdges(from) == countEdges(to), "Wrong copy."); |
| 206 | 206 |
check(countArcs(from) == countArcs(to), "Wrong copy."); |
| 207 | 207 |
} |
| 208 | 208 |
|
| 209 | 209 |
|
| 210 | 210 |
int main() {
|
| 211 | 211 |
digraph_copy_test(); |
| 212 | 212 |
graph_copy_test(); |
| 213 | 213 |
|
| 214 | 214 |
return 0; |
| 215 | 215 |
} |
| ... | ... |
@@ -54,28 +54,28 @@ |
| 54 | 54 |
"0 1\n"; |
| 55 | 55 |
|
| 56 | 56 |
char test_lgf_bad2[] = |
| 57 | 57 |
"@nodes\n" |
| 58 | 58 |
"label\n" |
| 59 | 59 |
"0\n" |
| 60 | 60 |
"1\n" |
| 61 | 61 |
"@arcs\n" |
| 62 | 62 |
" label -\n" |
| 63 | 63 |
"0 1\n"; |
| 64 | 64 |
|
| 65 | 65 |
|
| 66 |
int main() |
|
| 66 |
int main() |
|
| 67 | 67 |
{
|
| 68 | 68 |
{
|
| 69 |
ListDigraph d; |
|
| 69 |
ListDigraph d; |
|
| 70 | 70 |
ListDigraph::Node s,t; |
| 71 | 71 |
ListDigraph::ArcMap<int> label(d); |
| 72 | 72 |
std::istringstream input(test_lgf); |
| 73 | 73 |
digraphReader(d, input). |
| 74 | 74 |
node("source", s).
|
| 75 | 75 |
node("target", t).
|
| 76 | 76 |
arcMap("label", label).
|
| 77 | 77 |
run(); |
| 78 | 78 |
check(countNodes(d) == 2,"There should be 2 nodes"); |
| 79 | 79 |
check(countArcs(d) == 2,"There should be 2 arcs"); |
| 80 | 80 |
} |
| 81 | 81 |
{
|
| ... | ... |
@@ -84,71 +84,71 @@ |
| 84 | 84 |
ListGraph::EdgeMap<int> label(g); |
| 85 | 85 |
std::istringstream input(test_lgf); |
| 86 | 86 |
graphReader(g, input). |
| 87 | 87 |
node("source", s).
|
| 88 | 88 |
node("target", t).
|
| 89 | 89 |
edgeMap("label", label).
|
| 90 | 90 |
run(); |
| 91 | 91 |
check(countNodes(g) == 2,"There should be 2 nodes"); |
| 92 | 92 |
check(countEdges(g) == 2,"There should be 2 arcs"); |
| 93 | 93 |
} |
| 94 | 94 |
|
| 95 | 95 |
{
|
| 96 |
ListDigraph d; |
|
| 96 |
ListDigraph d; |
|
| 97 | 97 |
std::istringstream input(test_lgf_nomap); |
| 98 | 98 |
digraphReader(d, input). |
| 99 | 99 |
run(); |
| 100 | 100 |
check(countNodes(d) == 2,"There should be 2 nodes"); |
| 101 | 101 |
check(countArcs(d) == 1,"There should be 1 arc"); |
| 102 | 102 |
} |
| 103 | 103 |
{
|
| 104 | 104 |
ListGraph g; |
| 105 | 105 |
std::istringstream input(test_lgf_nomap); |
| 106 | 106 |
graphReader(g, input). |
| 107 | 107 |
run(); |
| 108 | 108 |
check(countNodes(g) == 2,"There should be 2 nodes"); |
| 109 | 109 |
check(countEdges(g) == 1,"There should be 1 edge"); |
| 110 | 110 |
} |
| 111 | 111 |
|
| 112 | 112 |
{
|
| 113 |
ListDigraph d; |
|
| 113 |
ListDigraph d; |
|
| 114 | 114 |
std::istringstream input(test_lgf_bad1); |
| 115 | 115 |
bool ok=false; |
| 116 | 116 |
try {
|
| 117 | 117 |
digraphReader(d, input). |
| 118 | 118 |
run(); |
| 119 | 119 |
} |
| 120 |
catch (FormatError& error) |
|
| 120 |
catch (FormatError& error) |
|
| 121 | 121 |
{
|
| 122 | 122 |
ok = true; |
| 123 | 123 |
} |
| 124 | 124 |
check(ok,"FormatError exception should have occured"); |
| 125 | 125 |
} |
| 126 | 126 |
{
|
| 127 | 127 |
ListGraph g; |
| 128 | 128 |
std::istringstream input(test_lgf_bad1); |
| 129 | 129 |
bool ok=false; |
| 130 | 130 |
try {
|
| 131 | 131 |
graphReader(g, input). |
| 132 | 132 |
run(); |
| 133 | 133 |
} |
| 134 | 134 |
catch (FormatError& error) |
| 135 | 135 |
{
|
| 136 | 136 |
ok = true; |
| 137 | 137 |
} |
| 138 | 138 |
check(ok,"FormatError exception should have occured"); |
| 139 | 139 |
} |
| 140 | 140 |
|
| 141 | 141 |
{
|
| 142 |
ListDigraph d; |
|
| 142 |
ListDigraph d; |
|
| 143 | 143 |
std::istringstream input(test_lgf_bad2); |
| 144 | 144 |
bool ok=false; |
| 145 | 145 |
try {
|
| 146 | 146 |
digraphReader(d, input). |
| 147 | 147 |
run(); |
| 148 | 148 |
} |
| 149 | 149 |
catch (FormatError& error) |
| 150 | 150 |
{
|
| 151 | 151 |
ok = true; |
| 152 | 152 |
} |
| 153 | 153 |
check(ok,"FormatError exception should have occured"); |
| 154 | 154 |
} |
| 1 | 1 |
/* -*- mode: C++; indent-tabs-mode: nil; -*- |
| 2 | 2 |
* |
| 3 | 3 |
* This file is a part of LEMON, a generic C++ optimization library. |
| 4 | 4 |
* |
| 5 |
* Copyright (C) 2003- |
|
| 5 |
* Copyright (C) 2003-2011 |
|
| 6 | 6 |
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport |
| 7 | 7 |
* (Egervary Research Group on Combinatorial Optimization, EGRES). |
| 8 | 8 |
* |
| 9 | 9 |
* Permission to use, modify and distribute this software is granted |
| 10 | 10 |
* provided that this copyright notice appears in all copies. For |
| 11 | 11 |
* precise terms see the accompanying LICENSE file. |
| 12 | 12 |
* |
| 13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
| 14 | 14 |
* express or implied, and with no claim as to its suitability for any |
| 15 | 15 |
* purpose. |
| 16 | 16 |
* |
| 17 | 17 |
*/ |
| ... | ... |
@@ -60,26 +60,28 @@ |
| 60 | 60 |
typedef ReadWriteMap<A, bool> BoolWriteMap; |
| 61 | 61 |
typedef ReferenceMap<A, bool, bool&, const bool&> BoolRefMap; |
| 62 | 62 |
|
| 63 | 63 |
int main() |
| 64 | 64 |
{
|
| 65 | 65 |
// Map concepts |
| 66 | 66 |
checkConcept<ReadMap<A,B>, ReadMap<A,B> >(); |
| 67 | 67 |
checkConcept<ReadMap<A,C>, ReadMap<A,C> >(); |
| 68 | 68 |
checkConcept<WriteMap<A,B>, WriteMap<A,B> >(); |
| 69 | 69 |
checkConcept<WriteMap<A,C>, WriteMap<A,C> >(); |
| 70 | 70 |
checkConcept<ReadWriteMap<A,B>, ReadWriteMap<A,B> >(); |
| 71 | 71 |
checkConcept<ReadWriteMap<A,C>, ReadWriteMap<A,C> >(); |
| 72 |
checkConcept<ReferenceMap<A,B,B&,const B&>, ReferenceMap<A,B,B&,const B&> >(); |
|
| 73 |
checkConcept<ReferenceMap<A,C,C&,const C&>, ReferenceMap<A,C,C&,const C&> >(); |
|
| 72 |
checkConcept<ReferenceMap<A,B,B&,const B&>, |
|
| 73 |
ReferenceMap<A,B,B&,const B&> >(); |
|
| 74 |
checkConcept<ReferenceMap<A,C,C&,const C&>, |
|
| 75 |
ReferenceMap<A,C,C&,const C&> >(); |
|
| 74 | 76 |
|
| 75 | 77 |
// NullMap |
| 76 | 78 |
{
|
| 77 | 79 |
checkConcept<ReadWriteMap<A,B>, NullMap<A,B> >(); |
| 78 | 80 |
NullMap<A,B> map1; |
| 79 | 81 |
NullMap<A,B> map2 = map1; |
| 80 | 82 |
map1 = nullMap<A,B>(); |
| 81 | 83 |
} |
| 82 | 84 |
|
| 83 | 85 |
// ConstMap |
| 84 | 86 |
{
|
| 85 | 87 |
checkConcept<ReadWriteMap<A,B>, ConstMap<A,B> >(); |
| ... | ... |
@@ -190,25 +192,26 @@ |
| 190 | 192 |
"Something is wrong with CombineMap"); |
| 191 | 193 |
} |
| 192 | 194 |
|
| 193 | 195 |
// FunctorToMap, MapToFunctor |
| 194 | 196 |
{
|
| 195 | 197 |
checkConcept<ReadMap<A,B>, FunctorToMap<F,A,B> >(); |
| 196 | 198 |
checkConcept<ReadMap<A,B>, FunctorToMap<F> >(); |
| 197 | 199 |
FunctorToMap<F> map1; |
| 198 | 200 |
FunctorToMap<F> map2 = FunctorToMap<F>(F()); |
| 199 | 201 |
B b = functorToMap(F())[A()]; |
| 200 | 202 |
|
| 201 | 203 |
checkConcept<ReadMap<A,B>, MapToFunctor<ReadMap<A,B> > >(); |
| 202 |
MapToFunctor<ReadMap<A,B> > map = |
|
| 204 |
MapToFunctor<ReadMap<A,B> > map = |
|
| 205 |
MapToFunctor<ReadMap<A,B> >(ReadMap<A,B>()); |
|
| 203 | 206 |
|
| 204 | 207 |
check(functorToMap(&func)[A()] == 3, |
| 205 | 208 |
"Something is wrong with FunctorToMap"); |
| 206 | 209 |
check(mapToFunctor(constMap<A,int>(2))(A()) == 2, |
| 207 | 210 |
"Something is wrong with MapToFunctor"); |
| 208 | 211 |
check(mapToFunctor(functorToMap(&func))(A()) == 3 && |
| 209 | 212 |
mapToFunctor(functorToMap(&func))[A()] == 3, |
| 210 | 213 |
"Something is wrong with FunctorToMap or MapToFunctor"); |
| 211 | 214 |
check(functorToMap(mapToFunctor(constMap<A,int>(2)))[A()] == 2, |
| 212 | 215 |
"Something is wrong with FunctorToMap or MapToFunctor"); |
| 213 | 216 |
} |
| 214 | 217 |
|
0 comments (0 inline)