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