epoc32/include/stdapis/stlportv5/stl/_ptrs_specialize.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
#ifndef _STLP_PTRS_SPECIALIZE_H
williamr@4
     2
#define _STLP_PTRS_SPECIALIZE_H
williamr@4
     3
williamr@4
     4
#ifndef _STLP_TYPE_TRAITS_H
williamr@4
     5
#  include <stl/type_traits.h>
williamr@4
     6
#endif
williamr@2
     7
williamr@2
     8
// the following is a workaround for arrow operator problems
williamr@4
     9
#if defined  ( _STLP_NO_ARROW_OPERATOR )
williamr@2
    10
// User wants to disable proxy -> operators
williamr@4
    11
#  define _STLP_DEFINE_ARROW_OPERATOR
williamr@4
    12
#  define _STLP_ARROW_SPECIALIZE_WITH_PTRS(_Tp)
williamr@4
    13
#else
williamr@2
    14
// Compiler can handle generic -> operator.
williamr@2
    15
#  define _STLP_ARROW_SPECIALIZE_WITH_PTRS(_Tp)
williamr@4
    16
#  if defined (__BORLANDC__)
williamr@4
    17
#    define _STLP_DEFINE_ARROW_OPERATOR  pointer operator->() const { return &(*(*this)); }
williamr@4
    18
#  elif defined(__WATCOMC__)
williamr@4
    19
#    define _STLP_DEFINE_ARROW_OPERATOR pointer operator->() const { reference x = operator*(); return &x; }
williamr@2
    20
#  else
williamr@4
    21
#    define _STLP_DEFINE_ARROW_OPERATOR  pointer operator->() const { return &(operator*()); }
williamr@2
    22
#  endif
williamr@4
    23
#endif /* _STLP_NO_ARROW_OPERATOR */
williamr@2
    24
williamr@2
    25
// Important pointers specializations
williamr@2
    26
williamr@4
    27
#ifdef _STLP_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS
williamr@2
    28
#  define _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type)
williamr@2
    29
#  define _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type)
williamr@4
    30
#else
williamr@4
    31
#  define _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type) _STLP_TEMPLATE_NULL struct __type_traits<_Type> : __type_traits_aux<1> {};
williamr@2
    32
#  define _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type) \
williamr@2
    33
_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type*) \
williamr@2
    34
_STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type*) \
williamr@2
    35
_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type**) \
williamr@2
    36
_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type* const *) \
williamr@2
    37
_STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type**) \
williamr@2
    38
_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type***) \
williamr@2
    39
_STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type***)
williamr@4
    40
#endif
williamr@2
    41
williamr@2
    42
# define _STLP_POINTERS_SPECIALIZE(_Type) _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type) _STLP_ARROW_SPECIALIZE_WITH_PTRS(_Type)
williamr@2
    43
williamr@4
    44
_STLP_BEGIN_NAMESPACE
williamr@4
    45
williamr@2
    46
#  if !defined ( _STLP_NO_BOOL )
williamr@2
    47
_STLP_POINTERS_SPECIALIZE( bool )
williamr@2
    48
#  endif
williamr@2
    49
_STLP_TYPE_TRAITS_POD_SPECIALIZE_V(void)
williamr@2
    50
# ifndef _STLP_NO_SIGNED_BUILTINS
williamr@2
    51
  _STLP_POINTERS_SPECIALIZE( signed char )
williamr@2
    52
# endif
williamr@2
    53
  _STLP_POINTERS_SPECIALIZE( char )
williamr@2
    54
  _STLP_POINTERS_SPECIALIZE( unsigned char )
williamr@2
    55
  _STLP_POINTERS_SPECIALIZE( short )
williamr@2
    56
  _STLP_POINTERS_SPECIALIZE( unsigned short )
williamr@2
    57
  _STLP_POINTERS_SPECIALIZE( int )
williamr@2
    58
  _STLP_POINTERS_SPECIALIZE( unsigned int )
williamr@2
    59
  _STLP_POINTERS_SPECIALIZE( long )
williamr@2
    60
  _STLP_POINTERS_SPECIALIZE( unsigned long )
williamr@2
    61
  _STLP_POINTERS_SPECIALIZE( float )
williamr@2
    62
  _STLP_POINTERS_SPECIALIZE( double )
williamr@2
    63
#  if !defined ( _STLP_NO_LONG_DOUBLE )
williamr@2
    64
  _STLP_POINTERS_SPECIALIZE( long double )
williamr@2
    65
#  endif
williamr@2
    66
#  if defined ( _STLP_LONG_LONG)
williamr@2
    67
  _STLP_POINTERS_SPECIALIZE( _STLP_LONG_LONG )
williamr@2
    68
  _STLP_POINTERS_SPECIALIZE( unsigned _STLP_LONG_LONG )
williamr@2
    69
#  endif
williamr@2
    70
#if defined ( _STLP_HAS_WCHAR_T ) && ! defined (_STLP_WCHAR_T_IS_USHORT)
williamr@2
    71
  _STLP_POINTERS_SPECIALIZE( wchar_t )
williamr@2
    72
#  endif
williamr@2
    73
williamr@4
    74
_STLP_END_NAMESPACE
williamr@4
    75
williamr@2
    76
# undef _STLP_ARROW_SPECIALIZE
williamr@2
    77
# undef _STLP_ARROW_SPECIALIZE_WITH_PTRS
williamr@2
    78
# undef _STLP_TYPE_TRAITS_POD_SPECIALIZE_V
williamr@2
    79
williamr@2
    80
#endif