home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / stlpt453.zip / STLport-4.5.3 / stlport / stl / _ptrs_specialize.h < prev    next >
C/C++ Source or Header  |  2002-01-10  |  3KB  |  73 lines

  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
  73.