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//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_TYPE_TRAITS_H
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_TYPE_TRAITS_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <cstdlib>
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<typename DataType>
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaostruct NonConstTraits;
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<typename DataType>
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaostruct ConstTraits
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataType                 value_type;
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef const DataType*          pointer;
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef const DataType&          reference;
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef size_t                   size_type;
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef ConstTraits<DataType>    const_traits;
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef NonConstTraits<DataType> nonconst_traits;
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<typename DataType>
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaostruct NonConstTraits
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataType                 value_type;
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataType*                pointer;
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataType&                reference;
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef size_t                   size_type;
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef ConstTraits<DataType>    const_traits;
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef NonConstTraits<DataType> nonconst_traits;
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<typename DataType>
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaostruct ConstIteratorTraits
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataType                          value_type;
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef const DataType*                   pointer;
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef const DataType&                   reference;
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef size_t                            size_type;
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef ConstTraits<DataType>             const_traits;
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef NonConstTraits<DataType>          nonconst_traits;
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename DataType::const_iterator iterator;
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<typename DataType>
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaostruct NonConstIteratorTraits
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataType                    value_type;
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataType*                   pointer;
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataType&                   reference;
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef size_t                      size_type;
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef ConstTraits<DataType>       const_traits;
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef NonConstTraits<DataType>    nonconst_traits;
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename DataType::iterator iterator;
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
71affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
72