deba@701: // -*- mode:C++ -*- deba@701: deba@701: #ifndef HUGO_INVALID_H deba@701: #define HUGO_INVALID_H deba@701: deba@701: ///\file deba@701: ///\brief Definition of INVALID. deba@701: deba@701: namespace hugo { deba@701: deba@701: /// Dummy type to make it easier to make invalid iterators. deba@701: deba@701: /// See \ref INVALID, how to use it. deba@701: deba@701: struct Invalid { deba@701: public: deba@701: bool operator==(Invalid) { return true; } deba@701: bool operator!=(Invalid) { return false; } deba@701: bool operator< (Invalid) { return false; } deba@701: }; deba@701: deba@701: /// Invalid iterators. deba@701: deba@701: /// \ref Invalid is a global type that converts to each iterator deba@701: /// in such a way that the value of the target iterator will be invalid. deba@701: deba@701: // It is also used to convert the \c INVALID constant to the deba@701: // node iterator that makes is possible to write deba@701: deba@701: //extern Invalid INVALID; deba@701: deba@701: //const Invalid &INVALID = *(Invalid *)0; deba@701: const Invalid INVALID = Invalid(); deba@701: deba@701: } //namespace hugo deba@701: deba@701: #endif deba@701: