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