TypeTraits.h revision d8a752331fe7a30ce41835f139aa8a4c675ad07a
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 17namespace mcld 18{ 19template<typename DataType> 20struct NonConstTraits; 21 22template<typename DataType> 23struct 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 33template<typename DataType> 34struct 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 44template<typename DataType> 45struct 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 56template<typename DataType> 57struct 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