↑ Collapse diff ↑
Ignore white space 6 line context
1
/* -*- mode: C++; indent-tabs-mode: nil; -*-
2
 *
3
 * This file is a part of LEMON, a generic C++ optimization library.
4
 *
5
 * Copyright (C) 2003-2008
6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
8
 *
9
 * Permission to use, modify and distribute this software is granted
10
 * provided that this copyright notice appears in all copies. For
11
 * precise terms see the accompanying LICENSE file.
12
 *
13
 * This software is provided "AS IS" with no warranty of any kind,
14
 * express or implied, and with no claim as to its suitability for any
15
 * purpose.
16
 *
17
 */
18

	
19
/*!
20

	
21
\page named-param Named Parameters
22

	
23
\section named-func-param Named Function Parameters
24

	
25
Several modern languages provide a convenient way to refer the
26
function parameters by name also when you call the function. It is
27
especially comfortable in case of a function having tons of parameters
28
with natural default values. Sadly, C++ lack this amenity.
29

	
30
However, with a crafty trick and with some little
31
inconvenience, it is possible to emulate is.
32
The example below shows how to do it.
33

	
34
\code
35
class namedFn
36
{
37
  int _id;
38
  double _val;
39
  int _dim;
40

	
41
  public:
42
  namedFn() : _id(0), _val(1), _dim(2) {}
43
  namedFn& id(int p)     { _id  = p ; return *this; }
44
  namedFn& val(double p) { _val = p ; return *this; }
45
  namedFn& dim(int p)    { _dim = p ; return *this; }
46

	
47
  run() {
48
    std::cout << "Here comes the function itself\n" <<
49
              << "With parameters "
50
              << _id << ", " << _val << ", " << _dim << std::endl;
51
  }
52
};
53
\endcode
54

	
55
Then you can use it like this.
56

	
57
\code
58
namedFn().id(3).val(2).run();
59
\endcode
60

	
61
The trick is obvious, each "named parameter" changes one component of
62
the underlying class, then gives back a reference to it. Finally,
63
<tt>run()</tt> executes the algorithm itself.
64

	
65
\note Although it is a class, namedFn is used pretty much like as it were
66
a function. That it why we called it namedFn instead of \c NamedFn.
67

	
68
\note In fact, the final <tt>.run()</tt> could be made unnecessary,
69
because the algorithm could also be implemented in the destructor of
70
\c namedFn instead. This however would make it impossible to implement
71
functions with return values, and would also cause serious problems when
72
implementing \ref named-templ-func-param "named template parameters".
73
<b>Therefore, by convention, <tt>.run()</tt> must be used
74
explicitly to execute a function having named parameters
75
everywhere in LEMON.</b>
76

	
77
\section named-templ-func-param Named Function Template Parameters
78

	
79
A named parameter can also be a template function. The usage is
80
exactly the same, but the implementation behind is a kind of black
81
magic and they are the dirtiest part of the LEMON code.
82

	
83
You will probably never need to know how it works, but if you really
84
committed, have a look at \ref lemon/graph_to_eps.h for an example.
85

	
86
\section traits-classes Traits Classes
87

	
88
A similar game can also be played when defining classes. In this case
89
the type of the class attributes can be changed. Initially we have to
90
define a special class called <em>Traits Class</em> defining the
91
default type of the attributes. Then the types of these attributes can
92
be changed in the same way as described in the next section.
93

	
94
See \ref lemon::DijkstraDefaultTraits for an
95
example how a traits class implementation looks like.
96

	
97
\section named-templ-param Named Class Template Parameters
98

	
99
If we would like to change the type of an attribute in a class that
100
was instantiated by using a traits class as a template parameter, and
101
the class contains named parameters, we do not have to instantiate again
102
the class with new traits class, but instead adaptor classes can
103
be used as shown in the following example.
104

	
105
\code
106
Dijkstra<>::SetPredMap<NullMap<Node,Arc> >::Create
107
\endcode
108

	
109
It can also be used in conjunction with other named template
110
parameters in arbitrary order.
111

	
112
\code
113
Dijkstra<>::SetDistMap<MyMap>::SetPredMap<NullMap<Node,Arc> >::Create
114
\endcode
115

	
116
The result will be an instantiated Dijkstra class, in which the
117
DistMap and the PredMap is modified.
118

	
119
*/
Ignore white space 6 line context
1
#! /usr/bin/env python
2

	
3
import sys
4
import os
5

	
6
if len(sys.argv)>1 and sys.argv[1] in ["-h","--help"]:
7
    print """
8
This utility just prints the length of the longest path
9
in the revision graph from revison 0 to the current one.
10
"""
11
    exit(0)
12
plist = os.popen("hg parents --template='{rev}\n'").readlines()
13
if len(plist)>1:
14
    print "You are in the process of merging"
15
    exit(1)
16
PAR = int(plist[0])
17

	
18
f = os.popen("hg log -r 0:tip --template='{rev} {parents}\n'").readlines()
19
REV = -1
20
lengths=[]
21
for l in f:
22
    REV+=1
23
    s = l.split()
24
    rev = int(s[0])
25
    if REV != rev:
26
        print "Something is seriously wrong"
27
        exit(1)
28
    if len(s) == 1:
29
        par1 = par2 = rev - 1
30
    elif len(s) == 2:
31
        par1 = par2 = int(s[1].split(":")[0])
32
    else:
33
        par1 = int(s[1].split(":")[0])
34
        par2 = int(s[2].split(":")[0])
35
    if rev == 0:
36
        lengths.append(0)
37
    else:
38
        lengths.append(max(lengths[par1],lengths[par2])+1)
39
print lengths[PAR]
Ignore white space 6 line context
1 1
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
2 2

	
3
#EXECUTE_PROCESS(
4
#  COMMAND hg id -i
5
#  OUTPUT_VARIABLE HG_REVISION
6
#  OUTPUT_STRIP_TRAILING_WHITESPACE)
7

	
8 3
SET(PROJECT_NAME "LEMON")
9
SET(PROJECT_VERSION_MAJOR "0")
10
SET(PROJECT_VERSION_MINOR "99")
11
SET(PROJECT_VERSION_PATCH "0")
12
SET(PROJECT_VERSION
13
  "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
4
SET(PROJECT_VERSION "hg-tip" CACHE STRING "The version string.")
14 5

	
15 6
PROJECT(${PROJECT_NAME})
16 7

	
17 8
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
18 9

	
19 10
INCLUDE(FindDoxygen)
... ...
@@ -36,21 +27,18 @@
36 27
  SET(CPACK_PACKAGE_VENDOR
37 28
    "EGRES - Egervary Research Group on Combinatorial Optimization")
38 29
  SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY
39 30
    "LEMON - Library of Efficient Models and Optimization in Networks")
40 31
  SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
41 32

	
42
  SET(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
43
  SET(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
44
  SET(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
45 33
  SET(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
46 34

	
47 35
  SET(CPACK_PACKAGE_INSTALL_DIRECTORY
48
    "${PROJECT_NAME} ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
36
    "${PROJECT_NAME} ${PROJECT_VERSION}")
49 37
  SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY
50
    "${PROJECT_NAME} ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
38
    "${PROJECT_NAME} ${PROJECT_VERSION}")
51 39

	
52 40
  # Variables to generate a component-based installer.
53 41
  #SET(CPACK_COMPONENTS_ALL headers library html_documentation)
54 42

	
55 43
  #SET(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ headers")
56 44
  #SET(CPACK_COMPONENT_LIBRARY_DISPLAY_NAME "Static library")
Ignore white space 6 line context
1
20XX-XX-XX Version 1.0 released
2

	
3
	This is the first stable release of LEMON. Compared to the 0.x
4
	release series, it features a considerably smaller but more
5
	matured set of tools. The API has also completely revised and
6
	changed in several places.
7

	
8
	* The major name changes compared to the 0.x series
9
          * Graph -> Digraph, UGraph -> Graph
10
          * Edge -> Arc, UEdge -> Edge
11
	  * source(UEdge)/target(UEdge) -> u(Edge)/v(Edge)
12
	* Other improvements
13
	  * Better documentation
14
	  * Reviewed and cleaned up codebase
15
	  * CMake based build system (along with the autotools based one)
16
	* Contents of the library (ported from 0.x)
17
	  * Algorithms
18
       	    * breadth-first search (bfs.h)
19
       	    * depth-first search (dfs.h)
20
       	    * Dijkstra's algorithm (dijkstra.h)
21
       	    * Kruskal's algorithm (kruskal.h)
22
    	  * Data structures
23
       	    * graph data structures (list_graph.h, smart_graph.h)
24
       	    * path data structures (path.h)
25
       	    * binary heap data structure (bin_heap.h)
26
       	    * union-find data structures (unionfind.h)
27
       	    * miscellaneous property maps (maps.h)
28
       	    * two dimensional vector and bounding box (dim2.h)
29
          * Concepts
30
       	    * graph structure concepts (concepts/digraph.h, concepts/graph.h,
31
              concepts/graph_components.h)
32
       	    * concepts for other structures (concepts/heap.h, concepts/maps.h,
33
	      concepts/path.h)
34
    	  * Tools
35
       	    * Mersenne twister random number generator (random.h)
36
       	    * tools for measuring cpu and wall clock time (time_measure.h)
37
       	    * tools for counting steps and events (counter.h)
38
       	    * tool for parsing command line arguments (arg_parser.h)
39
       	    * tool for visualizing graphs (graph_to_eps.h)
40
       	    * tools for reading and writing data in LEMON Graph Format
41
              (lgf_reader.h, lgf_writer.h)
42
            * tools to handle the anomalies of calculations with
43
	      floating point numbers (tolerance.h)
44
            * tools to manage RGB colors (color.h)
45
    	  * Infrastructure
46
       	    * extended assertion handling (assert.h)
47
       	    * exception classes and error handling (error.h)
48
      	    * concept checking (concept_check.h)
49
       	    * commonly used mathematical constants (math.h)
Ignore white space 6 line context
1 1
dnl Process this file with autoconf to produce a configure script.
2 2

	
3 3
dnl Version information.
4
m4_define([lemon_version_number], [])
4
m4_define([lemon_version_number],
5
	[m4_normalize(esyscmd([echo ${LEMON_VERSION}]))])
6
dnl m4_define([lemon_version_number], [])
7
m4_define([lemon_hg_path], [m4_normalize(esyscmd([./scripts/chg-len.py]))])
5 8
m4_define([lemon_hg_revision], [m4_normalize(esyscmd([hg id -i]))])
6
m4_define([lemon_version], [ifelse(lemon_version_number(), [], [lemon_hg_revision()], [lemon_version_number()])])
9
m4_define([lemon_version], [ifelse(lemon_version_number(),
10
			   [],
11
			   [lemon_hg_path().lemon_hg_revision()],
12
			   [lemon_version_number()])])
7 13

	
8 14
AC_PREREQ([2.59])
9 15
AC_INIT([LEMON], [lemon_version()], [lemon-user@lemon.cs.elte.hu], [lemon])
10 16
AC_CONFIG_AUX_DIR([build-aux])
11 17
AC_CONFIG_MACRO_DIR([m4])
12 18
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects nostdinc])
Ignore white space 6 line context
... ...
@@ -3,12 +3,13 @@
3 3
	doc/coding_style.dox \
4 4
	doc/dirs.dox \
5 5
	doc/groups.dox \
6 6
	doc/lgf.dox \
7 7
	doc/license.dox \
8 8
	doc/mainpage.dox \
9
	doc/named-param.dox \
9 10
	doc/namespaces.dox \
10 11
	doc/html \
11 12
	doc/CMakeLists.txt
12 13

	
13 14
DOC_EPS_IMAGES18 = \
14 15
	nodeshape_0.eps \
Ignore white space 6 line context
... ...
@@ -13,14 +13,14 @@
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
#ifndef LEMON_ARG_PARSER
20
#define LEMON_ARG_PARSER
19
#ifndef LEMON_ARG_PARSER_H
20
#define LEMON_ARG_PARSER_H
21 21

	
22 22
#include <vector>
23 23
#include <map>
24 24
#include <list>
25 25
#include <string>
26 26
#include <iostream>
... ...
@@ -379,7 +379,7 @@
379 379
    ///not starting with a '-' character.
380 380
    const std::vector<std::string> &files() const { return _file_args; }
381 381

	
382 382
  };
383 383
}
384 384

	
385
#endif // LEMON_ARG_PARSER
385
#endif // LEMON_ARG_PARSER_H
Ignore white space 6 line context
... ...
@@ -24,29 +24,23 @@
24 24
/// \brief Extended assertion handling
25 25

	
26 26
#include <lemon/error.h>
27 27

	
28 28
namespace lemon {
29 29

	
30
  inline void assert_fail_log(const char *file, int line, const char *function,
31
                              const char *message, const char *assertion)
30
  inline void assert_fail_abort(const char *file, int line,
31
                                const char *function, const char* message,
32
                                const char *assertion)
32 33
  {
33 34
    std::cerr << file << ":" << line << ": ";
34 35
    if (function)
35 36
      std::cerr << function << ": ";
36 37
    std::cerr << message;
37 38
    if (assertion)
38 39
      std::cerr << " (assertion '" << assertion << "' failed)";
39 40
    std::cerr << std::endl;
40
  }
41

	
42
  inline void assert_fail_abort(const char *file, int line,
43
                                const char *function, const char* message,
44
                                const char *assertion)
45
  {
46
    assert_fail_log(file, line, function, message, assertion);
47 41
    std::abort();
48 42
  }
49 43

	
50 44
  namespace _assert_bits {
51 45

	
52 46

	
... ...
@@ -60,35 +54,29 @@
60 54
  }
61 55
}
62 56

	
63 57
#endif // LEMON_ASSERT_H
64 58

	
65 59
#undef LEMON_ASSERT
66
#undef LEMON_FIXME
67 60
#undef LEMON_DEBUG
68 61

	
69
#if (defined(LEMON_ASSERT_LOG) ? 1 : 0) +               \
70
  (defined(LEMON_ASSERT_ABORT) ? 1 : 0) +               \
62
#if (defined(LEMON_ASSERT_ABORT) ? 1 : 0) +               \
71 63
  (defined(LEMON_ASSERT_CUSTOM) ? 1 : 0) > 1
72 64
#error "LEMON assertion system is not set properly"
73 65
#endif
74 66

	
75
#if ((defined(LEMON_ASSERT_LOG) ? 1 : 0) +              \
76
     (defined(LEMON_ASSERT_ABORT) ? 1 : 0) +            \
67
#if ((defined(LEMON_ASSERT_ABORT) ? 1 : 0) +            \
77 68
     (defined(LEMON_ASSERT_CUSTOM) ? 1 : 0) == 1 ||     \
78 69
     defined(LEMON_ENABLE_ASSERTS)) &&                  \
79 70
  (defined(LEMON_DISABLE_ASSERTS) ||                    \
80 71
   defined(NDEBUG))
81 72
#error "LEMON assertion system is not set properly"
82 73
#endif
83 74

	
84 75

	
85
#if defined LEMON_ASSERT_LOG
86
#  undef LEMON_ASSERT_HANDLER
87
#  define LEMON_ASSERT_HANDLER ::lemon::assert_fail_log
88
#elif defined LEMON_ASSERT_ABORT
76
#if defined LEMON_ASSERT_ABORT
89 77
#  undef LEMON_ASSERT_HANDLER
90 78
#  define LEMON_ASSERT_HANDLER ::lemon::assert_fail_abort
91 79
#elif defined LEMON_ASSERT_CUSTOM
92 80
#  undef LEMON_ASSERT_HANDLER
93 81
#  ifndef LEMON_CUSTOM_ASSERT_HANDLER
94 82
#    error "LEMON_CUSTOM_ASSERT_HANDLER is not set"
... ...
@@ -104,29 +92,31 @@
104 92

	
105 93
#ifndef LEMON_FUNCTION_NAME
106 94
#  if defined __GNUC__
107 95
#    define LEMON_FUNCTION_NAME (__PRETTY_FUNCTION__)
108 96
#  elif defined _MSC_VER
109 97
#    define LEMON_FUNCTION_NAME (__FUNCSIG__)
98
#  elif __STDC_VERSION__ >= 199901L
99
#    define LEMON_FUNCTION_NAME (__func__)
110 100
#  else
111
#    define LEMON_FUNCTION_NAME (__func__)
101
#    define LEMON_FUNCTION_NAME ("<unknown>")
112 102
#  endif
113 103
#endif
114 104

	
115 105
#ifdef DOXYGEN
116 106

	
117 107
/// \ingroup exceptions
118 108
///
119 109
/// \brief Macro for assertion with customizable message
120 110
///
121
/// Macro for assertion with customizable message.  \param exp An
122
/// expression that must be convertible to \c bool.  If it is \c
123
/// false, then an assertion is raised. The concrete behaviour depends
124
/// on the settings of the assertion system.  \param msg A <tt>const
125
/// char*</tt> parameter, which can be used to provide information
126
/// about the circumstances of the failed assertion.
111
/// Macro for assertion with customizable message.  
112
/// \param exp An expression that must be convertible to \c bool.  If it is \c
113
/// false, then an assertion is raised. The concrete behaviour depends on the
114
/// settings of the assertion system.
115
/// \param msg A <tt>const char*</tt> parameter, which can be used to provide
116
/// information about the circumstances of the failed assertion.
127 117
///
128 118
/// The assertions are enabled in the default behaviour.
129 119
/// You can disable them with the following code:
130 120
/// \code
131 121
/// #define LEMON_DISABLE_ASSERTS
132 122
/// \endcode
... ...
@@ -134,23 +124,18 @@
134 124
/// \code
135 125
/// g++ -DLEMON_DISABLE_ASSERTS
136 126
/// make CXXFLAGS='-DLEMON_DISABLE_ASSERTS'
137 127
/// \endcode
138 128
/// The checking is also disabled when the standard macro \c NDEBUG is defined.
139 129
///
140
/// The LEMON assertion system has a wide range of customization
141
/// properties. As a default behaviour the failed assertion prints a
142
/// short log message to the standard error and aborts the execution.
130
/// As a default behaviour the failed assertion prints a short log message to
131
/// the standard error and aborts the execution.
143 132
///
144
/// The following modes can be used in the assertion system:
145
///
146
/// - \c LEMON_ASSERT_LOG The failed assertion prints a short log
147
///   message to the standard error and continues the execution.
148
/// - \c LEMON_ASSERT_ABORT This mode is similar to the \c
149
///   LEMON_ASSERT_LOG, but it aborts the program. It is the default
150
///   behaviour.
133
/// However, the following modes can be used in the assertion system:
134
/// - \c LEMON_ASSERT_ABORT The failed assertion prints a short log message to
135
///   the standard error and aborts the program. It is the default behaviour.
151 136
/// - \c LEMON_ASSERT_CUSTOM The user can define own assertion handler
152 137
///   function.
153 138
///   \code
154 139
///     void custom_assert_handler(const char* file, int line,
155 140
///                                const char* function, const char* message,
156 141
///                                const char* assertion);
... ...
@@ -172,28 +157,12 @@
172 157
    LEMON_ASSERT_HANDLER(__FILE__, __LINE__,                            \
173 158
                         LEMON_FUNCTION_NAME,                           \
174 159
                         ::lemon::_assert_bits::cstringify(msg), #exp), 0)))
175 160

	
176 161
/// \ingroup exceptions
177 162
///
178
/// \brief Macro for mark not yet implemented features.
179
///
180
/// Macro for mark not yet implemented features and outstanding bugs.
181
/// It is close to be the shortcut of the following code:
182
/// \code
183
///   LEMON_ASSERT(false, msg);
184
/// \endcode
185
///
186
/// \see LEMON_ASSERT
187
#  define LEMON_FIXME(msg)                                              \
188
  (LEMON_ASSERT_HANDLER(__FILE__, __LINE__, LEMON_FUNCTION_NAME,        \
189
                        ::lemon::_assert_bits::cstringify(msg),         \
190
                        static_cast<const char*>(0)))
191

	
192
/// \ingroup exceptions
193
///
194 163
/// \brief Macro for internal assertions
195 164
///
196 165
/// Macro for internal assertions, it is used in the library to check
197 166
/// the consistency of results of algorithms, several pre- and
198 167
/// postconditions and invariants. The checking is disabled by
199 168
/// default, but it can be turned on with the macro \c
... ...
@@ -219,26 +188,20 @@
219 188
                         ::lemon::_assert_bits::cstringify(msg), #exp), 0)))
220 189

	
221 190
#else
222 191

	
223 192
#  ifndef LEMON_ASSERT_HANDLER
224 193
#    define LEMON_ASSERT(exp, msg)  (static_cast<void>(0))
225
#    define LEMON_FIXME(msg) (static_cast<void>(0))
226 194
#    define LEMON_DEBUG(exp, msg) (static_cast<void>(0))
227 195
#  else
228 196
#    define LEMON_ASSERT(exp, msg)                                      \
229 197
       (static_cast<void> (!!(exp) ? 0 : (                              \
230 198
        LEMON_ASSERT_HANDLER(__FILE__, __LINE__,                        \
231 199
                             LEMON_FUNCTION_NAME,                       \
232 200
                             ::lemon::_assert_bits::cstringify(msg),    \
233 201
                             #exp), 0)))
234
#    define LEMON_FIXME(msg)                                            \
235
       (LEMON_ASSERT_HANDLER(__FILE__, __LINE__, LEMON_FUNCTION_NAME,   \
236
                             ::lemon::_assert_bits::cstringify(msg),    \
237
                             static_cast<const char*>(0)))
238

	
239 202
#    if LEMON_ENABLE_DEBUG
240 203
#      define LEMON_DEBUG(exp, msg)                                     \
241 204
         (static_cast<void> (!!(exp) ? 0 : (                            \
242 205
           LEMON_ASSERT_HANDLER(__FILE__, __LINE__,                     \
243 206
                                LEMON_FUNCTION_NAME,                    \
244 207
                                ::lemon::_assert_bits::cstringify(msg), \
Ignore white space 6 line context
... ...
@@ -100,12 +100,13 @@
100 100
      for (nf->first(it); it != INVALID; nf->next(it)) {
101 101
        int id = nf->id(it);;
102 102
        allocator.construct(&(values[id]), value);
103 103
      }
104 104
    }
105 105

	
106
  private:
106 107
    /// \brief Constructor to copy a map of the same map type.
107 108
    ///
108 109
    /// Constructor to copy a map of the same map type.
109 110
    ArrayMap(const ArrayMap& copy) : Parent() {
110 111
      if (copy.attached()) {
111 112
        attach(*copy.notifier());
... ...
@@ -147,12 +148,13 @@
147 148
      for (nf->first(it); it != INVALID; nf->next(it)) {
148 149
        set(it, cmap[it]);
149 150
      }
150 151
      return *this;
151 152
    }
152 153

	
154
  public:
153 155
    /// \brief The destructor of the map.
154 156
    ///
155 157
    /// The destructor of the map.
156 158
    virtual ~ArrayMap() {
157 159
      if (attached()) {
158 160
        clear();
Ignore white space 12 line context
... ...
@@ -224,12 +224,13 @@
224 224

	
225 225
      explicit NodeMap(const Digraph& digraph)
226 226
        : Parent(digraph) {}
227 227
      NodeMap(const Digraph& digraph, const _Value& value)
228 228
        : Parent(digraph, value) {}
229 229

	
230
    private:
230 231
      NodeMap& operator=(const NodeMap& cmap) {
231 232
        return operator=<NodeMap>(cmap);
232 233
      }
233 234

	
234 235
      template <typename CMap>
235 236
      NodeMap& operator=(const CMap& cmap) {
... ...
@@ -248,12 +249,13 @@
248 249

	
249 250
      explicit ArcMap(const Digraph& digraph)
250 251
        : Parent(digraph) {}
251 252
      ArcMap(const Digraph& digraph, const _Value& value)
252 253
        : Parent(digraph, value) {}
253 254

	
255
    private:
254 256
      ArcMap& operator=(const ArcMap& cmap) {
255 257
        return operator=<ArcMap>(cmap);
256 258
      }
257 259

	
258 260
      template <typename CMap>
259 261
      ArcMap& operator=(const CMap& cmap) {
... ...
@@ -605,12 +607,13 @@
605 607

	
606 608
      NodeMap(const Graph& graph)
607 609
        : Parent(graph) {}
608 610
      NodeMap(const Graph& graph, const _Value& value)
609 611
        : Parent(graph, value) {}
610 612

	
613
    private:
611 614
      NodeMap& operator=(const NodeMap& cmap) {
612 615
        return operator=<NodeMap>(cmap);
613 616
      }
614 617

	
615 618
      template <typename CMap>
616 619
      NodeMap& operator=(const CMap& cmap) {
... ...
@@ -629,12 +632,13 @@
629 632

	
630 633
      ArcMap(const Graph& graph)
631 634
        : Parent(graph) {}
632 635
      ArcMap(const Graph& graph, const _Value& value)
633 636
        : Parent(graph, value) {}
634 637

	
638
    private:
635 639
      ArcMap& operator=(const ArcMap& cmap) {
636 640
        return operator=<ArcMap>(cmap);
637 641
      }
638 642

	
639 643
      template <typename CMap>
640 644
      ArcMap& operator=(const CMap& cmap) {
... ...
@@ -654,12 +658,13 @@
654 658
      EdgeMap(const Graph& graph)
655 659
        : Parent(graph) {}
656 660

	
657 661
      EdgeMap(const Graph& graph, const _Value& value)
658 662
        : Parent(graph, value) {}
659 663

	
664
    private:
660 665
      EdgeMap& operator=(const EdgeMap& cmap) {
661 666
        return operator=<EdgeMap>(cmap);
662 667
      }
663 668

	
664 669
      template <typename CMap>
665 670
      EdgeMap& operator=(const CMap& cmap) {
Ignore white space 6 line context
... ...
@@ -59,22 +59,24 @@
59 59
    MapExtender(const Graph& graph)
60 60
      : Parent(graph) {}
61 61

	
62 62
    MapExtender(const Graph& graph, const Value& value)
63 63
      : Parent(graph, value) {}
64 64

	
65
  private:
65 66
    MapExtender& operator=(const MapExtender& cmap) {
66 67
      return operator=<MapExtender>(cmap);
67 68
    }
68 69

	
69 70
    template <typename CMap>
70 71
    MapExtender& operator=(const CMap& cmap) {
71 72
      Parent::operator=(cmap);
72 73
      return *this;
73 74
    }
74 75

	
76
  public:
75 77
    class MapIt : public Item {
76 78
    public:
77 79

	
78 80
      typedef Item Parent;
79 81
      typedef typename Map::Value Value;
80 82

	
... ...
@@ -197,12 +199,13 @@
197 199
    SubMapExtender(const Graph& _graph)
198 200
      : Parent(_graph), graph(_graph) {}
199 201

	
200 202
    SubMapExtender(const Graph& _graph, const Value& _value)
201 203
      : Parent(_graph, _value), graph(_graph) {}
202 204

	
205
  private:
203 206
    SubMapExtender& operator=(const SubMapExtender& cmap) {
204 207
      return operator=<MapExtender>(cmap);
205 208
    }
206 209

	
207 210
    template <typename CMap>
208 211
    SubMapExtender& operator=(const CMap& cmap) {
... ...
@@ -211,12 +214,13 @@
211 214
      for (graph.first(it); it != INVALID; graph.next(it)) {
212 215
        Parent::set(it, cmap[it]);
213 216
      }
214 217
      return *this;
215 218
    }
216 219

	
220
  public:
217 221
    class MapIt : public Item {
218 222
    public:
219 223

	
220 224
      typedef Item Parent;
221 225
      typedef typename Map::Value Value;
222 226

	
Ignore white space 6 line context
... ...
@@ -97,12 +97,13 @@
97 97
    /// It adds all the items of the graph to the map.
98 98
    VectorMap(const Graph& graph, const Value& value) {
99 99
      Parent::attach(graph.notifier(Item()));
100 100
      container.resize(Parent::notifier()->maxId() + 1, value);
101 101
    }
102 102

	
103
  private:
103 104
    /// \brief Copy constructor
104 105
    ///
105 106
    /// Copy constructor.
106 107
    VectorMap(const VectorMap& _copy) : Parent() {
107 108
      if (_copy.attached()) {
108 109
        Parent::attach(*_copy.notifier());
Ignore white space 6 line context
... ...
@@ -431,12 +431,13 @@
431 431

	
432 432
        ///\e
433 433
        NodeMap(const Digraph&) { }
434 434
        ///\e
435 435
        NodeMap(const Digraph&, T) { }
436 436

	
437
      private:
437 438
        ///Copy constructor
438 439
        NodeMap(const NodeMap& nm) : ReadWriteMap< Node, T >(nm) { }
439 440
        ///Assignment operator
440 441
        template <typename CMap>
441 442
        NodeMap& operator=(const CMap&) {
442 443
          checkConcept<ReadMap<Node, T>, CMap>();
... ...
@@ -453,12 +454,13 @@
453 454
      public:
454 455

	
455 456
        ///\e
456 457
        ArcMap(const Digraph&) { }
457 458
        ///\e
458 459
        ArcMap(const Digraph&, T) { }
460
      private:
459 461
        ///Copy constructor
460 462
        ArcMap(const ArcMap& em) : ReadWriteMap<Arc,T>(em) { }
461 463
        ///Assignment operator
462 464
        template <typename CMap>
463 465
        ArcMap& operator=(const CMap&) {
464 466
          checkConcept<ReadMap<Arc, T>, CMap>();
Ignore white space 6 line context
... ...
@@ -509,12 +509,13 @@
509 509

	
510 510
        ///\e
511 511
        NodeMap(const Graph&) { }
512 512
        ///\e
513 513
        NodeMap(const Graph&, T) { }
514 514

	
515
      private:
515 516
        ///Copy constructor
516 517
        NodeMap(const NodeMap& nm) : ReadWriteMap< Node, T >(nm) { }
517 518
        ///Assignment operator
518 519
        template <typename CMap>
519 520
        NodeMap& operator=(const CMap&) {
520 521
          checkConcept<ReadMap<Node, T>, CMap>();
... ...
@@ -532,12 +533,13 @@
532 533
      public:
533 534

	
534 535
        ///\e
535 536
        ArcMap(const Graph&) { }
536 537
        ///\e
537 538
        ArcMap(const Graph&, T) { }
539
      private:
538 540
        ///Copy constructor
539 541
        ArcMap(const ArcMap& em) : ReadWriteMap<Arc,T>(em) { }
540 542
        ///Assignment operator
541 543
        template <typename CMap>
542 544
        ArcMap& operator=(const CMap&) {
543 545
          checkConcept<ReadMap<Arc, T>, CMap>();
... ...
@@ -555,12 +557,13 @@
555 557
      public:
556 558

	
557 559
        ///\e
558 560
        EdgeMap(const Graph&) { }
559 561
        ///\e
560 562
        EdgeMap(const Graph&, T) { }
563
      private:
561 564
        ///Copy constructor
562 565
        EdgeMap(const EdgeMap& em) : ReadWriteMap<Edge,T>(em) {}
563 566
        ///Assignment operator
564 567
        template <typename CMap>
565 568
        EdgeMap& operator=(const CMap&) {
566 569
          checkConcept<ReadMap<Edge, T>, CMap>();
Ignore white space 6 line context
... ...
@@ -1002,12 +1002,14 @@
1002 1002
      /// Construct a new map for the graph.
1003 1003
      explicit GraphMap(const Graph&) {}
1004 1004
      /// \brief Construct a new map with default value.
1005 1005
      ///
1006 1006
      /// Construct a new map for the graph and initalise the values.
1007 1007
      GraphMap(const Graph&, const Value&) {}
1008

	
1009
    private:
1008 1010
      /// \brief Copy constructor.
1009 1011
      ///
1010 1012
      /// Copy Constructor.
1011 1013
      GraphMap(const GraphMap&) : Parent() {}
1012 1014

	
1013 1015
      /// \brief Assign operator.
... ...
@@ -1018,28 +1020,30 @@
1018 1020
      template <typename CMap>
1019 1021
      GraphMap& operator=(const CMap&) {
1020 1022
        checkConcept<ReadMap<Key, Value>, CMap>();
1021 1023
        return *this;
1022 1024
      }
1023 1025

	
1026
    public:
1024 1027
      template<typename _Map>
1025 1028
      struct Constraints {
1026 1029
        void constraints() {
1027 1030
          checkConcept<ReadWriteMap<Key, Value>, _Map >();
1028 1031
          // Construction with a graph parameter
1029 1032
          _Map a(g);
1030 1033
          // Constructor with a graph and a default value parameter
1031 1034
          _Map a2(g,t);
1032 1035
          // Copy constructor.
1033
          _Map b(c);
1036
          // _Map b(c);
1034 1037

	
1035
          ReadMap<Key, Value> cmap;
1036
          b = cmap;
1038
          // ReadMap<Key, Value> cmap;
1039
          // b = cmap;
1037 1040

	
1041
          ignore_unused_variable_warning(a);
1038 1042
          ignore_unused_variable_warning(a2);
1039
          ignore_unused_variable_warning(b);
1043
          // ignore_unused_variable_warning(b);
1040 1044
        }
1041 1045

	
1042 1046
        const _Map &c;
1043 1047
        const Graph &g;
1044 1048
        const typename GraphMap::Value &t;
1045 1049
      };
... ...
@@ -1079,12 +1083,13 @@
1079 1083
        /// \brief Construct a new map with default value.
1080 1084
        ///
1081 1085
        /// Construct a new map for the digraph and initalise the values.
1082 1086
        NodeMap(const MappableDigraphComponent& digraph, const _Value& value)
1083 1087
          : Parent(digraph, value) {}
1084 1088

	
1089
      private:
1085 1090
        /// \brief Copy constructor.
1086 1091
        ///
1087 1092
        /// Copy Constructor.
1088 1093
        NodeMap(const NodeMap& nm) : Parent(nm) {}
1089 1094

	
1090 1095
        /// \brief Assign operator.
... ...
@@ -1116,12 +1121,13 @@
1116 1121
        /// \brief Construct a new map with default value.
1117 1122
        ///
1118 1123
        /// Construct a new map for the digraph and initalise the values.
1119 1124
        ArcMap(const MappableDigraphComponent& digraph, const _Value& value)
1120 1125
          : Parent(digraph, value) {}
1121 1126

	
1127
      private:
1122 1128
        /// \brief Copy constructor.
1123 1129
        ///
1124 1130
        /// Copy Constructor.
1125 1131
        ArcMap(const ArcMap& nm) : Parent(nm) {}
1126 1132

	
1127 1133
        /// \brief Assign operator.
... ...
@@ -1212,12 +1218,13 @@
1212 1218
        /// \brief Construct a new map with default value.
1213 1219
        ///
1214 1220
        /// Construct a new map for the graph and initalise the values.
1215 1221
        EdgeMap(const MappableGraphComponent& graph, const _Value& value)
1216 1222
          : Parent(graph, value) {}
1217 1223

	
1224
      private:
1218 1225
        /// \brief Copy constructor.
1219 1226
        ///
1220 1227
        /// Copy Constructor.
1221 1228
        EdgeMap(const EdgeMap& nm) : Parent(nm) {}
1222 1229

	
1223 1230
        /// \brief Assign operator.
Ignore white space 6 line context
... ...
@@ -44,20 +44,15 @@
44 44
}
45 45

	
46 46
void assertion_text_disable() {
47 47
  LEMON_ASSERT(false, "This is a fault message");
48 48
}
49 49

	
50
void fixme_disable() {
51
  LEMON_FIXME("fixme_disable() is fixme!");
52
}
53

	
54 50
void check_assertion_disable() {
55 51
  no_assertion_text_disable();
56 52
  assertion_text_disable();
57
  fixme_disable();
58 53
}
59 54
#undef LEMON_DISABLE_ASSERTS
60 55

	
61 56
//checking custom assert handler
62 57
#define LEMON_ASSERT_CUSTOM
63 58

	
... ...
@@ -75,21 +70,16 @@
75 70
}
76 71

	
77 72
void assertion_text_custom() {
78 73
  LEMON_ASSERT(false, "This is a fault message");
79 74
}
80 75

	
81
void fixme_custom() {
82
  LEMON_FIXME("fixme_custom() is fixme!");
83
}
84

	
85 76
void check_assertion_custom() {
86 77
  no_assertion_text_custom();
87 78
  assertion_text_custom();
88
  fixme_custom();
89
  check(cnt == 2, "The custom assert handler does not work");
79
  check(cnt == 1, "The custom assert handler does not work");
90 80
}
91 81

	
92 82
#undef LEMON_ASSERT_CUSTOM
93 83

	
94 84

	
95 85
int main() {
Ignore white space 6 line context
... ...
@@ -209,16 +209,16 @@
209 209
    s = s * (s - 1) / 2;
210 210
    for (NodeIt it(G); it != INVALID; ++it) {
211 211
      s -= map[it];
212 212
    }
213 213
    check(s == 0, "Wrong sum.");
214 214

	
215
    map = constMap<Node>(12);
216
    for (NodeIt it(G); it != INVALID; ++it) {
217
      check(map[it] == 12, "Wrong operator[].");
218
    }
215
    // map = constMap<Node>(12);
216
    // for (NodeIt it(G); it != INVALID; ++it) {
217
    //   check(map[it] == 12, "Wrong operator[].");
218
    // }
219 219
  }
220 220

	
221 221
  template <typename Graph>
222 222
  void checkGraphArcMap(const Graph& G) {
223 223
    typedef typename Graph::Arc Arc;
224 224
    typedef typename Graph::ArcIt ArcIt;
... ...
@@ -239,16 +239,16 @@
239 239
    s = s * (s - 1) / 2;
240 240
    for (ArcIt it(G); it != INVALID; ++it) {
241 241
      s -= map[it];
242 242
    }
243 243
    check(s == 0, "Wrong sum.");
244 244

	
245
    map = constMap<Arc>(12);
246
    for (ArcIt it(G); it != INVALID; ++it) {
247
      check(map[it] == 12, "Wrong operator[].");
248
    }
245
    // map = constMap<Arc>(12);
246
    // for (ArcIt it(G); it != INVALID; ++it) {
247
    //   check(map[it] == 12, "Wrong operator[].");
248
    // }
249 249
  }
250 250

	
251 251
  template <typename Graph>
252 252
  void checkGraphEdgeMap(const Graph& G) {
253 253
    typedef typename Graph::Edge Edge;
254 254
    typedef typename Graph::EdgeIt EdgeIt;
... ...
@@ -269,16 +269,16 @@
269 269
    s = s * (s - 1) / 2;
270 270
    for (EdgeIt it(G); it != INVALID; ++it) {
271 271
      s -= map[it];
272 272
    }
273 273
    check(s == 0, "Wrong sum.");
274 274

	
275
    map = constMap<Edge>(12);
276
    for (EdgeIt it(G); it != INVALID; ++it) {
277
      check(map[it] == 12, "Wrong operator[].");
278
    }
275
    // map = constMap<Edge>(12);
276
    // for (EdgeIt it(G); it != INVALID; ++it) {
277
    //   check(map[it] == 12, "Wrong operator[].");
278
    // }
279 279
  }
280 280

	
281 281

	
282 282
} //namespace lemon
283 283

	
284 284
#endif
0 comments (0 inline)