Hex Artifact Content

Not logged in

Artifact 9ee1f8a2b0ea71f40386388c10afd236aa7aa971:


0000: 23 69 66 6e 64 65 66 20 5f 4b 49 4c 49 42 5f 53  #ifndef _KILIB_S
0010: 54 52 49 4e 47 5f 48 5f 0d 0a 23 64 65 66 69 6e  TRING_H_..#defin
0020: 65 20 5f 4b 49 4c 49 42 5f 53 54 52 49 4e 47 5f  e _KILIB_STRING_
0030: 48 5f 0d 0a 23 69 6e 63 6c 75 64 65 20 22 74 79  H_..#include "ty
0040: 70 65 73 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65  pes.h"..#include
0050: 20 22 6d 65 6d 6f 72 79 2e 68 22 0d 0a 23 69 6e   "memory.h"..#in
0060: 63 6c 75 64 65 20 22 6b 74 6c 61 70 74 72 2e 68  clude "ktlaptr.h
0070: 22 0d 0a 23 69 66 6e 64 65 66 20 5f 5f 63 63 64  "..#ifndef __ccd
0080: 6f 63 5f 5f 0d 0a 6e 61 6d 65 73 70 61 63 65 20  oc__..namespace 
0090: 6b 69 20 7b 0d 0a 23 65 6e 64 69 66 0d 0a 23 69  ki {..#endif..#i
00a0: 66 64 65 66 20 5f 55 4e 49 43 4f 44 45 0d 0a 09  fdef _UNICODE...
00b0: 23 64 65 66 69 6e 65 20 58 54 43 48 41 52 20 63  #define XTCHAR c
00c0: 68 61 72 0d 0a 23 65 6c 73 65 0d 0a 09 23 64 65  har..#else...#de
00d0: 66 69 6e 65 20 58 54 43 48 41 52 20 77 63 68 61  fine XTCHAR wcha
00e0: 72 5f 74 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 0d  r_t..#endif.....
00f0: 0a 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ...//===========
0100: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0110: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0120: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0130: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a  ==============..
0140: 2f 2f 40 7b 20 40 70 6b 67 20 6b 69 2e 53 74 64  //@{ @pkg ki.Std
0150: 4c 69 62 20 2f 2f 40 7d 0d 0a 2f 2f 40 7b 0d 0a  Lib //@}..//@{..
0160: 2f 2f 09 95 b6 8e 9a 97 f1 8f 88 97 9d 0d 0a 2f  //............./
0170: 2f 0d 0a 2f 2f 09 82 a9 82 c8 82 e8 4d 46 43 82  /..//.......MFC.
0180: cc 43 53 74 72 69 6e 67 82 f0 83 70 83 4e 82 c1  .CString...p.N..
0190: 82 c4 82 dc 82 b7 81 42 82 c6 82 e8 82 a0 82 a6  .......B........
01a0: 82 b8 20 6f 70 65 72 61 74 6f 72 3d 20 82 c9 82  .. operator= ...
01b0: e6 82 e9 0d 0a 2f 2f 09 92 50 8f 83 91 e3 93 fc  .....//..P......
01c0: 82 c9 82 cd 82 d9 82 c6 82 f1 82 c7 83 52 83 58  .............R.X
01d0: 83 67 82 aa 82 a9 82 a9 82 e7 82 c8 82 a2 82 e6  .g..............
01e0: 82 a4 82 c9 82 b5 82 dc 82 b5 82 bd 81 42 53 75  .............BSu
01f0: 62 53 74 72 28 29 82 cc 0d 0a 2f 2f 09 8e 9e 82  bStr()....//....
0200: e0 83 52 83 73 81 5b 82 b5 82 c8 82 a2 82 e6 82  ..R.s.[.........
0210: a4 82 c9 82 b5 82 e6 82 a4 82 a9 82 c6 82 e0 8e  ................
0220: 76 82 c1 82 bd 82 f1 82 c5 82 b7 82 aa 81 41 82  v.............A.
0230: bb 82 b1 82 dc 82 c5 82 cd 0d 0a 2f 2f 09 97 76  ...........//..v
0240: 82 e7 82 c8 82 a2 82 be 82 eb 82 a4 82 c6 82 a2  ................
0250: 82 a4 8b 43 82 e0 82 b7 82 e9 82 cc 82 c5 81 63  ...C...........c
0260: 81 42 0d 0a 2f 2f 40 7d 0d 0a 2f 2f 3d 3d 3d 3d  .B..//@}..//====
0270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0280: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0290: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
02a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
02b0: 3d 3d 3d 3d 3d 0d 0a 0d 0a 63 6c 61 73 73 20 53  =====....class S
02c0: 74 72 69 6e 67 20 3a 20 70 75 62 6c 69 63 20 4f  tring : public O
02d0: 62 6a 65 63 74 0d 0a 7b 0d 0a 70 75 62 6c 69 63  bject..{..public
02e0: 3a 0d 0a 0d 0a 09 2f 2f 40 7b 20 8b f3 95 b6 8e  :.....//@{ .....
02f0: 9a 97 f1 8d ec 90 ac 20 2f 2f 40 7d 0d 0a 09 53  ....... //@}...S
0300: 74 72 69 6e 67 28 29 3b 0d 0a 09 7e 53 74 72 69  tring();...~Stri
0310: 6e 67 28 29 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 95  ng();.....//@{ .
0320: ca 82 cc 53 74 72 69 6e 67 82 cc 83 52 83 73 81  ...String...R.s.
0330: 5b 20 2f 2f 40 7d 0d 0a 09 53 74 72 69 6e 67 28  [ //@}...String(
0340: 20 63 6f 6e 73 74 20 53 74 72 69 6e 67 26 20 6f   const String& o
0350: 62 6a 20 29 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 95  bj );.....//@{ .
0360: ca 82 cc 95 b6 8e 9a 94 7a 97 f1 82 cc 83 52 83  ........z.....R.
0370: 73 81 5b 20 2f 2f 40 7d 0d 0a 09 53 74 72 69 6e  s.[ //@}...Strin
0380: 67 28 20 63 6f 6e 73 74 20 54 43 48 41 52 2a 20  g( const TCHAR* 
0390: 73 74 72 2c 20 6c 6f 6e 67 20 73 69 7a 3d 2d 31  str, long siz=-1
03a0: 20 29 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 83 8a 83   );.....//@{ ...
03b0: 5c 81 5b 83 58 82 a9 82 e7 8d ec 90 ac 20 2f 2f  \.[.X........ //
03c0: 40 7d 0d 0a 09 65 78 70 6c 69 63 69 74 20 53 74  @}...explicit St
03d0: 72 69 6e 67 28 20 55 49 4e 54 20 72 73 72 63 49  ring( UINT rsrcI
03e0: 44 20 29 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 91 e5  D );.....//@{ ..
03f0: 95 b6 8e 9a 8f ac 95 b6 8e 9a 82 f0 8b e6 95 ca  ................
0400: 82 b7 82 e9 94 e4 8a 72 20 2f 2f 40 7d 0d 0a 09  .......r //@}...
0410: 62 6f 6f 6c 20 6f 70 65 72 61 74 6f 72 3d 3d 28  bool operator==(
0420: 20 4c 50 43 54 53 54 52 20 73 20 29 20 63 6f 6e   LPCTSTR s ) con
0430: 73 74 3b 0d 0a 09 62 6f 6f 6c 20 6f 70 65 72 61  st;...bool opera
0440: 74 6f 72 3d 3d 28 20 63 6f 6e 73 74 20 53 74 72  tor==( const Str
0450: 69 6e 67 26 20 6f 62 6a 20 29 20 63 6f 6e 73 74  ing& obj ) const
0460: 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 91 e5 95 b6 8e  ;.....//@{ .....
0470: 9a 8f ac 95 b6 8e 9a 82 f0 8b e6 95 ca 82 b5 82  ................
0480: c8 82 a2 94 e4 8a 72 20 2f 2f 40 7d 0d 0a 09 62  ......r //@}...b
0490: 6f 6f 6c 20 69 73 53 61 6d 65 28 20 4c 50 43 54  ool isSame( LPCT
04a0: 53 54 52 20 73 20 29 20 63 6f 6e 73 74 3b 0d 0a  STR s ) const;..
04b0: 09 62 6f 6f 6c 20 69 73 53 61 6d 65 28 20 63 6f  .bool isSame( co
04c0: 6e 73 74 20 53 74 72 69 6e 67 26 20 6f 62 6a 20  nst String& obj 
04d0: 29 20 63 6f 6e 73 74 3b 0d 0a 0d 0a 09 2f 2f 40  ) const;.....//@
04e0: 7b 20 92 50 8f 83 91 e3 93 fc 20 2f 2f 40 7d 0d  { .P...... //@}.
04f0: 0a 09 53 74 72 69 6e 67 26 20 6f 70 65 72 61 74  ..String& operat
0500: 6f 72 3d 28 20 63 6f 6e 73 74 20 53 74 72 69 6e  or=( const Strin
0510: 67 26 20 6f 62 6a 20 29 3b 0d 0a 09 53 74 72 69  g& obj );...Stri
0520: 6e 67 26 20 6f 70 65 72 61 74 6f 72 3d 28 20 63  ng& operator=( c
0530: 6f 6e 73 74 20 54 43 48 41 52 2a 20 73 20 29 3b  onst TCHAR* s );
0540: 0d 0a 09 53 74 72 69 6e 67 26 20 6f 70 65 72 61  ...String& opera
0550: 74 6f 72 3d 28 20 63 6f 6e 73 74 20 58 54 43 48  tor=( const XTCH
0560: 41 52 2a 20 73 20 29 3b 0d 0a 0d 0a 09 2f 2f 40  AR* s );.....//@
0570: 7b 20 89 c1 8e 5a 91 e3 93 fc 20 2f 2f 40 7d 0d  { ...Z.... //@}.
0580: 0a 09 53 74 72 69 6e 67 26 20 6f 70 65 72 61 74  ..String& operat
0590: 6f 72 2b 3d 28 20 63 6f 6e 73 74 20 53 74 72 69  or+=( const Stri
05a0: 6e 67 26 20 6f 62 6a 20 29 3b 0d 0a 09 53 74 72  ng& obj );...Str
05b0: 69 6e 67 26 20 6f 70 65 72 61 74 6f 72 2b 3d 28  ing& operator+=(
05c0: 20 63 6f 6e 73 74 20 54 43 48 41 52 2a 20 73 20   const TCHAR* s 
05d0: 29 3b 0d 0a 09 53 74 72 69 6e 67 26 20 6f 70 65  );...String& ope
05e0: 72 61 74 6f 72 2b 3d 28 20 54 43 48 41 52 20 63  rator+=( TCHAR c
05f0: 20 29 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 83 8a 83   );.....//@{ ...
0600: 5c 81 5b 83 58 83 8d 81 5b 83 68 20 2f 2f 40 7d  \.[.X...[.h //@}
0610: 0d 0a 09 53 74 72 69 6e 67 26 20 4c 6f 61 64 28  ...String& Load(
0620: 20 55 49 4e 54 20 72 73 72 63 49 44 20 29 3b 0d   UINT rsrcID );.
0630: 0a 0d 0a 09 2f 2f 40 7b 20 89 45 82 f0 8d ed 82  ....//@{ .E.....
0640: e9 20 2f 2f 40 7d 0d 0a 09 76 6f 69 64 20 54 72  . //@}...void Tr
0650: 69 6d 52 69 67 68 74 28 20 75 6c 6f 6e 67 20 73  imRight( ulong s
0660: 69 7a 20 29 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 69  iz );.....//@{ i
0670: 6e 74 82 a9 82 e7 95 b6 8e 9a 97 f1 82 d6 95 cf  nt..............
0680: 8a b7 20 2f 2f 40 7d 0d 0a 09 53 74 72 69 6e 67  .. //@}...String
0690: 26 20 53 65 74 49 6e 74 28 20 69 6e 74 20 6e 20  & SetInt( int n 
06a0: 29 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 95 b6 8e 9a  );.....//@{ ....
06b0: 97 f1 82 a9 82 e7 69 6e 74 82 d6 95 cf 8a b7 20  ......int...... 
06c0: 2f 2f 40 7d 0d 0a 09 69 6e 74 20 47 65 74 49 6e  //@}...int GetIn
06d0: 74 28 29 3b 0d 0a 0d 0a 70 75 62 6c 69 63 3a 0d  t();....public:.
06e0: 0a 0d 0a 09 2f 2f 40 7b 20 95 b6 8e 9a 97 f1 83  ....//@{ .......
06f0: 6f 83 62 83 74 83 40 82 f0 95 d4 82 b7 20 2f 2f  o.b.t.@...... //
0700: 40 7d 0d 0a 09 63 6f 6e 73 74 20 54 43 48 41 52  @}...const TCHAR
0710: 2a 20 63 5f 73 74 72 28 29 20 63 6f 6e 73 74 3b  * c_str() const;
0720: 0d 0a 0d 0a 09 2f 2f 40 7b 20 92 b7 82 b3 20 2f  .....//@{ .... /
0730: 2f 40 7d 0d 0a 09 75 6c 6f 6e 67 20 6c 65 6e 28  /@}...ulong len(
0740: 29 20 63 6f 6e 73 74 3b 0d 0a 0d 0a 09 2f 2f 40  ) const;.....//@
0750: 7b 20 97 76 91 66 20 2f 2f 40 7d 0d 0a 09 63 6f  { .v.f //@}...co
0760: 6e 73 74 20 54 43 48 41 52 20 6f 70 65 72 61 74  nst TCHAR operat
0770: 6f 72 5b 5d 28 69 6e 74 20 6e 29 20 63 6f 6e 73  or[](int n) cons
0780: 74 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 83 8f 83 43  t;.....//@{ ...C
0790: 83 68 95 b6 8e 9a 97 f1 82 c9 95 cf 8a b7 82 b5  .h..............
07a0: 82 c4 95 d4 82 b7 20 2f 2f 40 7d 0d 0a 09 63 6f  ...... //@}...co
07b0: 6e 73 74 20 77 63 68 61 72 5f 74 2a 20 43 6f 6e  nst wchar_t* Con
07c0: 76 54 6f 57 43 68 61 72 28 29 20 63 6f 6e 73 74  vToWChar() const
07d0: 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 43 6f 6e 76 54  ;.....//@{ ConvT
07e0: 6f 57 43 68 61 72 82 cc 95 d4 92 6c 83 6f 83 62  oWChar.....l.o.b
07f0: 83 74 83 40 82 cc 89 f0 95 fa 20 2f 2f 40 7d 0d  .t.@...... //@}.
0800: 0a 09 76 6f 69 64 20 46 72 65 65 57 43 4d 65 6d  ..void FreeWCMem
0810: 28 20 63 6f 6e 73 74 20 77 63 68 61 72 5f 74 2a  ( const wchar_t*
0820: 20 77 63 20 29 20 63 6f 6e 73 74 3b 0d 0a 0d 0a   wc ) const;....
0830: 70 75 62 6c 69 63 3a 0d 0a 0d 0a 09 2f 2f 40 7b  public:.....//@{
0840: 20 8e 9f 82 cc 88 ea 95 b6 8e 9a 20 2f 2f 40 7d   .......... //@}
0850: 0d 0a 09 73 74 61 74 69 63 20 54 43 48 41 52 2a  ...static TCHAR*
0860: 20 20 20 20 20 20 20 6e 65 78 74 28 20 54 43 48         next( TCH
0870: 41 52 2a 20 70 20 29 3b 0d 0a 09 73 74 61 74 69  AR* p );...stati
0880: 63 20 63 6f 6e 73 74 20 54 43 48 41 52 2a 20 6e  c const TCHAR* n
0890: 65 78 74 28 20 63 6f 6e 73 74 20 54 43 48 41 52  ext( const TCHAR
08a0: 2a 20 70 20 29 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20  * p );.....//@{ 
08b0: 82 51 83 6f 83 43 83 67 95 b6 8e 9a 82 cc 90 e6  .Q.o.C.g........
08c0: 93 aa 82 a9 82 c7 82 a4 82 a9 81 48 20 2f 2f 40  ...........H //@
08d0: 7d 0d 0a 09 73 74 61 74 69 63 20 62 6f 6f 6c 20  }...static bool 
08e0: 69 73 4c 42 28 20 54 43 48 41 52 20 63 20 29 3b  isLB( TCHAR c );
08f0: 0d 0a 0d 0a 09 2f 2f 40 7b 20 95 b6 8e 9a 97 f1  .....//@{ ......
0900: 82 a9 82 e7 69 6e 74 82 d6 95 cf 8a b7 20 2f 2f  ....int...... //
0910: 40 7d 0d 0a 09 73 74 61 74 69 63 20 69 6e 74 20  @}...static int 
0920: 47 65 74 49 6e 74 28 20 63 6f 6e 73 74 20 54 43  GetInt( const TC
0930: 48 41 52 2a 20 70 20 29 3b 0d 0a 0d 0a 70 72 6f  HAR* p );....pro
0940: 74 65 63 74 65 64 3a 0d 0a 0d 0a 09 2f 2f 20 8f  tected:.....// .
0950: 91 82 ab 8d 9e 82 dd 89 c2 94 5c 82 c8 83 6f 83  ..........\...o.
0960: 62 83 74 83 40 82 f0 81 41 8f 49 92 5b 8a dc 82  b.t.@...A.I.[...
0970: df 82 c4 8d c5 92 e1 82 c5 82 e0 6d 69 6e 69 6d  ...........minim
0980: 75 6d 95 b6 8e 9a 95 aa 97 70 88 d3 82 b7 82 e9  um.......p......
0990: 0d 0a 09 54 43 48 41 52 2a 20 41 6c 6c 6f 63 4d  ...TCHAR* AllocM
09a0: 65 6d 28 20 75 6c 6f 6e 67 20 6d 69 6e 69 6d 75  em( ulong minimu
09b0: 6d 20 29 3b 0d 0a 09 54 43 48 41 52 2a 20 52 65  m );...TCHAR* Re
09c0: 61 6c 6c 6f 63 4d 65 6d 28 20 75 6c 6f 6e 67 20  allocMem( ulong 
09d0: 6d 69 6e 69 6d 75 6d 20 29 3b 0d 0a 0d 0a 09 2f  minimum );...../
09e0: 2f 20 8f 91 82 ab 8d 9e 82 dd 8f 49 97 b9 8c e3  / .........I....
09f0: 81 41 92 b7 82 b3 82 f0 8d c4 90 dd 92 e8 0d 0a  .A..............
0a00: 09 76 6f 69 64 20 55 6e 6c 6f 63 6b 4d 65 6d 28  .void UnlockMem(
0a10: 20 6c 6f 6e 67 20 73 69 7a 3d 2d 31 20 29 3b 0d   long siz=-1 );.
0a20: 0a 0d 0a 70 72 69 76 61 74 65 3a 0d 0a 0d 0a 09  ...private:.....
0a30: 73 74 72 75 63 74 20 53 74 72 69 6e 67 44 61 74  struct StringDat
0a40: 61 0d 0a 09 7b 0d 0a 09 09 6c 6f 6e 67 20 20 72  a...{....long  r
0a50: 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2f 20 8e  ef;         // .
0a60: 51 8f c6 83 4a 83 45 83 93 83 5e 0d 0a 09 09 75  Q...J.E...^....u
0a70: 6c 6f 6e 67 20 6c 65 6e 3b 20 20 20 20 20 20 20  long len;       
0a80: 20 20 2f 2f 20 8f 49 92 5b 27 5c 30 27 82 f0 8a    // .I.['\0'...
0a90: dc 82 df 82 e9 92 b7 82 b3 0d 0a 09 09 75 6c 6f  .............ulo
0aa0: 6e 67 20 61 6c 65 6e 3b 20 20 20 20 20 20 20 20  ng alen;        
0ab0: 2f 2f 20 8a 84 82 e8 93 96 82 c4 82 e7 82 ea 82  // .............
0ac0: c4 82 a2 82 e9 83 81 83 82 83 8a 82 cc 83 54 83  ..............T.
0ad0: 43 83 59 0d 0a 09 09 54 43 48 41 52 2a 20 62 75  C.Y....TCHAR* bu
0ae0: 66 28 29 20 63 6f 6e 73 74 20 2f 2f 20 54 43 48  f() const // TCH
0af0: 41 52 20 62 75 66 5b 61 6c 65 6e 5d 0d 0a 09 09  AR buf[alen]....
0b00: 09 7b 20 72 65 74 75 72 6e 20 72 65 69 6e 74 65  .{ return reinte
0b10: 72 70 72 65 74 5f 63 61 73 74 3c 54 43 48 41 52  rpret_cast<TCHAR
0b20: 2a 3e 28 0d 0a 09 09 09 09 63 6f 6e 73 74 5f 63  *>(......const_c
0b30: 61 73 74 3c 53 74 72 69 6e 67 44 61 74 61 2a 3e  ast<StringData*>
0b40: 28 74 68 69 73 2b 31 29 0d 0a 09 09 09 29 3b 20  (this+1).....); 
0b50: 7d 0d 0a 09 7d 3b 0d 0a 0d 0a 70 72 69 76 61 74  }...};....privat
0b60: 65 3a 0d 0a 0d 0a 09 54 43 48 41 52 2a 20 20 41  e:.....TCHAR*  A
0b70: 6c 6c 6f 63 4d 65 6d 48 65 6c 70 65 72 28 20 75  llocMemHelper( u
0b80: 6c 6f 6e 67 20 6d 69 6e 69 6d 75 6d 2c 20 63 6f  long minimum, co
0b90: 6e 73 74 20 54 43 48 41 52 2a 20 73 74 72 2c 20  nst TCHAR* str, 
0ba0: 75 6c 6f 6e 67 20 73 69 7a 20 29 3b 0d 0a 09 53  ulong siz );...S
0bb0: 74 72 69 6e 67 26 20 43 61 74 53 74 72 69 6e 67  tring& CatString
0bc0: 28 20 63 6f 6e 73 74 20 54 43 48 41 52 2a 20 73  ( const TCHAR* s
0bd0: 74 72 2c 20 75 6c 6f 6e 67 20 73 69 7a 20 29 3b  tr, ulong siz );
0be0: 0d 0a 09 53 74 72 69 6e 67 26 20 53 65 74 53 74  ...String& SetSt
0bf0: 72 69 6e 67 28 20 63 6f 6e 73 74 20 54 43 48 41  ring( const TCHA
0c00: 52 2a 20 73 74 72 2c 20 75 6c 6f 6e 67 20 73 69  R* str, ulong si
0c10: 7a 20 29 3b 0d 0a 09 76 6f 69 64 20 20 20 20 53  z );...void    S
0c20: 65 74 44 61 74 61 28 20 53 74 72 69 6e 67 44 61  etData( StringDa
0c30: 74 61 2a 20 64 20 29 3b 0d 0a 09 76 6f 69 64 20  ta* d );...void 
0c40: 20 20 20 52 65 6c 65 61 73 65 44 61 74 61 28 29     ReleaseData()
0c50: 3b 0d 0a 09 73 74 61 74 69 63 20 20 53 74 72 69  ;...static  Stri
0c60: 6e 67 44 61 74 61 2a 20 6e 75 6c 6c 28 29 3b 0d  ngData* null();.
0c70: 0a 09 20 20 20 20 20 20 20 20 53 74 72 69 6e 67  ..        String
0c80: 44 61 74 61 2a 20 64 61 74 61 28 29 20 63 6f 6e  Data* data() con
0c90: 73 74 3b 0d 0a 0d 0a 70 72 69 76 61 74 65 3a 0d  st;....private:.
0ca0: 0a 0d 0a 09 53 74 72 69 6e 67 44 61 74 61 2a 20  ....StringData* 
0cb0: 20 20 20 20 20 20 20 64 61 74 61 5f 3b 0d 0a 09         data_;...
0cc0: 73 74 61 74 69 63 20 53 74 72 69 6e 67 44 61 74  static StringDat
0cd0: 61 2a 20 6e 75 6c 6c 44 61 74 61 5f 3b 0d 0a 09  a* nullData_;...
0ce0: 73 74 61 74 69 63 20 63 68 61 72 20 20 20 20 20  static char     
0cf0: 20 20 20 6c 62 5f 5b 32 35 36 5d 3b 0d 0a 0d 0a     lb_[256];....
0d00: 70 72 69 76 61 74 65 3a 0d 0a 0d 0a 09 73 74 61  private:.....sta
0d10: 74 69 63 20 76 6f 69 64 20 4c 69 62 49 6e 69 74  tic void LibInit
0d20: 28 29 3b 0d 0a 09 66 72 69 65 6e 64 20 76 6f 69  ();...friend voi
0d30: 64 20 41 50 49 45 4e 54 52 59 20 53 74 61 72 74  d APIENTRY Start
0d40: 75 70 28 29 3b 0d 0a 7d 3b 0d 0a 0d 0a 0d 0a 0d  up();..};.......
0d50: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .//-------------
0d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 69  ------------..#i
0da0: 66 6e 64 65 66 20 5f 5f 63 63 64 6f 63 5f 5f 0d  fndef __ccdoc__.
0db0: 0a 0d 0a 2f 2f 20 8f 89 8a fa 89 bb 0d 0a 69 6e  ...// ........in
0dc0: 6c 69 6e 65 20 53 74 72 69 6e 67 3a 3a 53 74 72  line String::Str
0dd0: 69 6e 67 28 29 0d 0a 09 7b 20 53 65 74 44 61 74  ing()...{ SetDat
0de0: 61 28 20 6e 75 6c 6c 28 29 20 29 3b 20 7d 0d 0a  a( null() ); }..
0df0: 2f 2f 20 8f 89 8a fa 89 bb 0d 0a 69 6e 6c 69 6e  // ........inlin
0e00: 65 20 53 74 72 69 6e 67 3a 3a 53 74 72 69 6e 67  e String::String
0e10: 28 20 55 49 4e 54 20 72 73 72 63 49 44 20 29 0d  ( UINT rsrcID ).
0e20: 0a 09 7b 20 53 65 74 44 61 74 61 28 20 6e 75 6c  ..{ SetData( nul
0e30: 6c 28 29 20 29 2c 20 4c 6f 61 64 28 20 72 73 72  l() ), Load( rsr
0e40: 63 49 44 20 29 3b 20 7d 0d 0a 2f 2f 20 8f 89 8a  cID ); }..// ...
0e50: fa 89 bb 0d 0a 69 6e 6c 69 6e 65 20 53 74 72 69  .....inline Stri
0e60: 6e 67 3a 3a 53 74 72 69 6e 67 28 20 63 6f 6e 73  ng::String( cons
0e70: 74 20 53 74 72 69 6e 67 26 20 6f 62 6a 20 29 0d  t String& obj ).
0e80: 0a 09 7b 20 53 65 74 44 61 74 61 28 20 6f 62 6a  ..{ SetData( obj
0e90: 2e 64 61 74 61 28 29 20 29 3b 20 7d 0d 0a 0d 0a  .data() ); }....
0ea0: 2f 2f 20 83 7c 83 43 83 93 83 5e 8c 76 8e 5a 83  // .|.C...^.v.Z.
0eb0: 54 83 7c 81 5b 83 67 0d 0a 23 69 66 20 21 64 65  T.|.[.g..#if !de
0ec0: 66 69 6e 65 64 28 5f 55 4e 49 43 4f 44 45 29 20  fined(_UNICODE) 
0ed0: 26 26 20 64 65 66 69 6e 65 64 28 5f 4d 42 43 53  && defined(_MBCS
0ee0: 29 0d 0a 09 69 6e 6c 69 6e 65 20 54 43 48 41 52  )...inline TCHAR
0ef0: 2a 20 53 74 72 69 6e 67 3a 3a 6e 65 78 74 28 20  * String::next( 
0f00: 54 43 48 41 52 2a 20 70 20 29 0d 0a 09 09 7b 20  TCHAR* p )....{ 
0f10: 72 65 74 75 72 6e 20 70 20 2b 20 6c 62 5f 5b 2a  return p + lb_[*
0f20: 28 75 63 68 61 72 2a 29 70 5d 3b 20 7d 0d 0a 09  (uchar*)p]; }...
0f30: 69 6e 6c 69 6e 65 20 63 6f 6e 73 74 20 54 43 48  inline const TCH
0f40: 41 52 2a 20 53 74 72 69 6e 67 3a 3a 6e 65 78 74  AR* String::next
0f50: 28 20 63 6f 6e 73 74 20 54 43 48 41 52 2a 20 70  ( const TCHAR* p
0f60: 20 29 0d 0a 09 09 7b 20 72 65 74 75 72 6e 20 70   )....{ return p
0f70: 20 2b 20 6c 62 5f 5b 2a 28 63 6f 6e 73 74 20 75   + lb_[*(const u
0f80: 63 68 61 72 2a 29 70 5d 3b 20 7d 0d 0a 09 69 6e  char*)p]; }...in
0f90: 6c 69 6e 65 20 62 6f 6f 6c 20 53 74 72 69 6e 67  line bool String
0fa0: 3a 3a 69 73 4c 42 28 20 54 43 48 41 52 20 63 20  ::isLB( TCHAR c 
0fb0: 29 0d 0a 09 09 7b 20 72 65 74 75 72 6e 20 6c 62  )....{ return lb
0fc0: 5f 5b 28 75 63 68 61 72 29 63 5d 3d 3d 32 3b 20  _[(uchar)c]==2; 
0fd0: 7d 0d 0a 23 65 6c 73 65 20 2f 2f 20 5f 55 4e 49  }..#else // _UNI
0fe0: 43 4f 44 45 20 6f 72 20 5f 53 42 43 53 0d 0a 09  CODE or _SBCS...
0ff0: 69 6e 6c 69 6e 65 20 54 43 48 41 52 2a 20 53 74  inline TCHAR* St
1000: 72 69 6e 67 3a 3a 6e 65 78 74 28 20 54 43 48 41  ring::next( TCHA
1010: 52 2a 20 70 20 29 0d 0a 09 09 7b 20 72 65 74 75  R* p )....{ retu
1020: 72 6e 20 70 20 2b 20 31 3b 20 7d 0d 0a 09 69 6e  rn p + 1; }...in
1030: 6c 69 6e 65 20 63 6f 6e 73 74 20 54 43 48 41 52  line const TCHAR
1040: 2a 20 53 74 72 69 6e 67 3a 3a 6e 65 78 74 28 20  * String::next( 
1050: 63 6f 6e 73 74 20 54 43 48 41 52 2a 20 70 20 29  const TCHAR* p )
1060: 0d 0a 09 09 7b 20 72 65 74 75 72 6e 20 70 20 2b  ....{ return p +
1070: 20 31 3b 20 7d 0d 0a 09 69 6e 6c 69 6e 65 20 62   1; }...inline b
1080: 6f 6f 6c 20 53 74 72 69 6e 67 3a 3a 69 73 4c 42  ool String::isLB
1090: 28 20 54 43 48 41 52 20 63 20 29 0d 0a 09 09 7b  ( TCHAR c )....{
10a0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 20 7d   return false; }
10b0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 2f 2f 20 93  ..#endif....// .
10c0: e0 95 94 83 81 83 82 83 8a 8a 6d 95 db 0d 0a 69  ..........m....i
10d0: 6e 6c 69 6e 65 20 54 43 48 41 52 2a 20 53 74 72  nline TCHAR* Str
10e0: 69 6e 67 3a 3a 41 6c 6c 6f 63 4d 65 6d 28 20 75  ing::AllocMem( u
10f0: 6c 6f 6e 67 20 6d 69 6e 69 6d 75 6d 20 29 0d 0a  long minimum )..
1100: 09 7b 20 72 65 74 75 72 6e 20 41 6c 6c 6f 63 4d  .{ return AllocM
1110: 65 6d 48 65 6c 70 65 72 28 20 6d 69 6e 69 6d 75  emHelper( minimu
1120: 6d 2c 20 54 45 58 54 28 22 22 29 2c 20 31 20 29  m, TEXT(""), 1 )
1130: 3b 20 7d 0d 0a 2f 2f 20 93 e0 95 94 83 81 83 82  ; }..// ........
1140: 83 8a 8c c5 92 e8 0d 0a 69 6e 6c 69 6e 65 20 76  ........inline v
1150: 6f 69 64 20 53 74 72 69 6e 67 3a 3a 55 6e 6c 6f  oid String::Unlo
1160: 63 6b 4d 65 6d 28 20 6c 6f 6e 67 20 73 69 7a 20  ckMem( long siz 
1170: 29 0d 0a 09 7b 20 64 61 74 61 5f 2d 3e 6c 65 6e  )...{ data_->len
1180: 20 3d 20 31 20 2b 20 28 73 69 7a 3d 3d 2d 31 20   = 1 + (siz==-1 
1190: 3f 20 3a 3a 6c 73 74 72 6c 65 6e 28 63 5f 73 74  ? ::lstrlen(c_st
11a0: 72 28 29 29 20 3a 20 73 69 7a 29 3b 20 7d 0d 0a  r()) : siz); }..
11b0: 0d 0a 2f 2f 20 82 4f 95 b6 8e 9a 83 66 81 5b 83  ..// .O.....f.[.
11c0: 5e 0d 0a 69 6e 6c 69 6e 65 20 53 74 72 69 6e 67  ^..inline String
11d0: 3a 3a 53 74 72 69 6e 67 44 61 74 61 2a 20 53 74  ::StringData* St
11e0: 72 69 6e 67 3a 3a 6e 75 6c 6c 28 29 0d 0a 09 7b  ring::null()...{
11f0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 44 61 74 61   return nullData
1200: 5f 3b 20 7d 0d 0a 2f 2f 20 93 e0 95 94 83 66 81  _; }..// .....f.
1210: 5b 83 5e 8d 5c 91 a2 0d 0a 69 6e 6c 69 6e 65 20  [.^.\....inline 
1220: 53 74 72 69 6e 67 3a 3a 53 74 72 69 6e 67 44 61  String::StringDa
1230: 74 61 2a 20 53 74 72 69 6e 67 3a 3a 64 61 74 61  ta* String::data
1240: 28 29 20 63 6f 6e 73 74 0d 0a 09 7b 20 72 65 74  () const...{ ret
1250: 75 72 6e 20 64 61 74 61 5f 3b 20 7d 0d 0a 2f 2f  urn data_; }..//
1260: 20 8f 89 8a fa 89 bb 0d 0a 69 6e 6c 69 6e 65 20   ........inline 
1270: 76 6f 69 64 20 53 74 72 69 6e 67 3a 3a 53 65 74  void String::Set
1280: 44 61 74 61 28 20 53 74 72 69 6e 67 3a 3a 53 74  Data( String::St
1290: 72 69 6e 67 44 61 74 61 2a 20 64 20 29 0d 0a 09  ringData* d )...
12a0: 7b 20 64 61 74 61 5f 3d 64 2c 20 64 61 74 61 5f  { data_=d, data_
12b0: 2d 3e 72 65 66 2b 2b 3b 20 7d 0d 0a 0d 0a 2f 2f  ->ref++; }....//
12c0: 20 91 ae 90 ab 0d 0a 69 6e 6c 69 6e 65 20 63 6f   ......inline co
12d0: 6e 73 74 20 54 43 48 41 52 2a 20 53 74 72 69 6e  nst TCHAR* Strin
12e0: 67 3a 3a 63 5f 73 74 72 28 29 20 63 6f 6e 73 74  g::c_str() const
12f0: 0d 0a 09 7b 20 72 65 74 75 72 6e 20 64 61 74 61  ...{ return data
1300: 5f 2d 3e 62 75 66 28 29 3b 20 7d 0d 0a 2f 2f 20  _->buf(); }..// 
1310: 91 ae 90 ab 0d 0a 69 6e 6c 69 6e 65 20 75 6c 6f  ......inline ulo
1320: 6e 67 20 53 74 72 69 6e 67 3a 3a 6c 65 6e 28 29  ng String::len()
1330: 20 63 6f 6e 73 74 0d 0a 09 7b 20 72 65 74 75 72   const...{ retur
1340: 6e 20 64 61 74 61 5f 2d 3e 6c 65 6e 2d 31 3b 20  n data_->len-1; 
1350: 7d 0d 0a 2f 2f 20 97 76 91 66 0d 0a 69 6e 6c 69  }..// .v.f..inli
1360: 6e 65 20 63 6f 6e 73 74 20 54 43 48 41 52 20 53  ne const TCHAR S
1370: 74 72 69 6e 67 3a 3a 6f 70 65 72 61 74 6f 72 5b  tring::operator[
1380: 5d 28 69 6e 74 20 6e 29 20 63 6f 6e 73 74 0d 0a  ](int n) const..
1390: 09 7b 20 72 65 74 75 72 6e 20 64 61 74 61 5f 2d  .{ return data_-
13a0: 3e 62 75 66 28 29 5b 6e 5d 3b 20 7d 0d 0a 0d 0a  >buf()[n]; }....
13b0: 2f 2f 20 94 e4 8a 72 0d 0a 69 6e 6c 69 6e 65 20  // ...r..inline 
13c0: 62 6f 6f 6c 20 53 74 72 69 6e 67 3a 3a 6f 70 65  bool String::ope
13d0: 72 61 74 6f 72 3d 3d 28 20 4c 50 43 54 53 54 52  rator==( LPCTSTR
13e0: 20 73 20 29 20 63 6f 6e 73 74 0d 0a 09 7b 20 72   s ) const...{ r
13f0: 65 74 75 72 6e 20 30 3d 3d 3a 3a 6c 73 74 72 63  eturn 0==::lstrc
1400: 6d 70 28 20 63 5f 73 74 72 28 29 2c 20 73 20 29  mp( c_str(), s )
1410: 3b 20 7d 0d 0a 2f 2f 20 94 e4 8a 72 0d 0a 69 6e  ; }..// ...r..in
1420: 6c 69 6e 65 20 62 6f 6f 6c 20 53 74 72 69 6e 67  line bool String
1430: 3a 3a 6f 70 65 72 61 74 6f 72 3d 3d 28 20 63 6f  ::operator==( co
1440: 6e 73 74 20 53 74 72 69 6e 67 26 20 6f 62 6a 20  nst String& obj 
1450: 29 20 63 6f 6e 73 74 0d 0a 09 7b 20 72 65 74 75  ) const...{ retu
1460: 72 6e 20 28 64 61 74 61 5f 3d 3d 6f 62 6a 2e 64  rn (data_==obj.d
1470: 61 74 61 5f 20 3f 20 74 72 75 65 20 3a 20 6f 70  ata_ ? true : op
1480: 65 72 61 74 6f 72 3d 3d 28 20 6f 62 6a 2e 63 5f  erator==( obj.c_
1490: 73 74 72 28 29 20 29 29 3b 20 7d 0d 0a 2f 2f 20  str() )); }..// 
14a0: 94 e4 8a 72 0d 0a 69 6e 6c 69 6e 65 20 62 6f 6f  ...r..inline boo
14b0: 6c 20 53 74 72 69 6e 67 3a 3a 69 73 53 61 6d 65  l String::isSame
14c0: 28 20 4c 50 43 54 53 54 52 20 73 20 29 20 63 6f  ( LPCTSTR s ) co
14d0: 6e 73 74 0d 0a 09 7b 20 72 65 74 75 72 6e 20 30  nst...{ return 0
14e0: 3d 3d 3a 3a 6c 73 74 72 63 6d 70 69 28 20 63 5f  ==::lstrcmpi( c_
14f0: 73 74 72 28 29 2c 20 73 20 29 3b 20 7d 0d 0a 2f  str(), s ); }../
1500: 2f 20 94 e4 8a 72 0d 0a 69 6e 6c 69 6e 65 20 62  / ...r..inline b
1510: 6f 6f 6c 20 53 74 72 69 6e 67 3a 3a 69 73 53 61  ool String::isSa
1520: 6d 65 28 20 63 6f 6e 73 74 20 53 74 72 69 6e 67  me( const String
1530: 26 20 6f 62 6a 20 29 20 63 6f 6e 73 74 0d 0a 09  & obj ) const...
1540: 7b 20 72 65 74 75 72 6e 20 28 64 61 74 61 5f 3d  { return (data_=
1550: 3d 6f 62 6a 2e 64 61 74 61 5f 20 3f 20 74 72 75  =obj.data_ ? tru
1560: 65 20 3a 20 6f 70 65 72 61 74 6f 72 3d 3d 28 20  e : operator==( 
1570: 6f 62 6a 2e 63 5f 73 74 72 28 29 20 29 29 3b 20  obj.c_str() )); 
1580: 7d 0d 0a 0d 0a 2f 2f 20 97 76 83 52 83 73 81 5b  }....// .v.R.s.[
1590: 91 e3 93 fc 0d 0a 69 6e 6c 69 6e 65 20 53 74 72  ......inline Str
15a0: 69 6e 67 26 20 53 74 72 69 6e 67 3a 3a 6f 70 65  ing& String::ope
15b0: 72 61 74 6f 72 20 3d 20 28 20 63 6f 6e 73 74 20  rator = ( const 
15c0: 54 43 48 41 52 2a 20 73 20 29 0d 0a 09 7b 20 72  TCHAR* s )...{ r
15d0: 65 74 75 72 6e 20 53 65 74 53 74 72 69 6e 67 28  eturn SetString(
15e0: 20 73 2c 20 3a 3a 6c 73 74 72 6c 65 6e 28 73 29   s, ::lstrlen(s)
15f0: 20 29 3b 20 7d 0d 0a 2f 2f 20 8d 87 90 ac 0d 0a   ); }..// ......
1600: 69 6e 6c 69 6e 65 20 53 74 72 69 6e 67 26 20 53  inline String& S
1610: 74 72 69 6e 67 3a 3a 6f 70 65 72 61 74 6f 72 20  tring::operator 
1620: 2b 3d 20 28 20 63 6f 6e 73 74 20 53 74 72 69 6e  += ( const Strin
1630: 67 26 20 6f 62 6a 20 29 0d 0a 09 7b 20 72 65 74  g& obj )...{ ret
1640: 75 72 6e 20 43 61 74 53 74 72 69 6e 67 28 20 6f  urn CatString( o
1650: 62 6a 2e 63 5f 73 74 72 28 29 2c 20 6f 62 6a 2e  bj.c_str(), obj.
1660: 6c 65 6e 28 29 20 29 3b 20 7d 0d 0a 2f 2f 20 8d  len() ); }..// .
1670: 87 90 ac 0d 0a 69 6e 6c 69 6e 65 20 53 74 72 69  .....inline Stri
1680: 6e 67 26 20 53 74 72 69 6e 67 3a 3a 6f 70 65 72  ng& String::oper
1690: 61 74 6f 72 20 2b 3d 20 28 20 63 6f 6e 73 74 20  ator += ( const 
16a0: 54 43 48 41 52 2a 20 73 20 29 0d 0a 09 7b 20 72  TCHAR* s )...{ r
16b0: 65 74 75 72 6e 20 43 61 74 53 74 72 69 6e 67 28  eturn CatString(
16c0: 20 73 2c 20 3a 3a 6c 73 74 72 6c 65 6e 28 73 29   s, ::lstrlen(s)
16d0: 20 29 3b 20 7d 0d 0a 2f 2f 20 8d 87 90 ac 0d 0a   ); }..// ......
16e0: 69 6e 6c 69 6e 65 20 53 74 72 69 6e 67 26 20 53  inline String& S
16f0: 74 72 69 6e 67 3a 3a 6f 70 65 72 61 74 6f 72 20  tring::operator 
1700: 2b 3d 20 28 20 54 43 48 41 52 20 63 20 29 0d 0a  += ( TCHAR c )..
1710: 09 7b 20 72 65 74 75 72 6e 20 43 61 74 53 74 72  .{ return CatStr
1720: 69 6e 67 28 20 26 63 2c 20 31 20 29 3b 20 7d 0d  ing( &c, 1 ); }.
1730: 0a 0d 0a 2f 2f 20 95 cf 8a b7 0d 0a 69 6e 6c 69  ...// ......inli
1740: 6e 65 20 69 6e 74 20 53 74 72 69 6e 67 3a 3a 47  ne int String::G
1750: 65 74 49 6e 74 28 29 0d 0a 09 7b 20 72 65 74 75  etInt()...{ retu
1760: 72 6e 20 47 65 74 49 6e 74 28 20 64 61 74 61 5f  rn GetInt( data_
1770: 2d 3e 62 75 66 28 29 20 29 3b 20 7d 0d 0a 0d 0a  ->buf() ); }....
1780: 2f 2f 40 7b 20 53 74 72 69 6e 67 20 2b 20 53 74  //@{ String + St
1790: 72 69 6e 67 20 2f 2f 40 7d 0d 0a 69 6e 6c 69 6e  ring //@}..inlin
17a0: 65 20 63 6f 6e 73 74 20 53 74 72 69 6e 67 20 6f  e const String o
17b0: 70 65 72 61 74 6f 72 2b 28 20 63 6f 6e 73 74 20  perator+( const 
17c0: 53 74 72 69 6e 67 26 20 61 2c 20 63 6f 6e 73 74  String& a, const
17d0: 20 53 74 72 69 6e 67 26 20 62 20 29 0d 0a 09 7b   String& b )...{
17e0: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 28 61   return String(a
17f0: 29 20 2b 3d 20 62 3b 20 7d 0d 0a 2f 2f 40 7b 20  ) += b; }..//@{ 
1800: 53 74 72 69 6e 67 20 2b 20 54 43 48 41 52 2a 20  String + TCHAR* 
1810: 2f 2f 40 7d 0d 0a 69 6e 6c 69 6e 65 20 63 6f 6e  //@}..inline con
1820: 73 74 20 53 74 72 69 6e 67 20 6f 70 65 72 61 74  st String operat
1830: 6f 72 2b 28 20 63 6f 6e 73 74 20 53 74 72 69 6e  or+( const Strin
1840: 67 26 20 61 2c 20 63 6f 6e 73 74 20 54 43 48 41  g& a, const TCHA
1850: 52 2a 20 62 20 29 0d 0a 09 7b 20 72 65 74 75 72  R* b )...{ retur
1860: 6e 20 53 74 72 69 6e 67 28 61 29 20 2b 3d 20 62  n String(a) += b
1870: 3b 20 7d 0d 0a 2f 2f 40 7b 20 54 43 48 41 52 2a  ; }..//@{ TCHAR*
1880: 20 2b 20 53 74 72 69 6e 67 20 2f 2f 40 7d 0d 0a   + String //@}..
1890: 69 6e 6c 69 6e 65 20 63 6f 6e 73 74 20 53 74 72  inline const Str
18a0: 69 6e 67 20 6f 70 65 72 61 74 6f 72 2b 28 20 63  ing operator+( c
18b0: 6f 6e 73 74 20 54 43 48 41 52 2a 20 61 2c 20 63  onst TCHAR* a, c
18c0: 6f 6e 73 74 20 53 74 72 69 6e 67 26 20 62 20 29  onst String& b )
18d0: 0d 0a 09 7b 20 72 65 74 75 72 6e 20 53 74 72 69  ...{ return Stri
18e0: 6e 67 28 61 29 20 2b 3d 20 62 3b 20 7d 0d 0a 0d  ng(a) += b; }...
18f0: 0a 2f 2f 20 43 6f 6e 76 54 6f 57 43 68 61 72 82  .// ConvToWChar.
1900: cc 95 d4 92 6c 83 6f 83 62 83 74 83 40 82 cc 89  ....l.o.b.t.@...
1910: f0 95 fa 0d 0a 69 6e 6c 69 6e 65 20 76 6f 69 64  .....inline void
1920: 20 53 74 72 69 6e 67 3a 3a 46 72 65 65 57 43 4d   String::FreeWCM
1930: 65 6d 28 20 63 6f 6e 73 74 20 77 63 68 61 72 5f  em( const wchar_
1940: 74 2a 20 77 63 20 29 20 63 6f 6e 73 74 0d 0a 23  t* wc ) const..#
1950: 69 66 64 65 66 20 5f 55 4e 49 43 4f 44 45 0d 0a  ifdef _UNICODE..
1960: 09 7b 7d 0d 0a 23 65 6c 73 65 20 2f 2f 20 5f 4d  .{}..#else // _M
1970: 42 43 53 20 6f 72 20 5f 53 42 43 53 0d 0a 09 7b  BCS or _SBCS...{
1980: 20 64 65 6c 65 74 65 20 5b 5d 20 63 6f 6e 73 74   delete [] const
1990: 5f 63 61 73 74 3c 77 63 68 61 72 5f 74 2a 3e 28  _cast<wchar_t*>(
19a0: 77 63 29 3b 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  wc); }..#endif..
19b0: 0d 0a 0d 0a 0d 0a 23 65 6e 64 69 66 20 2f 2f 20  ......#endif // 
19c0: 5f 5f 63 63 64 6f 63 5f 5f 0d 0a 23 75 6e 64 65  __ccdoc__..#unde
19d0: 66 20 58 54 43 48 41 52 0d 0a 2f 2f 3d 3d 3d 3d  f XTCHAR..//====
19e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
19f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1a00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1a10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1a20: 3d 3d 3d 3d 3d 0d 0a 2f 2f 40 7b 0d 0a 2f 2f 09  =====..//@{..//.
1a30: 95 b6 8e 9a 97 f1 8f 88 97 9d 81 7b 83 bf 0d 0a  ...........{....
1a40: 2f 2f 0d 0a 2f 2f 09 53 74 72 69 6e 67 83 4e 83  //..//.String.N.
1a50: 89 83 58 93 e0 82 cc 83 6f 83 62 83 74 83 40 8a  ..X.....o.b.t.@.
1a60: 6d 95 db 8a d6 90 94 82 f0 8c c4 82 d7 82 e9 82  m...............
1a70: e6 82 a4 82 c9 82 b5 82 bd 94 c5 53 74 72 69 6e  ...........Strin
1a80: 67 82 c5 82 b7 81 42 0d 0a 2f 2f 40 7d 0d 0a 2f  g.....B..//@}../
1a90: 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  /===============
1aa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1ab0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1ac0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1ad0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 73 74  ==========....st
1ae0: 72 75 63 74 20 52 61 77 53 74 72 69 6e 67 20 3a  ruct RawString :
1af0: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 0d 0a   public String..
1b00: 7b 0d 0a 09 54 43 48 41 52 2a 20 41 6c 6c 6f 63  {...TCHAR* Alloc
1b10: 4d 65 6d 28 20 75 6c 6f 6e 67 20 6d 20 29 20 7b  Mem( ulong m ) {
1b20: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 3a 3a   return String::
1b30: 41 6c 6c 6f 63 4d 65 6d 28 6d 29 3b 20 7d 0d 0a  AllocMem(m); }..
1b40: 09 76 6f 69 64 20 55 6e 6c 6f 63 6b 4d 65 6d 28  .void UnlockMem(
1b50: 29 20 20 20 20 20 20 20 20 20 20 20 7b 20 53 74  )           { St
1b60: 72 69 6e 67 3a 3a 55 6e 6c 6f 63 6b 4d 65 6d 28  ring::UnlockMem(
1b70: 29 3b 20 7d 0d 0a 7d 3b 0d 0a 0d 0a 7d 20 20 20  ); }..};....}   
1b80: 20 20 20 2f 2f 20 6e 61 6d 65 73 70 61 63 65 20     // namespace 
1b90: 6b 69 0d 0a 0d 0a 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d  ki......//======
1ba0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1bb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1bc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1be0: 3d 3d 3d 0d 0a 2f 2f 40 7b 0d 0a 2f 2f 09 95 b6  ===..//@{..//...
1bf0: 8e 9a 97 f1 8f 88 97 9d 81 7b 83 bf 82 51 0d 0a  .........{...Q..
1c00: 2f 2f 0d 0a 2f 2f 09 57 69 64 65 95 b6 8e 9a 94  //..//.Wide.....
1c10: c5 8a d6 90 94 82 f0 8e a9 91 4f 82 c5 0d 0a 2f  ..........O..../
1c20: 2f 40 7d 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d  /@}..//=========
1c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1c50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1c70: 0d 0a 0d 0a 23 69 66 64 65 66 20 5f 55 4e 49 43  ....#ifdef _UNIC
1c80: 4f 44 45 0d 0a 09 23 64 65 66 69 6e 65 20 6d 79  ODE...#define my
1c90: 5f 6c 73 74 72 6c 65 6e 57 20 3a 3a 6c 73 74 72  _lstrlenW ::lstr
1ca0: 6c 65 6e 57 0d 0a 09 23 64 65 66 69 6e 65 20 6d  lenW...#define m
1cb0: 79 5f 6c 73 74 72 63 70 79 57 20 3a 3a 6c 73 74  y_lstrcpyW ::lst
1cc0: 72 63 70 79 57 0d 0a 23 65 6c 73 65 0d 0a 09 69  rcpyW..#else...i
1cd0: 6e 6c 69 6e 65 20 73 74 61 74 69 63 0d 0a 09 75  nline static...u
1ce0: 6e 69 63 6f 64 65 2a 20 6d 79 5f 6c 73 74 72 63  nicode* my_lstrc
1cf0: 70 79 57 28 20 75 6e 69 63 6f 64 65 2a 20 63 6f  pyW( unicode* co
1d00: 6e 73 74 20 64 2c 20 63 6f 6e 73 74 20 75 6e 69  nst d, const uni
1d10: 63 6f 64 65 2a 20 73 20 29 0d 0a 09 7b 0d 0a 09  code* s )...{...
1d20: 09 66 6f 72 28 75 6e 69 63 6f 64 65 2a 20 6e 3d  .for(unicode* n=
1d30: 64 3b 20 2a 6e 2b 2b 3d 2a 73 2b 2b 3b 29 3b 0d  d; *n++=*s++;);.
1d40: 0a 09 09 72 65 74 75 72 6e 20 64 3b 0d 0a 09 7d  ...return d;...}
1d50: 0d 0a 0d 0a 09 69 6e 6c 69 6e 65 20 73 74 61 74  .....inline stat
1d60: 69 63 0d 0a 09 69 6e 74 20 6d 79 5f 6c 73 74 72  ic...int my_lstr
1d70: 6c 65 6e 57 28 20 63 6f 6e 73 74 20 75 6e 69 63  lenW( const unic
1d80: 6f 64 65 2a 20 63 6f 6e 73 74 20 64 20 29 0d 0a  ode* const d )..
1d90: 09 7b 0d 0a 09 09 63 6f 6e 73 74 20 75 6e 69 63  .{....const unic
1da0: 6f 64 65 2a 20 6e 3b 0d 0a 09 09 66 6f 72 28 6e  ode* n;....for(n
1db0: 3d 64 3b 20 2a 6e 3b 20 2b 2b 6e 29 3b 0d 0a 09  =d; *n; ++n);...
1dc0: 09 72 65 74 75 72 6e 20 73 74 61 74 69 63 5f 63  .return static_c
1dd0: 61 73 74 3c 69 6e 74 3e 28 6e 2d 64 29 3b 0d 0a  ast<int>(n-d);..
1de0: 09 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 0d 0a  .}..#endif......
1df0: 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ..//============
1e00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d  =============...
1e40: 0a 23 65 6e 64 69 66 20 2f 2f 20 5f 4b 49 4c 49  .#endif // _KILI
1e50: 42 5f 53 54 52 49 4e 47 5f 48 5f 0d 0a           B_STRING_H_..