19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_PTRS_SPECIALIZE_H 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_PTRS_SPECIALIZE_H 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) || \ 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott (defined (_STLP_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && !defined (_STLP_NO_ARROW_OPERATOR)) 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_POINTERS_SPECIALIZE( _TpP ) 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DEFINE_ARROW_OPERATOR pointer operator->() const { return &(operator*()); } 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_TYPE_TRAITS_H 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <stl/type_traits.h> 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// the following is a workaround for arrow operator problems 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined ( _STLP_NO_ARROW_OPERATOR ) 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// User wants to disable proxy -> operators 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DEFINE_ARROW_OPERATOR 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Compiler can handle generic -> operator. 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (__BORLANDC__) 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DEFINE_ARROW_OPERATOR pointer operator->() const { return &(*(*this)); } 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# elif defined(__WATCOMC__) 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DEFINE_ARROW_OPERATOR pointer operator->() const { reference x = operator*(); return &x; } 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DEFINE_ARROW_OPERATOR pointer operator->() const { return &(operator*()); } 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif /* _STLP_NO_ARROW_OPERATOR */ 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Important pointers specializations 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifdef _STLP_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type) 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type) 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type) _STLP_TEMPLATE_NULL struct __type_traits<_Type> : __type_traits_aux<__true_type> {}; 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type) \ 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type*) \ 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type*) \ 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type**) \ 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type* const *) \ 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type**) \ 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type***) \ 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type***) 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_POINTERS_SPECIALIZE(_Type) _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type) 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined ( _STLP_NO_BOOL ) 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_POINTERS_SPECIALIZE( bool ) 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPE_TRAITS_POD_SPECIALIZE_V(void) 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_NO_SIGNED_BUILTINS 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( signed char ) 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( char ) 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( unsigned char ) 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( short ) 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( unsigned short ) 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( int ) 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( unsigned int ) 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( long ) 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( unsigned long ) 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( float ) 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( double ) 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined ( _STLP_NO_LONG_DOUBLE ) 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( long double ) 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined ( _STLP_LONG_LONG) 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( _STLP_LONG_LONG ) 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( unsigned _STLP_LONG_LONG ) 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined ( _STLP_HAS_WCHAR_T ) && ! defined (_STLP_WCHAR_T_IS_USHORT) 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_POINTERS_SPECIALIZE( wchar_t ) 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# undef _STLP_ARROW_SPECIALIZE 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# undef _STLP_TYPE_TRAITS_POD_SPECIALIZE_V 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 84