gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Merge
0 2 0
merge default
0 files changed with 24 insertions and 24 deletions:
↑ Collapse diff ↑
Ignore white space 96 line context
... ...
@@ -442,110 +442,110 @@
442 442
/**
443 443
@defgroup timecount Time measuring and Counting
444 444
@ingroup misc
445 445
\brief Simple tools for measuring the performance of algorithms.
446 446

	
447 447
This group describes simple tools for measuring the performance
448 448
of algorithms.
449 449
*/
450 450

	
451 451
/**
452 452
@defgroup graphbits Tools for Graph Implementation
453 453
@ingroup utils
454 454
\brief Tools to make it easier to create graphs.
455 455

	
456 456
This group describes the tools that makes it easier to create graphs and
457 457
the maps that dynamically update with the graph changes.
458 458
*/
459 459

	
460 460
/**
461 461
@defgroup exceptions Exceptions
462 462
@ingroup utils
463 463
\brief Exceptions defined in LEMON.
464 464

	
465 465
This group describes the exceptions defined in LEMON.
466 466
*/
467 467

	
468 468
/**
469 469
@defgroup io_group Input-Output
470 470
\brief Graph Input-Output methods
471 471

	
472 472
This group describes the tools for importing and exporting graphs 
473 473
and graph related data. Now it supports the LEMON format, the
474 474
\c DIMACS format and the encapsulated postscript (EPS) format.
475 475
*/
476 476

	
477 477
/**
478 478
@defgroup lemon_io Lemon Input-Output
479 479
@ingroup io_group
480 480
\brief Reading and writing LEMON format
481 481

	
482 482
This group describes methods for reading and writing LEMON format. 
483 483
You can find more about this format on the \ref graph-io-page "Graph Input-Output"
484 484
tutorial pages.
485 485
*/
486 486

	
487 487
/**
488 488
@defgroup section_io Section readers and writers
489 489
@ingroup lemon_io
490
\brief Section readers and writers for lemon Input-Output.
490
\brief Section readers and writers for LEMON Input-Output.
491 491

	
492
This group describes section readers and writers that can be attached to
493
\ref LemonReader and \ref LemonWriter.
492
This group describes section reader and writer classes that can be 
493
attached to \ref LemonReader and \ref LemonWriter.
494 494
*/
495 495

	
496 496
/**
497
@defgroup item_io Item Readers and Writers
497
@defgroup item_io Item readers and writers
498 498
@ingroup lemon_io
499
\brief Item readers and writers for lemon Input-Output.
499
\brief Item readers and writers for LEMON Input-Output.
500 500

	
501
The Input-Output classes can handle more data type by example
502
as map or attribute value. Each of these should be written and
503
read some way. The module make possible to do this.  
501
This group describes reader and writer classes for various data types
502
(e.g. map or attribute values). These classes can be attached to
503
\ref LemonReader and \ref LemonWriter.
504 504
*/
505 505

	
506 506
/**
507 507
@defgroup eps_io Postscript exporting
508 508
@ingroup io_group
509 509
\brief General \c EPS drawer and graph exporter
510 510

	
511 511
This group describes general \c EPS drawing methods and special
512 512
graph exporting tools. 
513 513
*/
514 514

	
515 515

	
516 516
/**
517 517
@defgroup concept Concepts
518 518
\brief Skeleton classes and concept checking classes
519 519

	
520 520
This group describes the data/algorithm skeletons and concept checking
521 521
classes implemented in LEMON.
522 522

	
523 523
The purpose of the classes in this group is fourfold.
524 524
 
525 525
- These classes contain the documentations of the concepts. In order
526 526
  to avoid document multiplications, an implementation of a concept
527 527
  simply refers to the corresponding concept class.
528 528

	
529 529
- These classes declare every functions, <tt>typedef</tt>s etc. an
530 530
  implementation of the concepts should provide, however completely
531 531
  without implementations and real data structures behind the
532 532
  interface. On the other hand they should provide nothing else. All
533 533
  the algorithms working on a data structure meeting a certain concept
534 534
  should compile with these classes. (Though it will not run properly,
535 535
  of course.) In this way it is easily to check if an algorithm
536 536
  doesn't use any extra feature of a certain implementation.
537 537

	
538 538
- The concept descriptor classes also provide a <em>checker class</em>
539 539
  that makes it possible to check whether a certain implementation of a
540 540
  concept indeed provides all the required features.
541 541

	
542 542
- Finally, They can serve as a skeleton of a new implementation of a concept.
543 543

	
544 544
*/
545 545

	
546 546

	
547 547
/**
548 548
@defgroup graph_concepts Graph Structure Concepts
549 549
@ingroup concept
550 550
\brief Skeleton and concept checking classes for graph structures
551 551

	
Ignore white space 96 line context
1 1
/* -*- C++ -*-
2 2
 *
3 3
 * This file is a part of LEMON, a generic C++ optimization library
4 4
 *
5 5
 * Copyright (C) 2003-2008
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_TOLERANCE_H
20 20
#define LEMON_TOLERANCE_H
21 21

	
22 22
///\ingroup misc
23 23
///\file
24 24
///\brief A basic tool to handle the anomalies of calculation with
25 25
///floating point numbers.
26 26
///
27 27
///\todo It should be in a module like "Basic tools"
28 28

	
29 29

	
30 30
namespace lemon {
31 31

	
32 32
  /// \addtogroup misc
33 33
  /// @{
34 34
  
35 35
  ///\brief A class to provide a basic way to
36 36
  ///handle the comparison of numbers that are obtained
37 37
  ///as a result of a probably inexact computation.
38 38
  ///
39 39
  ///\ref Tolerance is a class to provide a basic way to
40 40
  ///handle the comparison of numbers that are obtained
41 41
  ///as a result of a probably inexact computation.
42 42
  ///
43
  ///This is an abstract class, it should be specialized for all numerical
44
  ///data types. These specialized classes like \ref Tolerance<double>
45
  ///may offer additional tuning parameters.
43
  ///This is an abstract class, it should be specialized for all 
44
  ///numerical data types. These specialized classes like 
45
  ///Tolerance<double> may offer additional tuning parameters.
46 46
  ///
47 47
  ///\sa Tolerance<float>
48 48
  ///\sa Tolerance<double>
49 49
  ///\sa Tolerance<long double>
50 50
  ///\sa Tolerance<int>
51 51
  ///\sa Tolerance<long long int>
52 52
  ///\sa Tolerance<unsigned int>
53 53
  ///\sa Tolerance<unsigned long long int>
54 54

	
55 55
  template<class T>
56 56
  class Tolerance
57 57
  {
58 58
  public:
59 59
    typedef T Value;
60 60

	
61 61
    ///\name Comparisons
62 62
    ///The concept is that these bool functions return \c true only if
63 63
    ///the related comparisons hold even if some numerical error appeared
64 64
    ///during the computations.
65 65

	
66 66
    ///@{
67 67

	
68 68
    ///Returns \c true if \c a is \e surely strictly less than \c b
69 69
    static bool less(Value a,Value b) {return false;}
70 70
    ///Returns \c true if \c a is \e surely different from \c b
71 71
    static bool different(Value a,Value b) {return false;}
72 72
    ///Returns \c true if \c a is \e surely positive
73 73
    static bool positive(Value a) {return false;}
74 74
    ///Returns \c true if \c a is \e surely negative
75 75
    static bool negative(Value a) {return false;}
76 76
    ///Returns \c true if \c a is \e surely non-zero
77 77
    static bool nonZero(Value a) {return false;}
78 78

	
79 79
    ///@}
80 80

	
81 81
    ///Returns the zero value.
82 82
    static Value zero() {return T();}
83 83

	
84 84
    //   static bool finite(Value a) {}
85 85
    //   static Value big() {}
86 86
    //   static Value negativeBig() {}
87 87
  };
88 88

	
89 89

	
90 90
  ///Float specialization of Tolerance.
91 91

	
92 92
  ///Float specialization of Tolerance.
93 93
  ///\sa Tolerance
94 94
  ///\relates Tolerance
95 95
  template<>
96 96
  class Tolerance<float>
97 97
  {
98 98
    static float def_epsilon;
99 99
    float _epsilon;
100 100
  public:
101 101
    ///\e
102 102
    typedef float Value;
103 103

	
104 104
    ///Constructor setting the epsilon tolerance to the default value.
105 105
    Tolerance() : _epsilon(def_epsilon) {}
106 106
    ///Constructor setting the epsilon tolerance to the given value.
107 107
    Tolerance(float e) : _epsilon(e) {}
108 108

	
109 109
    ///Returns the epsilon value.
110 110
    Value epsilon() const {return _epsilon;}
111 111
    ///Sets the epsilon value.
112 112
    void epsilon(Value e) {_epsilon=e;}
113 113

	
114 114
    ///Returns the default epsilon value.
115 115
    static Value defaultEpsilon() {return def_epsilon;}
116 116
    ///Sets the default epsilon value.
117 117
    static void defaultEpsilon(Value e) {def_epsilon=e;}
118 118

	
119 119
    ///\name Comparisons
120
    ///See \ref Tolerance for more details.
120
    ///See \ref lemon::Tolerance "Tolerance" for more details.
121 121

	
122 122
    ///@{
123 123

	
124 124
    ///Returns \c true if \c a is \e surely strictly less than \c b
125 125
    bool less(Value a,Value b) const {return a+_epsilon<b;}
126 126
    ///Returns \c true if \c a is \e surely different from \c b
127 127
    bool different(Value a,Value b) const { return less(a,b)||less(b,a); }
128 128
    ///Returns \c true if \c a is \e surely positive
129 129
    bool positive(Value a) const { return _epsilon<a; }
130 130
    ///Returns \c true if \c a is \e surely negative
131 131
    bool negative(Value a) const { return -_epsilon>a; }
132 132
    ///Returns \c true if \c a is \e surely non-zero
133 133
    bool nonZero(Value a) const { return positive(a)||negative(a); }
134 134

	
135 135
    ///@}
136 136

	
137 137
    ///Returns zero
138 138
    static Value zero() {return 0;}
139 139
  };
140 140

	
141 141
  ///Double specialization of Tolerance.
142 142

	
143 143
  ///Double specialization of Tolerance.
144 144
  ///\sa Tolerance
145 145
  ///\relates Tolerance
146 146
  template<>
147 147
  class Tolerance<double>
148 148
  {
149 149
    static double def_epsilon;
150 150
    double _epsilon;
151 151
  public:
152 152
    ///\e
153 153
    typedef double Value;
154 154

	
155 155
    ///Constructor setting the epsilon tolerance to the default value.
156 156
    Tolerance() : _epsilon(def_epsilon) {}
157 157
    ///Constructor setting the epsilon tolerance to the given value.
158 158
    Tolerance(double e) : _epsilon(e) {}
159 159

	
160 160
    ///Returns the epsilon value.
161 161
    Value epsilon() const {return _epsilon;}
162 162
    ///Sets the epsilon value.
163 163
    void epsilon(Value e) {_epsilon=e;}
164 164

	
165 165
    ///Returns the default epsilon value.
166 166
    static Value defaultEpsilon() {return def_epsilon;}
167 167
    ///Sets the default epsilon value.
168 168
    static void defaultEpsilon(Value e) {def_epsilon=e;}
169 169

	
170 170
    ///\name Comparisons
171
    ///See \ref Tolerance for more details.
171
    ///See \ref lemon::Tolerance "Tolerance" for more details.
172 172

	
173 173
    ///@{
174 174

	
175 175
    ///Returns \c true if \c a is \e surely strictly less than \c b
176 176
    bool less(Value a,Value b) const {return a+_epsilon<b;}
177 177
    ///Returns \c true if \c a is \e surely different from \c b
178 178
    bool different(Value a,Value b) const { return less(a,b)||less(b,a); }
179 179
    ///Returns \c true if \c a is \e surely positive
180 180
    bool positive(Value a) const { return _epsilon<a; }
181 181
    ///Returns \c true if \c a is \e surely negative
182 182
    bool negative(Value a) const { return -_epsilon>a; }
183 183
    ///Returns \c true if \c a is \e surely non-zero
184 184
    bool nonZero(Value a) const { return positive(a)||negative(a); }
185 185

	
186 186
    ///@}
187 187

	
188 188
    ///Returns zero
189 189
    static Value zero() {return 0;}
190 190
  };
191 191

	
192 192
  ///Long double specialization of Tolerance.
193 193

	
194 194
  ///Long double specialization of Tolerance.
195 195
  ///\sa Tolerance
196 196
  ///\relates Tolerance
197 197
  template<>
198 198
  class Tolerance<long double>
199 199
  {
200 200
    static long double def_epsilon;
201 201
    long double _epsilon;
202 202
  public:
203 203
    ///\e
204 204
    typedef long double Value;
205 205

	
206 206
    ///Constructor setting the epsilon tolerance to the default value.
207 207
    Tolerance() : _epsilon(def_epsilon) {}
208 208
    ///Constructor setting the epsilon tolerance to the given value.
209 209
    Tolerance(long double e) : _epsilon(e) {}
210 210

	
211 211
    ///Returns the epsilon value.
212 212
    Value epsilon() const {return _epsilon;}
213 213
    ///Sets the epsilon value.
214 214
    void epsilon(Value e) {_epsilon=e;}
215 215

	
216 216
    ///Returns the default epsilon value.
217 217
    static Value defaultEpsilon() {return def_epsilon;}
218 218
    ///Sets the default epsilon value.
219 219
    static void defaultEpsilon(Value e) {def_epsilon=e;}
220 220

	
221 221
    ///\name Comparisons
222
    ///See \ref Tolerance for more details.
222
    ///See \ref lemon::Tolerance "Tolerance" for more details.
223 223

	
224 224
    ///@{
225 225

	
226 226
    ///Returns \c true if \c a is \e surely strictly less than \c b
227 227
    bool less(Value a,Value b) const {return a+_epsilon<b;}
228 228
    ///Returns \c true if \c a is \e surely different from \c b
229 229
    bool different(Value a,Value b) const { return less(a,b)||less(b,a); }
230 230
    ///Returns \c true if \c a is \e surely positive
231 231
    bool positive(Value a) const { return _epsilon<a; }
232 232
    ///Returns \c true if \c a is \e surely negative
233 233
    bool negative(Value a) const { return -_epsilon>a; }
234 234
    ///Returns \c true if \c a is \e surely non-zero
235 235
    bool nonZero(Value a) const { return positive(a)||negative(a); }
236 236

	
237 237
    ///@}
238 238

	
239 239
    ///Returns zero
240 240
    static Value zero() {return 0;}
241 241
  };
242 242

	
243 243
  ///Integer specialization of Tolerance.
244 244

	
245 245
  ///Integer specialization of Tolerance.
246 246
  ///\sa Tolerance
247 247
  template<>
248 248
  class Tolerance<int>
249 249
  {
250 250
  public:
251 251
    ///\e
252 252
    typedef int Value;
253 253

	
254 254
    ///\name Comparisons
255
    ///See \ref Tolerance for more details.
255
    ///See \ref lemon::Tolerance "Tolerance" for more details.
256 256

	
257 257
    ///@{
258 258

	
259 259
    ///Returns \c true if \c a is \e surely strictly less than \c b
260 260
    static bool less(Value a,Value b) { return a<b;}
261 261
    ///Returns \c true if \c a is \e surely different from \c b
262 262
    static bool different(Value a,Value b) { return a!=b; }
263 263
    ///Returns \c true if \c a is \e surely positive
264 264
    static bool positive(Value a) { return 0<a; }
265 265
    ///Returns \c true if \c a is \e surely negative
266 266
    static bool negative(Value a) { return 0>a; }
267 267
    ///Returns \c true if \c a is \e surely non-zero
268 268
    static bool nonZero(Value a) { return a!=0; }
269 269

	
270 270
    ///@}
271 271

	
272 272
    ///Returns zero
273 273
    static Value zero() {return 0;}
274 274
  };
275 275

	
276 276
  ///Unsigned integer specialization of Tolerance.
277 277

	
278
  ///Unsigned integer specialization of \ref Tolerance.
278
  ///Unsigned integer specialization of Tolerance.
279 279
  ///\sa Tolerance
280 280
  template<>
281 281
  class Tolerance<unsigned int>
282 282
  {
283 283
  public:
284 284
    ///\e
285 285
    typedef unsigned int Value;
286 286

	
287 287
    ///\name Comparisons
288
    ///See \ref Tolerance for more details.
288
    ///See \ref lemon::Tolerance "Tolerance" for more details.
289 289

	
290 290
    ///@{
291 291

	
292 292
    ///Returns \c true if \c a is \e surely strictly less than \c b
293 293
    static bool less(Value a,Value b) { return a<b;}
294 294
    ///Returns \c true if \c a is \e surely different from \c b
295 295
    static bool different(Value a,Value b) { return a!=b; }
296 296
    ///Returns \c true if \c a is \e surely positive
297 297
    static bool positive(Value a) { return 0<a; }
298 298
    ///Returns \c true if \c a is \e surely negative
299 299
    static bool negative(Value) { return false; }
300 300
    ///Returns \c true if \c a is \e surely non-zero
301 301
    static bool nonZero(Value a) { return a!=0; }
302 302

	
303 303
    ///@}
304 304

	
305 305
    ///Returns zero
306 306
    static Value zero() {return 0;}
307 307
  };
308 308
  
309 309

	
310 310
  ///Long integer specialization of Tolerance.
311 311

	
312 312
  ///Long integer specialization of Tolerance.
313 313
  ///\sa Tolerance
314 314
  template<>
315 315
  class Tolerance<long int>
316 316
  {
317 317
  public:
318 318
    ///\e
319 319
    typedef long int Value;
320 320

	
321 321
    ///\name Comparisons
322
    ///See \ref Tolerance for more details.
322
    ///See \ref lemon::Tolerance "Tolerance" for more details.
323 323

	
324 324
    ///@{
325 325

	
326 326
    ///Returns \c true if \c a is \e surely strictly less than \c b
327 327
    static bool less(Value a,Value b) { return a<b;}
328 328
    ///Returns \c true if \c a is \e surely different from \c b
329 329
    static bool different(Value a,Value b) { return a!=b; }
330 330
    ///Returns \c true if \c a is \e surely positive
331 331
    static bool positive(Value a) { return 0<a; }
332 332
    ///Returns \c true if \c a is \e surely negative
333 333
    static bool negative(Value a) { return 0>a; }
334 334
    ///Returns \c true if \c a is \e surely non-zero
335 335
    static bool nonZero(Value a) { return a!=0;}
336 336

	
337 337
    ///@}
338 338

	
339 339
    ///Returns zero
340 340
    static Value zero() {return 0;}
341 341
  };
342 342

	
343 343
  ///Unsigned long integer specialization of Tolerance.
344 344

	
345
  ///Unsigned long integer specialization of \ref Tolerance.
345
  ///Unsigned long integer specialization of Tolerance.
346 346
  ///\sa Tolerance
347 347
  template<>
348 348
  class Tolerance<unsigned long int>
349 349
  {
350 350
  public:
351 351
    ///\e
352 352
    typedef unsigned long int Value;
353 353

	
354 354
    ///\name Comparisons
355
    ///See \ref Tolerance for more details.
355
    ///See \ref lemon::Tolerance "Tolerance" for more details.
356 356

	
357 357
    ///@{
358 358

	
359 359
    ///Returns \c true if \c a is \e surely strictly less than \c b
360 360
    static bool less(Value a,Value b) { return a<b;}
361 361
    ///Returns \c true if \c a is \e surely different from \c b
362 362
    static bool different(Value a,Value b) { return a!=b; }
363 363
    ///Returns \c true if \c a is \e surely positive
364 364
    static bool positive(Value a) { return 0<a; }
365 365
    ///Returns \c true if \c a is \e surely negative
366 366
    static bool negative(Value) { return false; }
367 367
    ///Returns \c true if \c a is \e surely non-zero
368 368
    static bool nonZero(Value a) { return a!=0;}
369 369

	
370 370
    ///@}
371 371

	
372 372
    ///Returns zero
373 373
    static Value zero() {return 0;}
374 374
  };
375 375

	
376 376
#if defined __GNUC__ && !defined __STRICT_ANSI__
377 377

	
378 378
  ///Long long integer specialization of Tolerance.
379 379

	
380
  ///Long long integer specialization of \ref Tolerance.
380
  ///Long long integer specialization of Tolerance.
381 381
  ///\warning This class (more exactly, type <tt>long long</tt>)
382 382
  ///is not ansi compatible.
383 383
  ///\sa Tolerance
384 384
  template<>
385 385
  class Tolerance<long long int>
386 386
  {
387 387
  public:
388 388
    ///\e
389 389
    typedef long long int Value;
390 390

	
391 391
    ///\name Comparisons
392
    ///See \ref Tolerance for more details.
392
    ///See \ref lemon::Tolerance "Tolerance" for more details.
393 393

	
394 394
    ///@{
395 395

	
396 396
    ///Returns \c true if \c a is \e surely strictly less than \c b
397 397
    static bool less(Value a,Value b) { return a<b;}
398 398
    ///Returns \c true if \c a is \e surely different from \c b
399 399
    static bool different(Value a,Value b) { return a!=b; }
400 400
    ///Returns \c true if \c a is \e surely positive
401 401
    static bool positive(Value a) { return 0<a; }
402 402
    ///Returns \c true if \c a is \e surely negative
403 403
    static bool negative(Value a) { return 0>a; }
404 404
    ///Returns \c true if \c a is \e surely non-zero
405 405
    static bool nonZero(Value a) { return a!=0;}
406 406

	
407 407
    ///@}
408 408

	
409 409
    ///Returns zero
410 410
    static Value zero() {return 0;}
411 411
  };
412 412

	
413 413
  ///Unsigned long long integer specialization of Tolerance.
414 414

	
415
  ///Unsigned long long integer specialization of \ref Tolerance.
415
  ///Unsigned long long integer specialization of Tolerance.
416 416
  ///\warning This class (more exactly, type <tt>unsigned long long</tt>)
417 417
  ///is not ansi compatible.
418 418
  ///\sa Tolerance
419 419
  template<>
420 420
  class Tolerance<unsigned long long int>
421 421
  {
422 422
  public:
423 423
    ///\e
424 424
    typedef unsigned long long int Value;
425 425

	
426 426
    ///\name Comparisons
427
    ///See \ref Tolerance for more details.
427
    ///See \ref lemon::Tolerance "Tolerance" for more details.
428 428

	
429 429
    ///@{
430 430

	
431 431
    ///Returns \c true if \c a is \e surely strictly less than \c b
432 432
    static bool less(Value a,Value b) { return a<b;}
433 433
    ///Returns \c true if \c a is \e surely different from \c b
434 434
    static bool different(Value a,Value b) { return a!=b; }
435 435
    ///Returns \c true if \c a is \e surely positive
436 436
    static bool positive(Value a) { return 0<a; }
437 437
    ///Returns \c true if \c a is \e surely negative
438 438
    static bool negative(Value) { return false; }
439 439
    ///Returns \c true if \c a is \e surely non-zero
440 440
    static bool nonZero(Value a) { return a!=0;}
441 441

	
442 442
    ///@}
443 443

	
444 444
    ///Returns zero
445 445
    static Value zero() {return 0;}
446 446
  };
447 447

	
448 448
#endif
449 449

	
450 450
  /// @}
451 451

	
452 452
} //namespace lemon
453 453

	
454 454
#endif //LEMON_TOLERANCE_H
0 comments (0 inline)