15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- TypeTraits.h -------------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef MCLD_ADT_TYPETRAITS_H_
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define MCLD_ADT_TYPETRAITS_H_
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <cstdlib>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1487f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesnamespace mcld {
1587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1637b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <typename DataType>
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaostruct NonConstTraits;
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1937b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <typename DataType>
2037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesstruct ConstTraits {
2137b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef DataType value_type;
2237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef const DataType* pointer;
2337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef const DataType& reference;
2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef size_t size_type;
2537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef ConstTraits<DataType> const_traits;
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef NonConstTraits<DataType> nonconst_traits;
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2937b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <typename DataType>
3037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesstruct NonConstTraits {
3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef DataType value_type;
3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef DataType* pointer;
3337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef DataType& reference;
3437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef size_t size_type;
3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef ConstTraits<DataType> const_traits;
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef NonConstTraits<DataType> nonconst_traits;
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3937b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <typename DataType>
4037b74a387bb3993387029859c2d9d051c41c724eStephen Hinesstruct ConstIteratorTraits {
4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef DataType value_type;
4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef const DataType* pointer;
4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef const DataType& reference;
4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef size_t size_type;
4537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef ConstTraits<DataType> const_traits;
4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef NonConstTraits<DataType> nonconst_traits;
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename DataType::const_iterator iterator;
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5037b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <typename DataType>
5137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesstruct NonConstIteratorTraits {
5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef DataType value_type;
5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef DataType* pointer;
5437b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef DataType& reference;
5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef size_t size_type;
5637b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef ConstTraits<DataType> const_traits;
5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  typedef NonConstTraits<DataType> nonconst_traits;
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename DataType::iterator iterator;
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
62affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
6337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif  // MCLD_ADT_TYPETRAITS_H_
64