1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/lemon/bits/invalid.h Thu Dec 20 15:59:06 2007 +0000
1.3 @@ -0,0 +1,54 @@
1.4 +/* -*- C++ -*-
1.5 + *
1.6 + * This file is a part of LEMON, a generic C++ optimization library
1.7 + *
1.8 + * Copyright (C) 2003-2007
1.9 + * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
1.10 + * (Egervary Research Group on Combinatorial Optimization, EGRES).
1.11 + *
1.12 + * Permission to use, modify and distribute this software is granted
1.13 + * provided that this copyright notice appears in all copies. For
1.14 + * precise terms see the accompanying LICENSE file.
1.15 + *
1.16 + * This software is provided "AS IS" with no warranty of any kind,
1.17 + * express or implied, and with no claim as to its suitability for any
1.18 + * purpose.
1.19 + *
1.20 + */
1.21 +
1.22 +#ifndef LEMON_BITS_INVALID_H
1.23 +#define LEMON_BITS_INVALID_H
1.24 +
1.25 +///\file
1.26 +///\brief Definition of INVALID.
1.27 +
1.28 +namespace lemon {
1.29 +
1.30 + /// \brief Dummy type to make it easier to make invalid iterators.
1.31 + ///
1.32 + /// See \ref INVALID for the usage.
1.33 + struct Invalid {
1.34 + public:
1.35 + bool operator==(Invalid) { return true; }
1.36 + bool operator!=(Invalid) { return false; }
1.37 + bool operator< (Invalid) { return false; }
1.38 + };
1.39 +
1.40 + /// Invalid iterators.
1.41 +
1.42 + /// \ref Invalid is a global type that converts to each iterator
1.43 + /// in such a way that the value of the target iterator will be invalid.
1.44 +
1.45 + //Some people didn't like this:
1.46 + //const Invalid &INVALID = *(Invalid *)0;
1.47 +
1.48 +#ifdef LEMON_ONLY_TEMPLATES
1.49 + const Invalid INVALID = Invalid();
1.50 +#else
1.51 + extern const Invalid INVALID;
1.52 +#endif
1.53 +
1.54 +} //namespace lemon
1.55 +
1.56 +#endif
1.57 +