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