yat/utility/TypeInfo.h

Code
Comments
Other
Rev Date Author Line
861 07 Sep 07 peter 1 #ifndef _theplu_yat_utility_type_info_
861 07 Sep 07 peter 2 #define _theplu_yat_utility_type_info_
861 07 Sep 07 peter 3
861 07 Sep 07 peter 4 // $Id$
861 07 Sep 07 peter 5
861 07 Sep 07 peter 6 /*
4359 23 Aug 23 peter 7   Copyright (C) 2007 Peter Johansson
4359 23 Aug 23 peter 8   Copyright (C) 2008 Jari Häkkinen, Peter Johansson
4359 23 Aug 23 peter 9   Copyright (C) 2009 Peter Johansson
861 07 Sep 07 peter 10
1437 25 Aug 08 peter 11   This file is part of the yat library, http://dev.thep.lu.se/yat
861 07 Sep 07 peter 12
861 07 Sep 07 peter 13   The yat library is free software; you can redistribute it and/or
861 07 Sep 07 peter 14   modify it under the terms of the GNU General Public License as
1486 09 Sep 08 jari 15   published by the Free Software Foundation; either version 3 of the
861 07 Sep 07 peter 16   License, or (at your option) any later version.
861 07 Sep 07 peter 17
861 07 Sep 07 peter 18   The yat library is distributed in the hope that it will be useful,
861 07 Sep 07 peter 19   but WITHOUT ANY WARRANTY; without even the implied warranty of
861 07 Sep 07 peter 20   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
861 07 Sep 07 peter 21   General Public License for more details.
861 07 Sep 07 peter 22
861 07 Sep 07 peter 23   You should have received a copy of the GNU General Public License
1487 10 Sep 08 jari 24   along with yat. If not, see <http://www.gnu.org/licenses/>.
861 07 Sep 07 peter 25 */
861 07 Sep 07 peter 26
861 07 Sep 07 peter 27 #include <string>
861 07 Sep 07 peter 28 #include <typeinfo>
861 07 Sep 07 peter 29
861 07 Sep 07 peter 30 namespace theplu {
861 07 Sep 07 peter 31 namespace yat {
861 07 Sep 07 peter 32 namespace utility {
861 07 Sep 07 peter 33
861 07 Sep 07 peter 34   /**
861 07 Sep 07 peter 35      @brief Wrapper class for storing std::type_info
861 07 Sep 07 peter 36   */
861 07 Sep 07 peter 37   class TypeInfo
861 07 Sep 07 peter 38   {
861 07 Sep 07 peter 39   public:
861 07 Sep 07 peter 40     /**
4200 19 Aug 22 peter 41        @brief Constructor
861 07 Sep 07 peter 42     */
861 07 Sep 07 peter 43     // For STL container usage
861 07 Sep 07 peter 44     TypeInfo(void);
861 07 Sep 07 peter 45
861 07 Sep 07 peter 46     /**
4200 19 Aug 22 peter 47        @brief Constructor
861 07 Sep 07 peter 48     */
966 11 Oct 07 peter 49     // For convenience we allow implicit conversion from type_info to
966 11 Oct 07 peter 50     // TypeInfo.
861 07 Sep 07 peter 51     TypeInfo(const std::type_info&);
861 07 Sep 07 peter 52
861 07 Sep 07 peter 53     /**
966 11 Oct 07 peter 54        \return stored type_info
861 07 Sep 07 peter 55      */
861 07 Sep 07 peter 56     const std::type_info& get(void) const;
861 07 Sep 07 peter 57
861 07 Sep 07 peter 58     /**
861 07 Sep 07 peter 59        \return name of type
861 07 Sep 07 peter 60      */
861 07 Sep 07 peter 61     std::string name(void) const;
861 07 Sep 07 peter 62
861 07 Sep 07 peter 63     /**
861 07 Sep 07 peter 64        @brief assignment operator
861 07 Sep 07 peter 65     */
861 07 Sep 07 peter 66     TypeInfo& operator=(const TypeInfo&);
861 07 Sep 07 peter 67
861 07 Sep 07 peter 68   private:
861 07 Sep 07 peter 69     // Using compiler generated copy constructor
861 07 Sep 07 peter 70     // TypeInfo(const TypeInfo&);
861 07 Sep 07 peter 71     // Using compiler generated assignment operator
861 07 Sep 07 peter 72     // TypeInfo(const TypeInfo&);
861 07 Sep 07 peter 73
861 07 Sep 07 peter 74     const std::type_info* info_;
861 07 Sep 07 peter 75   };
861 07 Sep 07 peter 76
872 18 Sep 07 peter 77   /**
872 18 Sep 07 peter 78      \brief Equality comparison
872 18 Sep 07 peter 79      \return true iff underlying std::type_info are equal
1887 31 Mar 09 peter 80
1887 31 Mar 09 peter 81      \relates TypeInfo
4200 19 Aug 22 peter 82    */
861 07 Sep 07 peter 83   bool operator==(const TypeInfo&, const TypeInfo&);
872 18 Sep 07 peter 84
872 18 Sep 07 peter 85   /**
872 18 Sep 07 peter 86      \brief Based on operator==
1887 31 Mar 09 peter 87
1887 31 Mar 09 peter 88      \relates TypeInfo
4200 19 Aug 22 peter 89    */
861 07 Sep 07 peter 90   bool operator!=(const TypeInfo&, const TypeInfo&);
872 18 Sep 07 peter 91
872 18 Sep 07 peter 92   /**
872 18 Sep 07 peter 93      \brief Ordering relation
872 18 Sep 07 peter 94      \return true iff underlying lhs.get()<rhs.get()
1887 31 Mar 09 peter 95
1887 31 Mar 09 peter 96      \relates TypeInfo
4200 19 Aug 22 peter 97    */
872 18 Sep 07 peter 98   bool operator<(const TypeInfo& lhs, const TypeInfo& rhs);
872 18 Sep 07 peter 99
872 18 Sep 07 peter 100   /**
872 18 Sep 07 peter 101      \brief Based on operators == and <
1887 31 Mar 09 peter 102
1887 31 Mar 09 peter 103      \relates TypeInfo
4200 19 Aug 22 peter 104    */
861 07 Sep 07 peter 105   bool operator<=(const TypeInfo&, const TypeInfo&);
872 18 Sep 07 peter 106
872 18 Sep 07 peter 107   /**
1437 25 Aug 08 peter 108      \brief Based on operator <
1887 31 Mar 09 peter 109
1887 31 Mar 09 peter 110      \relates TypeInfo
4200 19 Aug 22 peter 111    */
861 07 Sep 07 peter 112   bool operator>(const TypeInfo&, const TypeInfo&);
872 18 Sep 07 peter 113
872 18 Sep 07 peter 114   /**
1437 25 Aug 08 peter 115      \brief Based on operator <=
1887 31 Mar 09 peter 116
1887 31 Mar 09 peter 117      \relates TypeInfo
4200 19 Aug 22 peter 118    */
861 07 Sep 07 peter 119   bool operator>=(const TypeInfo&, const TypeInfo&);
861 07 Sep 07 peter 120
861 07 Sep 07 peter 121 }}} // of namespace utility, yat, and theplu
861 07 Sep 07 peter 122
861 07 Sep 07 peter 123 #endif