Home | History | Annotate | Download | only in ADT
      1 //===- TypeTraits.h -------------------------------------------------------===//
      2 //
      3 //                     The MCLinker Project
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 #ifndef MCLD_TYPE_TRAITS_H
     10 #define MCLD_TYPE_TRAITS_H
     11 #ifdef ENABLE_UNITTEST
     12 #include <gtest.h>
     13 #endif
     14 
     15 #include <cstdlib>
     16 
     17 namespace mcld
     18 {
     19 template<typename DataType>
     20 struct NonConstTraits;
     21 
     22 template<typename DataType>
     23 struct ConstTraits
     24 {
     25   typedef DataType                 value_type;
     26   typedef const DataType*          pointer;
     27   typedef const DataType&          reference;
     28   typedef size_t                   size_type;
     29   typedef ConstTraits<DataType>    const_traits;
     30   typedef NonConstTraits<DataType> nonconst_traits;
     31 };
     32 
     33 template<typename DataType>
     34 struct NonConstTraits
     35 {
     36   typedef DataType                 value_type;
     37   typedef DataType*                pointer;
     38   typedef DataType&                reference;
     39   typedef size_t                   size_type;
     40   typedef ConstTraits<DataType>    const_traits;
     41   typedef NonConstTraits<DataType> nonconst_traits;
     42 };
     43 
     44 template<typename DataType>
     45 struct ConstIteratorTraits
     46 {
     47   typedef DataType                          value_type;
     48   typedef const DataType*                   pointer;
     49   typedef const DataType&                   reference;
     50   typedef size_t                            size_type;
     51   typedef ConstTraits<DataType>             const_traits;
     52   typedef NonConstTraits<DataType>          nonconst_traits;
     53   typedef typename DataType::const_iterator iterator;
     54 };
     55 
     56 template<typename DataType>
     57 struct NonConstIteratorTraits
     58 {
     59   typedef DataType                    value_type;
     60   typedef DataType*                   pointer;
     61   typedef DataType&                   reference;
     62   typedef size_t                      size_type;
     63   typedef ConstTraits<DataType>       const_traits;
     64   typedef NonConstTraits<DataType>    nonconst_traits;
     65   typedef typename DataType::iterator iterator;
     66 };
     67 
     68 } // namespace of mcld
     69 
     70 #endif
     71