soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
tstring.h
1#ifndef __TSTRING_H__
2#define __TSTRING_H__
3
4
5#include <utilities-def.h>
6
7#include "sstringa.h"
8#include "sstringw.h"
9
10SNSBEGIN
11
12#ifdef _UNICODE
13 typedef SStringW SStringT;
14#else
15 typedef SStringA SStringT;
16#endif
17
18
19 template< typename T >
20 class SStringElementTraits
21 {
22 public:
23 typedef typename T::pctstr INARGTYPE;
24 typedef T& OUTARGTYPE;
25
26 static void __cdecl CopyElements(T* pDest, const T* pSrc, size_t nElements)
27 {
28 for (size_t iElement = 0; iElement < nElements; iElement++)
29 {
30 pDest[iElement] = pSrc[iElement];
31 }
32 }
33
34 static void __cdecl RelocateElements(T* pDest, T* pSrc, size_t nElements)
35 {
36 memmove_s(pDest, nElements * sizeof(T), pSrc, nElements * sizeof(T));
37 }
38
39 static ULONG __cdecl Hash(INARGTYPE str)
40 {
41 SASSERT(str != NULL);
42 ULONG nHash = 0;
43 const typename T::_tchar * pch = str;
44 while (*pch != 0)
45 {
46 nHash = (nHash << 5) + nHash + (*pch);
47 pch++;
48 }
49
50 return(nHash);
51 }
52
53 static bool __cdecl CompareElements(INARGTYPE str1, INARGTYPE str2)
54 {
55 return (T::_tchar_traits::Compare(str1,str2) == 0);
56 }
57
58 static int __cdecl CompareElementsOrdered(INARGTYPE str1, INARGTYPE str2)
59 {
60 return (T::_tchar_traits::Compare(str1,str2));
61 }
62 };
63
64 template< typename T >
65 class CElementTraits;
66
67 template<>
68 class CElementTraits< SStringA > :
69 public SStringElementTraits< SStringA >
70 {
71 };
72
73 template<>
74 class CElementTraits< SStringW > :
75 public SStringElementTraits< SStringW >
76 {
77 };
78
79
80SNSEND
81
82
83#endif // __TSTRING_H__
A class representing an ASCII string.
Definition sstringa.h:96
A class representing an ASCII string.
Definition sstringw.h:96