epoc32/include/stdapis/stlportv5/stl/_ptrs_specialize.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
parent 2 epoc32/include/stdapis/stlport/stl/_ptrs_specialize.h@2fe1408b6811
child 4 837f303aceeb
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
williamr@2
     1
#ifndef _STLP_PTRS_SPECIALIZE_H
williamr@2
     2
# define _STLP_PTRS_SPECIALIZE_H
williamr@2
     3
williamr@2
     4
// the following is a workaround for arrow operator problems
williamr@2
     5
#  if defined  ( _STLP_NO_ARROW_OPERATOR ) 
williamr@2
     6
// User wants to disable proxy -> operators
williamr@2
     7
#    define _STLP_DEFINE_ARROW_OPERATOR
williamr@2
     8
#    define _STLP_ARROW_SPECIALIZE_WITH_PTRS(_Tp)
williamr@2
     9
# else
williamr@2
    10
// Compiler can handle generic -> operator.
williamr@2
    11
#  define _STLP_ARROW_SPECIALIZE_WITH_PTRS(_Tp)
williamr@2
    12
#  ifdef __BORLANDC__
williamr@2
    13
#   define _STLP_DEFINE_ARROW_OPERATOR  pointer operator->() const { return &(*(*this)); }
williamr@2
    14
#  elif defined ( _STLP_WINCE ) || defined(__WATCOMC__)
williamr@2
    15
#   define _STLP_DEFINE_ARROW_OPERATOR pointer operator->() const { reference x = operator*(); return &x; }
williamr@2
    16
#  else
williamr@2
    17
#   define _STLP_DEFINE_ARROW_OPERATOR  pointer operator->() const { return &(operator*()); }
williamr@2
    18
#  endif
williamr@2
    19
# endif /* _STLP_NO_ARROW_OPERATOR */
williamr@2
    20
williamr@2
    21
// Important pointers specializations
williamr@2
    22
williamr@2
    23
# ifdef _STLP_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS
williamr@2
    24
#  define _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type)
williamr@2
    25
#  define _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type)
williamr@2
    26
# else
williamr@2
    27
#  define _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type) _STLP_TEMPLATE_NULL struct __type_traits<_Type> : __type_traits_aux<true> {};
williamr@2
    28
#  define _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type) \
williamr@2
    29
_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type*) \
williamr@2
    30
_STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type*) \
williamr@2
    31
_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type**) \
williamr@2
    32
_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type* const *) \
williamr@2
    33
_STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type**) \
williamr@2
    34
_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type***) \
williamr@2
    35
_STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type***)
williamr@2
    36
# endif
williamr@2
    37
williamr@2
    38
# define _STLP_POINTERS_SPECIALIZE(_Type) _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type) _STLP_ARROW_SPECIALIZE_WITH_PTRS(_Type)
williamr@2
    39
williamr@2
    40
#  if !defined ( _STLP_NO_BOOL )
williamr@2
    41
_STLP_POINTERS_SPECIALIZE( bool )
williamr@2
    42
#  endif
williamr@2
    43
_STLP_TYPE_TRAITS_POD_SPECIALIZE_V(void)
williamr@2
    44
# ifndef _STLP_NO_SIGNED_BUILTINS
williamr@2
    45
  _STLP_POINTERS_SPECIALIZE( signed char )
williamr@2
    46
# endif
williamr@2
    47
  _STLP_POINTERS_SPECIALIZE( char )
williamr@2
    48
  _STLP_POINTERS_SPECIALIZE( unsigned char )
williamr@2
    49
  _STLP_POINTERS_SPECIALIZE( short )
williamr@2
    50
  _STLP_POINTERS_SPECIALIZE( unsigned short )
williamr@2
    51
  _STLP_POINTERS_SPECIALIZE( int )
williamr@2
    52
  _STLP_POINTERS_SPECIALIZE( unsigned int )
williamr@2
    53
  _STLP_POINTERS_SPECIALIZE( long )
williamr@2
    54
  _STLP_POINTERS_SPECIALIZE( unsigned long )
williamr@2
    55
  _STLP_POINTERS_SPECIALIZE( float )
williamr@2
    56
  _STLP_POINTERS_SPECIALIZE( double )
williamr@2
    57
#  if !defined ( _STLP_NO_LONG_DOUBLE )
williamr@2
    58
  _STLP_POINTERS_SPECIALIZE( long double )
williamr@2
    59
#  endif
williamr@2
    60
#  if defined ( _STLP_LONG_LONG)
williamr@2
    61
  _STLP_POINTERS_SPECIALIZE( _STLP_LONG_LONG )
williamr@2
    62
  _STLP_POINTERS_SPECIALIZE( unsigned _STLP_LONG_LONG )
williamr@2
    63
#  endif
williamr@2
    64
#if defined ( _STLP_HAS_WCHAR_T ) && ! defined (_STLP_WCHAR_T_IS_USHORT)
williamr@2
    65
  _STLP_POINTERS_SPECIALIZE( wchar_t )
williamr@2
    66
#  endif
williamr@2
    67
williamr@2
    68
# undef _STLP_ARROW_SPECIALIZE
williamr@2
    69
# undef _STLP_ARROW_SPECIALIZE_WITH_PTRS
williamr@2
    70
# undef _STLP_TYPE_TRAITS_POD_SPECIALIZE_V
williamr@2
    71
williamr@2
    72
#endif