| 1 | 1 |
CMAKE_MINIMUM_REQUIRED(VERSION 2.6) |
| 2 | 2 |
|
| 3 | 3 |
IF(EXISTS ${CMAKE_SOURCE_DIR}/cmake/version.cmake)
|
| 4 | 4 |
INCLUDE(${CMAKE_SOURCE_DIR}/cmake/version.cmake)
|
| 5 | 5 |
ELSE(EXISTS ${CMAKE_SOURCE_DIR}/cmake/version.cmake)
|
| 6 | 6 |
SET(PROJECT_NAME "LEMON") |
| 7 | 7 |
SET(PROJECT_VERSION "hg-tip" CACHE STRING "LEMON version string.") |
| 8 | 8 |
ENDIF(EXISTS ${CMAKE_SOURCE_DIR}/cmake/version.cmake)
|
| 9 | 9 |
|
| 10 | 10 |
PROJECT(${PROJECT_NAME})
|
| 11 | 11 |
|
| 12 | 12 |
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
|
| 13 | 13 |
|
| 14 | 14 |
INCLUDE(FindDoxygen) |
| 15 | 15 |
INCLUDE(FindGhostscript) |
| 16 | 16 |
FIND_PACKAGE(GLPK 4.33) |
| 17 | 17 |
FIND_PACKAGE(CPLEX) |
| 18 | 18 |
FIND_PACKAGE(COIN) |
| 19 | 19 |
|
| 20 |
IF(MSVC) |
|
| 21 |
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4250 /wd4355 /wd4503 /wd4800 /wd4996")
|
|
| 22 |
# Suppressed warnings: |
|
| 23 |
# C4250: 'class1' : inherits 'class2::member' via dominance |
|
| 24 |
# C4355: 'this' : used in base member initializer list |
|
| 25 |
# C4503: 'function' : decorated name length exceeded, name was truncated |
|
| 26 |
# C4800: 'type' : forcing value to bool 'true' or 'false' (performance warning) |
|
| 27 |
# C4996: 'function': was declared deprecated |
|
| 28 |
ENDIF(MSVC) |
|
| 29 |
|
|
| 30 | 20 |
INCLUDE(CheckTypeSize) |
| 31 | 21 |
CHECK_TYPE_SIZE("long long" LEMON_LONG_LONG)
|
| 32 | 22 |
|
| 33 | 23 |
ENABLE_TESTING() |
| 34 | 24 |
|
| 35 | 25 |
ADD_SUBDIRECTORY(lemon) |
| 36 | 26 |
IF(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
|
| 37 | 27 |
ADD_SUBDIRECTORY(demo) |
| 38 | 28 |
ADD_SUBDIRECTORY(tools) |
| 39 | 29 |
ADD_SUBDIRECTORY(doc) |
| 40 | 30 |
ADD_SUBDIRECTORY(test) |
| 41 | 31 |
ENDIF(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
|
| 42 | 32 |
|
| 43 | 33 |
IF(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
|
| 44 | 34 |
IF(WIN32) |
| 45 | 35 |
SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
|
| 46 | 36 |
SET(CPACK_PACKAGE_VENDOR "EGRES") |
| 47 | 37 |
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY |
| 48 | 38 |
"LEMON - Library for Efficient Modeling and Optimization in Networks") |
| 49 | 39 |
SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
|
| 50 | 40 |
|
| 51 | 41 |
SET(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
|
| 52 | 42 |
|
| 53 | 43 |
SET(CPACK_PACKAGE_INSTALL_DIRECTORY |
| 54 | 44 |
"${PROJECT_NAME} ${PROJECT_VERSION}")
|
| 55 | 45 |
SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY |
| 56 | 46 |
"${PROJECT_NAME} ${PROJECT_VERSION}")
|
| 57 | 47 |
|
| 58 | 48 |
SET(CPACK_COMPONENTS_ALL headers library html_documentation bin) |
| 59 | 49 |
|
| 60 | 50 |
SET(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ headers") |
| 61 | 51 |
SET(CPACK_COMPONENT_LIBRARY_DISPLAY_NAME "Dynamic-link library") |
| 62 | 52 |
SET(CPACK_COMPONENT_BIN_DISPLAY_NAME "Command line utilities") |
| 63 | 53 |
SET(CPACK_COMPONENT_HTML_DOCUMENTATION_DISPLAY_NAME "HTML documentation") |
| 64 | 54 |
|
| 65 | 55 |
SET(CPACK_COMPONENT_HEADERS_DESCRIPTION |
| 66 | 56 |
"C++ header files") |
| 67 | 57 |
SET(CPACK_COMPONENT_LIBRARY_DESCRIPTION |
| 68 | 58 |
"DLL and import library") |
| 69 | 59 |
SET(CPACK_COMPONENT_BIN_DESCRIPTION |
| 70 | 60 |
"Command line utilities") |
| 71 | 61 |
SET(CPACK_COMPONENT_HTML_DOCUMENTATION_DESCRIPTION |
| 72 | 62 |
"Doxygen generated documentation") |
| 73 | 63 |
|
| 74 | 64 |
SET(CPACK_COMPONENT_HEADERS_DEPENDS library) |
| 75 | 65 |
|
| 76 | 66 |
SET(CPACK_COMPONENT_HEADERS_GROUP "Development") |
| 77 | 67 |
SET(CPACK_COMPONENT_LIBRARY_GROUP "Development") |
| 78 | 68 |
SET(CPACK_COMPONENT_HTML_DOCUMENTATION_GROUP "Documentation") |
| 79 | 69 |
|
| 80 | 70 |
SET(CPACK_COMPONENT_GROUP_DEVELOPMENT_DESCRIPTION |
| 81 | 71 |
"Components needed to develop software using LEMON") |
| 82 | 72 |
SET(CPACK_COMPONENT_GROUP_DOCUMENTATION_DESCRIPTION |
| 83 | 73 |
"Documentation of LEMON") |
| 84 | 74 |
|
| 85 | 75 |
SET(CPACK_ALL_INSTALL_TYPES Full Developer) |
| 86 | 76 |
|
| 87 | 77 |
SET(CPACK_COMPONENT_HEADERS_INSTALL_TYPES Developer Full) |
| 88 | 78 |
SET(CPACK_COMPONENT_LIBRARY_INSTALL_TYPES Developer Full) |
| 89 | 79 |
SET(CPACK_COMPONENT_HTML_DOCUMENTATION_INSTALL_TYPES Full) |
| 90 | 80 |
|
| 91 | 81 |
SET(CPACK_GENERATOR "NSIS") |
| 92 | 82 |
SET(CPACK_NSIS_MUI_ICON "${PROJECT_SOURCE_DIR}/cmake/nsis/lemon.ico")
|
| 93 | 83 |
SET(CPACK_NSIS_MUI_UNIICON "${PROJECT_SOURCE_DIR}/cmake/nsis/uninstall.ico")
|
| 94 | 84 |
#SET(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/cmake/nsis\\\\installer.bmp")
|
| 95 | 85 |
SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\lemon.ico") |
| 96 | 86 |
SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} ${PROJECT_NAME}")
|
| 97 | 87 |
SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\lemon.cs.elte.hu") |
| 98 | 88 |
SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\lemon.cs.elte.hu") |
| 99 | 89 |
SET(CPACK_NSIS_CONTACT "lemon-user@lemon.cs.elte.hu") |
| 100 | 90 |
SET(CPACK_NSIS_CREATE_ICONS_EXTRA " |
| 101 | 91 |
CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Documentation.lnk\\\" \\\"$INSTDIR\\\\share\\\\doc\\\\index.html\\\" |
| 102 | 92 |
") |
| 103 | 93 |
SET(CPACK_NSIS_DELETE_ICONS_EXTRA " |
| 104 | 94 |
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP |
| 105 | 95 |
Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Documentation.lnk\\\" |
| 106 | 96 |
") |
| 107 | 97 |
|
| 108 | 98 |
INCLUDE(CPack) |
| 109 | 99 |
ENDIF(WIN32) |
| 110 | 100 |
ENDIF(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
|
| 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 | 5 |
* Copyright (C) 2003-2009 |
| 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 |
*/ |
| 18 | 18 |
|
| 19 | 19 |
#ifndef LEMON_CORE_H |
| 20 | 20 |
#define LEMON_CORE_H |
| 21 | 21 |
|
| 22 | 22 |
#include <vector> |
| 23 | 23 |
#include <algorithm> |
| 24 | 24 |
|
| 25 | 25 |
#include <lemon/config.h> |
| 26 | 26 |
#include <lemon/bits/enable_if.h> |
| 27 | 27 |
#include <lemon/bits/traits.h> |
| 28 | 28 |
#include <lemon/assert.h> |
| 29 | 29 |
|
| 30 |
// Disable the following warnings when compiling with MSVC: |
|
| 31 |
// C4250: 'class1' : inherits 'class2::member' via dominance |
|
| 32 |
// C4355: 'this' : used in base member initializer list |
|
| 33 |
// C4503: 'function' : decorated name length exceeded, name was truncated |
|
| 34 |
// C4800: 'type' : forcing value to bool 'true' or 'false' (performance warning) |
|
| 35 |
// C4996: 'function': was declared deprecated |
|
| 36 |
#ifdef _MSC_VER |
|
| 37 |
#pragma warning( disable : 4250 4355 4503 4800 4996 ) |
|
| 38 |
#endif |
|
| 39 |
|
|
| 30 | 40 |
///\file |
| 31 | 41 |
///\brief LEMON core utilities. |
| 32 | 42 |
/// |
| 33 | 43 |
///This header file contains core utilities for LEMON. |
| 34 | 44 |
///It is automatically included by all graph types, therefore it usually |
| 35 | 45 |
///do not have to be included directly. |
| 36 | 46 |
|
| 37 | 47 |
namespace lemon {
|
| 38 | 48 |
|
| 39 | 49 |
/// \brief Dummy type to make it easier to create invalid iterators. |
| 40 | 50 |
/// |
| 41 | 51 |
/// Dummy type to make it easier to create invalid iterators. |
| 42 | 52 |
/// See \ref INVALID for the usage. |
| 43 | 53 |
struct Invalid {
|
| 44 | 54 |
public: |
| 45 | 55 |
bool operator==(Invalid) { return true; }
|
| 46 | 56 |
bool operator!=(Invalid) { return false; }
|
| 47 | 57 |
bool operator< (Invalid) { return false; }
|
| 48 | 58 |
}; |
| 49 | 59 |
|
| 50 | 60 |
/// \brief Invalid iterators. |
| 51 | 61 |
/// |
| 52 | 62 |
/// \ref Invalid is a global type that converts to each iterator |
| 53 | 63 |
/// in such a way that the value of the target iterator will be invalid. |
| 54 | 64 |
#ifdef LEMON_ONLY_TEMPLATES |
| 55 | 65 |
const Invalid INVALID = Invalid(); |
| 56 | 66 |
#else |
| 57 | 67 |
extern const Invalid INVALID; |
| 58 | 68 |
#endif |
| 59 | 69 |
|
| 60 | 70 |
/// \addtogroup gutils |
| 61 | 71 |
/// @{
|
| 62 | 72 |
|
| 63 | 73 |
///Create convenience typedefs for the digraph types and iterators |
| 64 | 74 |
|
| 65 | 75 |
///This \c \#define creates convenient type definitions for the following |
| 66 | 76 |
///types of \c Digraph: \c Node, \c NodeIt, \c Arc, \c ArcIt, \c InArcIt, |
| 67 | 77 |
///\c OutArcIt, \c BoolNodeMap, \c IntNodeMap, \c DoubleNodeMap, |
| 68 | 78 |
///\c BoolArcMap, \c IntArcMap, \c DoubleArcMap. |
| 69 | 79 |
/// |
| 70 | 80 |
///\note If the graph type is a dependent type, ie. the graph type depend |
| 71 | 81 |
///on a template parameter, then use \c TEMPLATE_DIGRAPH_TYPEDEFS() |
| 72 | 82 |
///macro. |
| 73 | 83 |
#define DIGRAPH_TYPEDEFS(Digraph) \ |
| 74 | 84 |
typedef Digraph::Node Node; \ |
| 75 | 85 |
typedef Digraph::NodeIt NodeIt; \ |
| 76 | 86 |
typedef Digraph::Arc Arc; \ |
| 77 | 87 |
typedef Digraph::ArcIt ArcIt; \ |
| 78 | 88 |
typedef Digraph::InArcIt InArcIt; \ |
| 79 | 89 |
typedef Digraph::OutArcIt OutArcIt; \ |
| 80 | 90 |
typedef Digraph::NodeMap<bool> BoolNodeMap; \ |
| 81 | 91 |
typedef Digraph::NodeMap<int> IntNodeMap; \ |
| 82 | 92 |
typedef Digraph::NodeMap<double> DoubleNodeMap; \ |
| 83 | 93 |
typedef Digraph::ArcMap<bool> BoolArcMap; \ |
| 84 | 94 |
typedef Digraph::ArcMap<int> IntArcMap; \ |
| 85 | 95 |
typedef Digraph::ArcMap<double> DoubleArcMap |
| 86 | 96 |
|
| 87 | 97 |
///Create convenience typedefs for the digraph types and iterators |
| 88 | 98 |
|
| 89 | 99 |
///\see DIGRAPH_TYPEDEFS |
| 90 | 100 |
/// |
| 91 | 101 |
///\note Use this macro, if the graph type is a dependent type, |
| 92 | 102 |
///ie. the graph type depend on a template parameter. |
| 93 | 103 |
#define TEMPLATE_DIGRAPH_TYPEDEFS(Digraph) \ |
| 94 | 104 |
typedef typename Digraph::Node Node; \ |
| 95 | 105 |
typedef typename Digraph::NodeIt NodeIt; \ |
| 96 | 106 |
typedef typename Digraph::Arc Arc; \ |
| 97 | 107 |
typedef typename Digraph::ArcIt ArcIt; \ |
| 98 | 108 |
typedef typename Digraph::InArcIt InArcIt; \ |
| 99 | 109 |
typedef typename Digraph::OutArcIt OutArcIt; \ |
| 100 | 110 |
typedef typename Digraph::template NodeMap<bool> BoolNodeMap; \ |
| 101 | 111 |
typedef typename Digraph::template NodeMap<int> IntNodeMap; \ |
| 102 | 112 |
typedef typename Digraph::template NodeMap<double> DoubleNodeMap; \ |
| 103 | 113 |
typedef typename Digraph::template ArcMap<bool> BoolArcMap; \ |
| 104 | 114 |
typedef typename Digraph::template ArcMap<int> IntArcMap; \ |
| 105 | 115 |
typedef typename Digraph::template ArcMap<double> DoubleArcMap |
| 106 | 116 |
|
| 107 | 117 |
///Create convenience typedefs for the graph types and iterators |
| 108 | 118 |
|
| 109 | 119 |
///This \c \#define creates the same convenient type definitions as defined |
| 110 | 120 |
///by \ref DIGRAPH_TYPEDEFS(Graph) and six more, namely it creates |
| 111 | 121 |
///\c Edge, \c EdgeIt, \c IncEdgeIt, \c BoolEdgeMap, \c IntEdgeMap, |
| 112 | 122 |
///\c DoubleEdgeMap. |
| 113 | 123 |
/// |
| 114 | 124 |
///\note If the graph type is a dependent type, ie. the graph type depend |
| 115 | 125 |
///on a template parameter, then use \c TEMPLATE_GRAPH_TYPEDEFS() |
| 116 | 126 |
///macro. |
| 117 | 127 |
#define GRAPH_TYPEDEFS(Graph) \ |
| 118 | 128 |
DIGRAPH_TYPEDEFS(Graph); \ |
| 119 | 129 |
typedef Graph::Edge Edge; \ |
| 120 | 130 |
typedef Graph::EdgeIt EdgeIt; \ |
| 121 | 131 |
typedef Graph::IncEdgeIt IncEdgeIt; \ |
| 122 | 132 |
typedef Graph::EdgeMap<bool> BoolEdgeMap; \ |
| 123 | 133 |
typedef Graph::EdgeMap<int> IntEdgeMap; \ |
| 124 | 134 |
typedef Graph::EdgeMap<double> DoubleEdgeMap |
| 125 | 135 |
|
0 comments (0 inline)