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