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_ADT_TYPETRAITS_H_
     10 #define MCLD_ADT_TYPETRAITS_H_
     11 
     12 #include <cstdlib>
     13 
     14 namespace mcld {
     15 
     16 template <typename DataType>
     17 struct NonConstTraits;
     18 
     19 template <typename DataType>
     20 struct ConstTraits {
     21   typedef DataType value_type;
     22   typedef const DataType* pointer;
     23   typedef const DataType& reference;
     24   typedef size_t size_type;
     25   typedef ConstTraits<DataType> const_traits;
     26   typedef NonConstTraits<DataType> nonconst_traits;
     27 };
     28 
     29 template <typename DataType>
     30 struct NonConstTraits {
     31   typedef DataType value_type;
     32   typedef DataType* pointer;
     33   typedef DataType& reference;
     34   typedef size_t size_type;
     35   typedef ConstTraits<DataType> const_traits;
     36   typedef NonConstTraits<DataType> nonconst_traits;
     37 };
     38 
     39 template <typename DataType>
     40 struct ConstIteratorTraits {
     41   typedef DataType value_type;
     42   typedef const DataType* pointer;
     43   typedef const DataType& reference;
     44   typedef size_t size_type;
     45   typedef ConstTraits<DataType> const_traits;
     46   typedef NonConstTraits<DataType> nonconst_traits;
     47   typedef typename DataType::const_iterator iterator;
     48 };
     49 
     50 template <typename DataType>
     51 struct NonConstIteratorTraits {
     52   typedef DataType value_type;
     53   typedef DataType* pointer;
     54   typedef DataType& reference;
     55   typedef size_t size_type;
     56   typedef ConstTraits<DataType> const_traits;
     57   typedef NonConstTraits<DataType> nonconst_traits;
     58   typedef typename DataType::iterator iterator;
     59 };
     60 
     61 }  // namespace mcld
     62 
     63 #endif  // MCLD_ADT_TYPETRAITS_H_
     64