19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1996,1997 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc. 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_CHAR_TRAITS_H 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CHAR_TRAITS_H 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Define char_traits 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CSTDDEF 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_cstddef.h> 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CSTRING 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_cstring.h> 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__unix) 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <sys/types.h> // For off_t 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* __unix */ 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__BORLANDC__) 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <mem.h> 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <string.h> 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <_stddef.h> 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <sys/types.h> 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CONSTRUCT_H 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_construct.h> 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CWCHAR 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_cwchar.h> 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> class allocator; 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_NULL_CHAR_INIT(_ChT) _STLP_DEFAULT_CONSTRUCTED(_ChT) 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined(_STLP_WCE) 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef long streamoff; 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#elif defined (_STLP_WIN32) 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_LONG_LONG) && !defined (__CYGWIN__) 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//The Win32 file io API support 64 bits access so streamoff and streamsize 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//has to reflect that. Do not change the stringbuf behavior. 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef _STLP_LONG_LONG streamoff; 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef ptrdiff_t streamoff; 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else // __unix 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifdef _STLP_USE_DEFAULT_FILE_OFFSET 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef off_t streamoff; 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# elif defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE) /* || defined(__USE_FILE_OFFSET64) */ \ 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block /* || (defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)) */ /* || defined (__sgi) && defined (_STLP_HAS_NO_NEW_C_HEADERS) */ 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef off64_t streamoff; 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef off_t streamoff; 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* __unix */ 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_WIN32) 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef streamoff streamsize; 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef ptrdiff_t streamsize; 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class fpos, which represents a position within a file. (The C++ 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// standard calls for it to be defined in <ios>. This implementation 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// moves it to <iosfwd>, which is included by <ios>.) 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _StateT> class fpos { 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // From table 88 of the C++ standard. 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block fpos(streamoff __pos) : _M_pos(__pos), _M_st(_STLP_NULL_CHAR_INIT(_StateT)) {} 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block fpos() : _M_pos(0), _M_st(_STLP_NULL_CHAR_INIT(_StateT)) {} 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block operator streamoff() const { return _M_pos; } 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool operator==(const fpos& __y) const 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_pos == __y._M_pos; } 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool operator!=(const fpos& __y) const 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_pos != __y._M_pos; } 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block fpos& operator+=(streamoff __off) { 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_pos += __off; 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block fpos& operator-=(streamoff __off) { 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_pos -= __off; 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block fpos operator+(streamoff __off) { 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block fpos __tmp(*this); 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __tmp += __off; 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __tmp; 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block fpos operator-(streamoff __off) { 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block fpos __tmp(*this); 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __tmp -= __off; 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __tmp; 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Manipulation of the state member. 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StateT state() const { return _M_st; } 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void state(_StateT __st) { _M_st = __st; } 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block streamoff _M_pos; 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StateT _M_st; 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef fpos<mbstate_t> streampos; 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef fpos<mbstate_t> wstreampos; 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class __char_traits_base. 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _IntT> 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass __char_traits_base { 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _CharT char_type; 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _IntT int_type; 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef streamoff off_type; 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef streampos pos_type; 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef mbstate_t state_type; 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL assign(char_type& __c1, const char_type& __c2) { __c1 = __c2; } 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static bool _STLP_CALL eq(const char_type& __c1, const char_type& __c2) 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return __c1 == __c2; } 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static bool _STLP_CALL lt(const char_type& __c1, const char_type& __c2) 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return __c1 < __c2; } 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static int _STLP_CALL compare(const char_type* __s1, const char_type* __s2, size_t __n) { 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (size_t __i = 0; __i < __n; ++__i) 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!eq(__s1[__i], __s2[__i])) 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __s1[__i] < __s2[__i] ? -1 : 1; 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return 0; 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static size_t _STLP_CALL length(const char_type* __s) { 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const char_type _NullChar = _STLP_DEFAULT_CONSTRUCTED(char_type); 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_t __i(0); 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; !eq(__s[__i], _NullChar); ++__i) {} 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __i; 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static const char_type* _STLP_CALL find(const char_type* __s, size_t __n, const char_type& __c) { 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __n > 0 ; ++__s, --__n) 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (eq(*__s, __c)) 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __s; 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return 0; 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static char_type* _STLP_CALL move(char_type* __s1, const char_type* __s2, size_t _Sz) 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return (_Sz == 0 ? __s1 : (char_type*)memmove(__s1, __s2, _Sz * sizeof(char_type))); } 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static char_type* _STLP_CALL copy(char_type* __s1, const char_type* __s2, size_t __n) { 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (__n == 0 ? __s1 : 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block (char_type*)memcpy(__s1, __s2, __n * sizeof(char_type))); 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static char_type* _STLP_CALL assign(char_type* __s, size_t __n, char_type __c) { 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (size_t __i = 0; __i < __n; ++__i) 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __s[__i] = __c; 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __s; 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static int_type _STLP_CALL not_eof(const int_type& __c) 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return !eq_int_type(__c, eof()) ? __c : __STATIC_CAST(int_type, 0); } 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static char_type _STLP_CALL to_char_type(const int_type& __c) 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return (char_type)__c; } 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static int_type _STLP_CALL to_int_type(const char_type& __c) 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return (int_type)__c; } 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static bool _STLP_CALL eq_int_type(const int_type& __c1, const int_type& __c2) 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return __c1 == __c2; } 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static int_type _STLP_CALL eof() 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return (int_type)-1; } 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Generic char_traits class. Note that this class is provided only 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// as a base for explicit specialization; it is unlikely to be useful 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// as is for any particular user-defined type. In particular, it 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// *will not work* for a non-POD type. 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT> 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass char_traits 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : public __char_traits_base<_CharT, _CharT> {}; 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Specialization for char. 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC char_traits<char> 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : public __char_traits_base<char, int>, 211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott public __stlport_class<char_traits<char> > { 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef char char_type; 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef int int_type; 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef streamoff off_type; 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef streampos pos_type; 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef mbstate_t state_type; 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static char _STLP_CALL to_char_type(const int& __c) 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return (char)(unsigned char)__c; } 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static int _STLP_CALL to_int_type(const char& __c) 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return (unsigned char)__c; } 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static int _STLP_CALL compare(const char* __s1, const char* __s2, size_t __n) 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return memcmp(__s1, __s2, __n); } 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static size_t _STLP_CALL length(const char* __s) 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return strlen(__s); } 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL assign(char& __c1, const char& __c2) 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { __c1 = __c2; } 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static char* _STLP_CALL assign(char* __s, size_t __n, char __c) { 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block memset(__s, __c, __n); 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __s; 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_HAS_WCHAR_T) 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Specialization for wchar_t. 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC char_traits<wchar_t> 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : public __char_traits_base<wchar_t, wint_t> { 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_NO_NATIVE_WIDE_FUNCTIONS) && !defined (_STLP_WCHAR_HPACC_EXCLUDE) 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (__BORLANDC__) 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static wchar_t* _STLP_CALL move(wchar_t* __dest, const wchar_t* __src, size_t __n) 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return wmemmove(__dest, __src, __n); } 250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static wchar_t* _STLP_CALL copy(wchar_t* __dest, const wchar_t* __src, size_t __n) 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return wmemcpy(__dest, __src, __n); } 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (__DMC__) && !defined (__BORLANDC__) 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static int _STLP_CALL compare(const wchar_t* __s1, const wchar_t* __s2, size_t __n) 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return wmemcmp(__s1, __s2, __n); } 258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static wchar_t* _STLP_CALL assign(wchar_t* __s, size_t __n, wchar_t __c) 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return wmemset(__s, __c, __n); } 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static size_t _STLP_CALL length(const wchar_t* __s) 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return wcslen(__s); } 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL assign(wchar_t& __c1, const wchar_t& __c2) 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { __c1 = __c2; } 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_CHAR_TRAITS_H */ 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 279