Hex Artifact Content

Not logged in

Artifact 9d4f2283a9450bb3a17e9bc6ed039fd86fc8a5a0:


0000: 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61 66 78  #include "stdafx
0010: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22 61  .h"..#include "a
0020: 70 70 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20  pp.h"..#include 
0030: 22 6d 65 6d 6f 72 79 2e 68 22 0d 0a 23 69 6e 63  "memory.h"..#inc
0040: 6c 75 64 65 20 22 73 74 72 69 6e 67 2e 68 22 0d  lude "string.h".
0050: 0a 75 73 69 6e 67 20 6e 61 6d 65 73 70 61 63 65  .using namespace
0060: 20 6b 69 3b 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 3d 3d   ki;........//==
0070: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0090: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00b0: 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 53 74 72 69 6e  =======....Strin
00c0: 67 3a 3a 53 74 72 69 6e 67 44 61 74 61 2a 20 53  g::StringData* S
00d0: 74 72 69 6e 67 3a 3a 6e 75 6c 6c 44 61 74 61 5f  tring::nullData_
00e0: 3b 0d 0a 63 68 61 72 20 20 20 20 20 20 20 20 20  ;..char         
00f0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 3a 3a 6c         String::l
0100: 62 5f 5b 32 35 36 5d 3b 0d 0a 0d 0a 76 6f 69 64  b_[256];....void
0110: 20 53 74 72 69 6e 67 3a 3a 4c 69 62 49 6e 69 74   String::LibInit
0120: 28 29 0d 0a 7b 0d 0a 09 73 74 61 74 69 63 20 69  ()..{...static i
0130: 6e 74 20 6e 75 6c 6c 73 74 72 5f 69 6d 61 67 65  nt nullstr_image
0140: 5b 34 5d 3b 0d 0a 09 6e 75 6c 6c 73 74 72 5f 69  [4];...nullstr_i
0150: 6d 61 67 65 5b 30 5d 20 3d 20 31 3b 0d 0a 09 6e  mage[0] = 1;...n
0160: 75 6c 6c 73 74 72 5f 69 6d 61 67 65 5b 31 5d 20  ullstr_image[1] 
0170: 3d 20 31 3b 0d 0a 09 6e 75 6c 6c 73 74 72 5f 69  = 1;...nullstr_i
0180: 6d 61 67 65 5b 32 5d 20 3d 20 34 3b 0d 0a 09 6e  mage[2] = 4;...n
0190: 75 6c 6c 44 61 74 61 5f 20 3d 20 72 65 69 6e 74  ullData_ = reint
01a0: 65 72 70 72 65 74 5f 63 61 73 74 3c 53 74 72 69  erpret_cast<Stri
01b0: 6e 67 44 61 74 61 2a 3e 28 6e 75 6c 6c 73 74 72  ngData*>(nullstr
01c0: 5f 69 6d 61 67 65 29 3b 0d 0a 0d 0a 23 69 66 20  _image);....#if 
01d0: 21 64 65 66 69 6e 65 64 28 5f 55 4e 49 43 4f 44  !defined(_UNICOD
01e0: 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 4d  E) && defined(_M
01f0: 42 43 53 29 0d 0a 09 66 6f 72 28 20 69 6e 74 20  BCS)...for( int 
0200: 63 3d 30 3b 20 63 3c 32 35 36 3b 20 2b 2b 63 20  c=0; c<256; ++c 
0210: 29 0d 0a 09 09 6c 62 5f 5b 63 5d 20 3d 20 28 3a  )....lb_[c] = (:
0220: 3a 49 73 44 42 43 53 4c 65 61 64 42 79 74 65 28  :IsDBCSLeadByte(
0230: 63 29 20 3f 20 32 20 3a 20 31 29 3b 0d 0a 23 65  c) ? 2 : 1);..#e
0240: 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 2f  ndif..}......../
0250: 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /---------------
0260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 53 74  ----------....St
02a0: 72 69 6e 67 3a 3a 53 74 72 69 6e 67 28 20 63 6f  ring::String( co
02b0: 6e 73 74 20 54 43 48 41 52 2a 20 73 2c 20 6c 6f  nst TCHAR* s, lo
02c0: 6e 67 20 6c 65 6e 20 29 0d 0a 7b 0d 0a 09 2f 2f  ng len )..{...//
02d0: 20 92 b7 82 b3 8e 77 92 e8 82 aa 96 b3 82 a2 8f   .....w.........
02e0: ea 8d 87 82 cd 8c 76 8e 5a 0d 0a 09 69 66 28 20  ......v.Z...if( 
02f0: 6c 65 6e 3d 3d 2d 31 20 29 0d 0a 09 09 6c 65 6e  len==-1 )....len
0300: 20 3d 20 3a 3a 6c 73 74 72 6c 65 6e 28 73 29 3b   = ::lstrlen(s);
0310: 0d 0a 0d 0a 09 69 66 28 20 6c 65 6e 3d 3d 30 20  .....if( len==0 
0320: 29 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 30 95 b6 8e  )...{....// 0...
0330: 9a 97 70 82 cc 93 c1 8e ea 83 6f 83 62 83 74 83  ..p.......o.b.t.
0340: 40 0d 0a 09 09 53 65 74 44 61 74 61 28 20 6e 75  @....SetData( nu
0350: 6c 6c 28 29 20 29 3b 0d 0a 09 7d 0d 0a 09 65 6c  ll() );...}...el
0360: 73 65 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 90 56 8b  se...{....// .V.
0370: 4b 83 6f 83 62 83 74 83 40 8d ec 90 ac 0d 0a 09  K.o.b.t.@.......
0380: 09 64 61 74 61 5f 20 3d 20 73 74 61 74 69 63 5f  .data_ = static_
0390: 63 61 73 74 3c 53 74 72 69 6e 67 44 61 74 61 2a  cast<StringData*
03a0: 3e 0d 0a 09 09 20 20 20 20 28 6d 65 6d 28 29 2e  >....    (mem().
03b0: 41 6c 6c 6f 63 28 20 73 69 7a 65 6f 66 28 53 74  Alloc( sizeof(St
03c0: 72 69 6e 67 44 61 74 61 29 2b 28 6c 65 6e 2b 31  ringData)+(len+1
03d0: 29 2a 73 69 7a 65 6f 66 28 54 43 48 41 52 29 20  )*sizeof(TCHAR) 
03e0: 29 29 3b 0d 0a 09 09 64 61 74 61 5f 2d 3e 72 65  ));....data_->re
03f0: 66 20 20 3d 20 31 3b 0d 0a 09 09 64 61 74 61 5f  f  = 1;....data_
0400: 2d 3e 6c 65 6e 20 20 3d 20 6c 65 6e 2b 31 3b 0d  ->len  = len+1;.
0410: 0a 09 09 64 61 74 61 5f 2d 3e 61 6c 65 6e 20 3d  ...data_->alen =
0420: 20 6c 65 6e 2b 31 3b 0d 0a 09 09 6d 65 6d 6d 6f   len+1;....memmo
0430: 76 65 28 20 64 61 74 61 5f 2b 31 2c 20 73 2c 20  ve( data_+1, s, 
0440: 28 6c 65 6e 2b 31 29 2a 73 69 7a 65 6f 66 28 54  (len+1)*sizeof(T
0450: 43 48 41 52 29 20 29 3b 0d 0a 09 7d 0d 0a 7d 0d  CHAR) );...}..}.
0460: 0a 0d 0a 69 6e 6c 69 6e 65 20 76 6f 69 64 20 53  ...inline void S
0470: 74 72 69 6e 67 3a 3a 52 65 6c 65 61 73 65 44 61  tring::ReleaseDa
0480: 74 61 28 29 0d 0a 7b 0d 0a 09 69 66 28 20 2d 2d  ta()..{...if( --
0490: 64 61 74 61 5f 2d 3e 72 65 66 20 3c 3d 20 30 20  data_->ref <= 0 
04a0: 29 0d 0a 09 09 6d 65 6d 28 29 2e 44 65 41 6c 6c  )....mem().DeAll
04b0: 6f 63 28 0d 0a 09 09 09 64 61 74 61 5f 2c 20 73  oc(.....data_, s
04c0: 69 7a 65 6f 66 28 53 74 72 69 6e 67 44 61 74 61  izeof(StringData
04d0: 29 2b 73 69 7a 65 6f 66 28 54 43 48 41 52 29 2a  )+sizeof(TCHAR)*
04e0: 64 61 74 61 5f 2d 3e 61 6c 65 6e 20 29 3b 0d 0a  data_->alen );..
04f0: 7d 0d 0a 0d 0a 53 74 72 69 6e 67 3a 3a 7e 53 74  }....String::~St
0500: 72 69 6e 67 28 29 0d 0a 7b 0d 0a 09 52 65 6c 65  ring()..{...Rele
0510: 61 73 65 44 61 74 61 28 29 3b 0d 0a 7d 0d 0a 0d  aseData();..}...
0520: 0a 54 43 48 41 52 2a 20 53 74 72 69 6e 67 3a 3a  .TCHAR* String::
0530: 52 65 61 6c 6c 6f 63 4d 65 6d 28 20 75 6c 6f 6e  ReallocMem( ulon
0540: 67 20 6d 69 6e 69 6d 75 6d 3d 30 20 29 0d 0a 7b  g minimum=0 )..{
0550: 0d 0a 09 72 65 74 75 72 6e 20 41 6c 6c 6f 63 4d  ...return AllocM
0560: 65 6d 48 65 6c 70 65 72 28 20 6d 69 6e 69 6d 75  emHelper( minimu
0570: 6d 2c 20 63 5f 73 74 72 28 29 2c 20 6c 65 6e 28  m, c_str(), len(
0580: 29 2b 31 20 29 3b 0d 0a 7d 0d 0a 0d 0a 53 74 72  )+1 );..}....Str
0590: 69 6e 67 26 20 53 74 72 69 6e 67 3a 3a 53 65 74  ing& String::Set
05a0: 53 74 72 69 6e 67 28 20 63 6f 6e 73 74 20 54 43  String( const TC
05b0: 48 41 52 2a 20 73 74 72 2c 20 75 6c 6f 6e 67 20  HAR* str, ulong 
05c0: 73 69 7a 20 29 0d 0a 7b 0d 0a 09 54 43 48 41 52  siz )..{...TCHAR
05d0: 2a 20 62 75 66 20 3d 20 41 6c 6c 6f 63 4d 65 6d  * buf = AllocMem
05e0: 28 20 73 69 7a 2b 31 20 29 3b 0d 0a 0d 0a 09 6d  ( siz+1 );.....m
05f0: 65 6d 6d 6f 76 65 28 20 62 75 66 2c 20 73 74 72  emmove( buf, str
0600: 2c 20 73 69 7a 2a 73 69 7a 65 6f 66 28 54 43 48  , siz*sizeof(TCH
0610: 41 52 29 20 29 3b 0d 0a 09 62 75 66 5b 73 69 7a  AR) );...buf[siz
0620: 5d 20 3d 20 54 45 58 54 28 27 5c 30 27 29 3b 0d  ] = TEXT('\0');.
0630: 0a 0d 0a 09 55 6e 6c 6f 63 6b 4d 65 6d 28 20 73  ....UnlockMem( s
0640: 69 7a 20 29 3b 0d 0a 09 72 65 74 75 72 6e 20 2a  iz );...return *
0650: 74 68 69 73 3b 0d 0a 7d 0d 0a 0d 0a 53 74 72 69  this;..}....Stri
0660: 6e 67 26 20 53 74 72 69 6e 67 3a 3a 43 61 74 53  ng& String::CatS
0670: 74 72 69 6e 67 28 20 63 6f 6e 73 74 20 54 43 48  tring( const TCH
0680: 41 52 2a 20 73 74 72 2c 20 75 6c 6f 6e 67 20 73  AR* str, ulong s
0690: 69 7a 20 29 0d 0a 7b 0d 0a 09 63 6f 6e 73 74 20  iz )..{...const 
06a0: 69 6e 74 20 70 6c 65 6e 20 3d 20 6c 65 6e 28 29  int plen = len()
06b0: 3b 0d 0a 09 54 43 48 41 52 2a 20 62 75 66 20 3d  ;...TCHAR* buf =
06c0: 20 52 65 61 6c 6c 6f 63 4d 65 6d 28 20 70 6c 65   ReallocMem( ple
06d0: 6e 20 2b 20 73 69 7a 20 2b 20 31 20 29 3b 0d 0a  n + siz + 1 );..
06e0: 0d 0a 09 6d 65 6d 6d 6f 76 65 28 20 62 75 66 2b  ...memmove( buf+
06f0: 70 6c 65 6e 2c 20 73 74 72 2c 20 73 69 7a 2a 73  plen, str, siz*s
0700: 69 7a 65 6f 66 28 54 43 48 41 52 29 20 29 3b 0d  izeof(TCHAR) );.
0710: 0a 09 62 75 66 5b 70 6c 65 6e 2b 73 69 7a 5d 20  ..buf[plen+siz] 
0720: 3d 20 54 45 58 54 28 27 5c 30 27 29 3b 0d 0a 0d  = TEXT('\0');...
0730: 0a 09 55 6e 6c 6f 63 6b 4d 65 6d 28 20 70 6c 65  ..UnlockMem( ple
0740: 6e 2b 73 69 7a 20 29 3b 0d 0a 09 72 65 74 75 72  n+siz );...retur
0750: 6e 20 2a 74 68 69 73 3b 0d 0a 7d 0d 0a 0d 0a 54  n *this;..}....T
0760: 43 48 41 52 2a 20 53 74 72 69 6e 67 3a 3a 41 6c  CHAR* String::Al
0770: 6c 6f 63 4d 65 6d 48 65 6c 70 65 72 28 20 75 6c  locMemHelper( ul
0780: 6f 6e 67 20 6d 69 6e 69 6d 75 6d 2c 20 63 6f 6e  ong minimum, con
0790: 73 74 20 54 43 48 41 52 2a 20 73 74 72 2c 20 75  st TCHAR* str, u
07a0: 6c 6f 6e 67 20 73 69 7a 20 29 0d 0a 7b 0d 0a 09  long siz )..{...
07b0: 69 66 28 20 64 61 74 61 5f 2d 3e 72 65 66 20 3e  if( data_->ref >
07c0: 20 31 20 7c 7c 20 64 61 74 61 5f 2d 3e 61 6c 65   1 || data_->ale
07d0: 6e 20 3c 20 6d 69 6e 69 6d 75 6d 20 29 0d 0a 09  n < minimum )...
07e0: 7b 0d 0a 09 09 6d 69 6e 69 6d 75 6d 20 3d 20 4d  {....minimum = M
07f0: 61 78 28 20 6d 69 6e 69 6d 75 6d 2c 20 64 61 74  ax( minimum, dat
0800: 61 5f 2d 3e 61 6c 65 6e 20 29 3b 0d 0a 0d 0a 09  a_->alen );.....
0810: 09 53 74 72 69 6e 67 44 61 74 61 2a 20 70 4e 65  .StringData* pNe
0820: 77 20 3d 20 73 74 61 74 69 63 5f 63 61 73 74 3c  w = static_cast<
0830: 53 74 72 69 6e 67 44 61 74 61 2a 3e 0d 0a 09 09  StringData*>....
0840: 09 28 6d 65 6d 28 29 2e 41 6c 6c 6f 63 28 20 73  .(mem().Alloc( s
0850: 69 7a 65 6f 66 28 53 74 72 69 6e 67 44 61 74 61  izeof(StringData
0860: 29 2b 6d 69 6e 69 6d 75 6d 2a 73 69 7a 65 6f 66  )+minimum*sizeof
0870: 28 54 43 48 41 52 29 20 29 29 3b 0d 0a 09 09 70  (TCHAR) ));....p
0880: 4e 65 77 2d 3e 72 65 66 20 20 3d 20 31 3b 0d 0a  New->ref  = 1;..
0890: 09 09 70 4e 65 77 2d 3e 61 6c 65 6e 20 3d 20 6d  ..pNew->alen = m
08a0: 69 6e 69 6d 75 6d 3b 0d 0a 09 09 70 4e 65 77 2d  inimum;....pNew-
08b0: 3e 6c 65 6e 20 20 3d 20 73 69 7a 3b 0d 0a 09 09  >len  = siz;....
08c0: 6d 65 6d 6d 6f 76 65 28 20 70 4e 65 77 2d 3e 62  memmove( pNew->b
08d0: 75 66 28 29 2c 20 73 74 72 2c 20 73 69 7a 2a 73  uf(), str, siz*s
08e0: 69 7a 65 6f 66 28 54 43 48 41 52 29 20 29 3b 0d  izeof(TCHAR) );.
08f0: 0a 0d 0a 09 09 52 65 6c 65 61 73 65 44 61 74 61  .....ReleaseData
0900: 28 29 3b 0d 0a 09 09 64 61 74 61 5f 20 3d 20 70  ();....data_ = p
0910: 4e 65 77 3b 0d 0a 09 7d 0d 0a 0d 0a 09 72 65 74  New;...}.....ret
0920: 75 72 6e 20 64 61 74 61 5f 2d 3e 62 75 66 28 29  urn data_->buf()
0930: 3b 0d 0a 7d 0d 0a 0d 0a 53 74 72 69 6e 67 26 20  ;..}....String& 
0940: 53 74 72 69 6e 67 3a 3a 6f 70 65 72 61 74 6f 72  String::operator
0950: 20 3d 20 28 20 63 6f 6e 73 74 20 53 74 72 69 6e   = ( const Strin
0960: 67 26 20 6f 62 6a 20 29 0d 0a 7b 0d 0a 09 69 66  g& obj )..{...if
0970: 28 20 64 61 74 61 28 29 20 21 3d 20 6f 62 6a 2e  ( data() != obj.
0980: 64 61 74 61 28 29 20 29 0d 0a 09 7b 0d 0a 09 09  data() )...{....
0990: 52 65 6c 65 61 73 65 44 61 74 61 28 29 3b 0d 0a  ReleaseData();..
09a0: 09 09 53 65 74 44 61 74 61 28 20 6f 62 6a 2e 64  ..SetData( obj.d
09b0: 61 74 61 28 29 20 29 3b 0d 0a 09 7d 0d 0a 09 72  ata() );...}...r
09c0: 65 74 75 72 6e 20 2a 74 68 69 73 3b 0d 0a 7d 0d  eturn *this;..}.
09d0: 0a 0d 0a 23 69 66 64 65 66 20 5f 55 4e 49 43 4f  ...#ifdef _UNICO
09e0: 44 45 0d 0a 53 74 72 69 6e 67 26 20 53 74 72 69  DE..String& Stri
09f0: 6e 67 3a 3a 6f 70 65 72 61 74 6f 72 20 3d 20 28  ng::operator = (
0a00: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 73 20 29   const char* s )
0a10: 0d 0a 7b 0d 0a 09 6c 6f 6e 67 20 6c 65 6e 20 3d  ..{...long len =
0a20: 20 3a 3a 4d 75 6c 74 69 42 79 74 65 54 6f 57 69   ::MultiByteToWi
0a30: 64 65 43 68 61 72 28 20 43 50 5f 41 43 50 2c 20  deChar( CP_ACP, 
0a40: 30 2c 20 73 2c 20 2d 31 2c 20 4e 55 4c 4c 2c 20  0, s, -1, NULL, 
0a50: 30 20 29 3b 0d 0a 09 3a 3a 4d 75 6c 74 69 42 79  0 );...::MultiBy
0a60: 74 65 54 6f 57 69 64 65 43 68 61 72 28 20 43 50  teToWideChar( CP
0a70: 5f 41 43 50 2c 20 30 2c 20 73 2c 20 2d 31 2c 20  _ACP, 0, s, -1, 
0a80: 41 6c 6c 6f 63 4d 65 6d 28 6c 65 6e 2b 31 29 2c  AllocMem(len+1),
0a90: 20 6c 65 6e 2b 31 20 29 3b 0d 0a 23 65 6c 73 65   len+1 );..#else
0aa0: 0d 0a 53 74 72 69 6e 67 26 20 53 74 72 69 6e 67  ..String& String
0ab0: 3a 3a 6f 70 65 72 61 74 6f 72 20 3d 20 28 20 63  ::operator = ( c
0ac0: 6f 6e 73 74 20 77 63 68 61 72 5f 74 2a 20 73 20  onst wchar_t* s 
0ad0: 29 0d 0a 7b 0d 0a 09 6c 6f 6e 67 20 6c 65 6e 20  )..{...long len 
0ae0: 3d 20 3a 3a 57 69 64 65 43 68 61 72 54 6f 4d 75  = ::WideCharToMu
0af0: 6c 74 69 42 79 74 65 28 43 50 5f 41 43 50 2c 30  ltiByte(CP_ACP,0
0b00: 2c 73 2c 2d 31 2c 4e 55 4c 4c 2c 30 2c 4e 55 4c  ,s,-1,NULL,0,NUL
0b10: 4c 2c 4e 55 4c 4c 29 3b 0d 0a 09 3a 3a 57 69 64  L,NULL);...::Wid
0b20: 65 43 68 61 72 54 6f 4d 75 6c 74 69 42 79 74 65  eCharToMultiByte
0b30: 28 43 50 5f 41 43 50 2c 30 2c 73 2c 2d 31 2c 41  (CP_ACP,0,s,-1,A
0b40: 6c 6c 6f 63 4d 65 6d 28 6c 65 6e 2b 31 29 2c 6c  llocMem(len+1),l
0b50: 65 6e 2b 31 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b  en+1,NULL,NULL);
0b60: 0d 0a 23 65 6e 64 69 66 0d 0a 09 55 6e 6c 6f 63  ..#endif...Unloc
0b70: 6b 4d 65 6d 28 20 6c 65 6e 20 29 3b 0d 0a 09 72  kMem( len );...r
0b80: 65 74 75 72 6e 20 2a 74 68 69 73 3b 0d 0a 7d 0d  eturn *this;..}.
0b90: 0a 0d 0a 53 74 72 69 6e 67 26 20 53 74 72 69 6e  ...String& Strin
0ba0: 67 3a 3a 4c 6f 61 64 28 20 55 49 4e 54 20 72 73  g::Load( UINT rs
0bb0: 72 63 49 44 20 29 0d 0a 7b 0d 0a 09 63 6f 6e 73  rcID )..{...cons
0bc0: 74 20 69 6e 74 20 73 74 65 70 3d 32 35 36 3b 0d  t int step=256;.
0bd0: 0a 0d 0a 09 2f 2f 20 32 35 36 83 6f 83 43 83 67  ....// 256.o.C.g
0be0: 82 cc 8c c5 92 e8 92 b7 83 6f 83 62 83 74 83 40  .........o.b.t.@
0bf0: 82 d6 82 dc 82 b8 93 c7 82 f1 82 c5 82 dd 82 e9  ................
0c00: 0d 0a 09 54 43 48 41 52 20 74 6d 70 5b 73 74 65  ...TCHAR tmp[ste
0c10: 70 5d 2c 20 2a 62 75 66 3b 0d 0a 09 69 6e 74 20  p], *buf;...int 
0c20: 72 65 64 20 3d 20 61 70 70 28 29 2e 4c 6f 61 64  red = app().Load
0c30: 53 74 72 69 6e 67 28 20 72 73 72 63 49 44 2c 20  String( rsrcID, 
0c40: 74 6d 70 2c 20 63 6f 75 6e 74 6f 66 28 74 6d 70  tmp, countof(tmp
0c50: 29 20 29 3b 0d 0a 09 69 66 28 20 63 6f 75 6e 74  ) );...if( count
0c60: 6f 66 28 74 6d 70 29 20 2d 20 72 65 64 20 3e 20  of(tmp) - red > 
0c70: 32 20 29 0d 0a 09 09 72 65 74 75 72 6e 20 28 2a  2 )....return (*
0c80: 74 68 69 73 20 3d 20 74 6d 70 29 3b 0d 0a 0d 0a  this = tmp);....
0c90: 09 2f 2f 20 8f ad 82 b5 82 b8 82 c2 91 9d 82 e2  .// ............
0ca0: 82 b5 82 c4 91 ce 89 9e 82 b5 82 c4 82 dd 82 e9  ................
0cb0: 0d 0a 09 69 6e 74 20 73 69 7a 20 3d 20 73 74 65  ...int siz = ste
0cc0: 70 3b 0d 0a 09 64 6f 0d 0a 09 7b 0d 0a 09 09 73  p;...do...{....s
0cd0: 69 7a 2b 3d 20 73 74 65 70 3b 0d 0a 09 09 62 75  iz+= step;....bu
0ce0: 66 20 3d 20 41 6c 6c 6f 63 4d 65 6d 28 20 73 69  f = AllocMem( si
0cf0: 7a 20 29 3b 0d 0a 09 09 72 65 64 20 3d 20 61 70  z );....red = ap
0d00: 70 28 29 2e 4c 6f 61 64 53 74 72 69 6e 67 28 20  p().LoadString( 
0d10: 72 73 72 63 49 44 2c 20 62 75 66 2c 20 73 69 7a  rsrcID, buf, siz
0d20: 20 29 3b 0d 0a 09 7d 20 77 68 69 6c 65 28 20 73   );...} while( s
0d30: 69 7a 20 2d 20 72 65 64 20 3c 3d 20 32 20 29 3b  iz - red <= 2 );
0d40: 0d 0a 0d 0a 09 62 75 66 5b 72 65 64 5d 20 3d 20  .....buf[red] = 
0d50: 54 45 58 54 28 27 5c 30 27 29 3b 0d 0a 09 55 6e  TEXT('\0');...Un
0d60: 6c 6f 63 6b 4d 65 6d 28 20 72 65 64 20 29 3b 0d  lockMem( red );.
0d70: 0a 09 72 65 74 75 72 6e 20 2a 74 68 69 73 3b 0d  ..return *this;.
0d80: 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 53 74 72 69 6e  .}....void Strin
0d90: 67 3a 3a 54 72 69 6d 52 69 67 68 74 28 20 75 6c  g::TrimRight( ul
0da0: 6f 6e 67 20 73 69 7a 20 29 0d 0a 7b 0d 0a 09 69  ong siz )..{...i
0db0: 66 28 20 73 69 7a 20 3e 3d 20 6c 65 6e 28 29 20  f( siz >= len() 
0dc0: 29 0d 0a 09 7b 0d 0a 09 09 52 65 6c 65 61 73 65  )...{....Release
0dd0: 44 61 74 61 28 29 3b 0d 0a 09 09 53 65 74 44 61  Data();....SetDa
0de0: 74 61 28 20 6e 75 6c 6c 28 29 20 29 3b 0d 0a 09  ta( null() );...
0df0: 7d 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a 09 09  }...else...{....
0e00: 2f 2f 20 95 b6 8e 9a 97 f1 83 6f 83 62 83 74 83  // .......o.b.t.
0e10: 40 82 cc 8e 51 8f c6 83 4a 83 45 83 93 83 67 82  @...Q...J.E...g.
0e20: f0 8a 6d 8e c0 82 c9 82 50 82 c9 82 b7 82 e9 0d  ..m.....P.......
0e30: 0a 09 09 52 65 61 6c 6c 6f 63 4d 65 6d 28 29 3b  ...ReallocMem();
0e40: 0d 0a 0d 0a 09 09 2f 2f 20 8e 77 92 e8 95 b6 8e  ......// .w.....
0e50: 9a 90 94 95 aa 8d ed 82 e9 0d 0a 09 09 64 61 74  .............dat
0e60: 61 5f 2d 3e 6c 65 6e 20 2d 3d 20 73 69 7a 3b 0d  a_->len -= siz;.
0e70: 0a 09 09 64 61 74 61 5f 2d 3e 62 75 66 28 29 5b  ...data_->buf()[
0e80: 64 61 74 61 5f 2d 3e 6c 65 6e 2d 31 5d 20 3d 20  data_->len-1] = 
0e90: 54 45 58 54 28 27 5c 30 27 29 3b 0d 0a 09 7d 0d  TEXT('\0');...}.
0ea0: 0a 7d 0d 0a 0d 0a 69 6e 74 20 53 74 72 69 6e 67  .}....int String
0eb0: 3a 3a 47 65 74 49 6e 74 28 20 63 6f 6e 73 74 20  ::GetInt( const 
0ec0: 54 43 48 41 52 2a 20 78 20 29 0d 0a 7b 0d 0a 09  TCHAR* x )..{...
0ed0: 69 6e 74 20 6e 3d 30 3b 0d 0a 09 62 6f 6f 6c 20  int n=0;...bool 
0ee0: 6d 69 6e 75 73 20 3d 20 28 2a 78 3d 3d 54 45 58  minus = (*x==TEX
0ef0: 54 28 27 2d 27 29 29 3b 0d 0a 09 66 6f 72 28 20  T('-'));...for( 
0f00: 63 6f 6e 73 74 20 54 43 48 41 52 2a 20 70 3d 28  const TCHAR* p=(
0f10: 6d 69 6e 75 73 3f 78 2b 31 3a 78 29 3b 20 2a 70  minus?x+1:x); *p
0f20: 21 3d 54 45 58 54 28 27 5c 30 27 29 3b 20 70 3d  !=TEXT('\0'); p=
0f30: 6e 65 78 74 28 70 29 20 29 0d 0a 09 7b 0d 0a 09  next(p) )...{...
0f40: 09 69 66 28 20 2a 70 3c 54 45 58 54 28 27 30 27  .if( *p<TEXT('0'
0f50: 29 20 7c 7c 20 54 45 58 54 28 27 39 27 29 3c 2a  ) || TEXT('9')<*
0f60: 70 20 29 0d 0a 09 09 09 72 65 74 75 72 6e 20 30  p ).....return 0
0f70: 3b 0d 0a 09 09 6e 20 3d 20 28 31 30 2a 6e 29 20  ;....n = (10*n) 
0f80: 2b 20 28 2a 70 2d 54 45 58 54 28 27 30 27 29 29  + (*p-TEXT('0'))
0f90: 3b 0d 0a 09 7d 0d 0a 09 72 65 74 75 72 6e 20 6d  ;...}...return m
0fa0: 69 6e 75 73 20 3f 20 2d 6e 20 3a 20 6e 3b 0d 0a  inus ? -n : n;..
0fb0: 7d 0d 0a 0d 0a 53 74 72 69 6e 67 26 20 53 74 72  }....String& Str
0fc0: 69 6e 67 3a 3a 53 65 74 49 6e 74 28 20 69 6e 74  ing::SetInt( int
0fd0: 20 6e 20 29 0d 0a 7b 0d 0a 09 69 66 28 20 6e 3d   n )..{...if( n=
0fe0: 3d 30 20 29 0d 0a 09 7b 0d 0a 09 09 2a 74 68 69  =0 )...{....*thi
0ff0: 73 20 3d 20 54 45 58 54 28 22 30 22 29 3b 0d 0a  s = TEXT("0");..
1000: 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a 09  .}...else...{...
1010: 09 62 6f 6f 6c 20 6d 69 6e 75 73 20 3d 20 28 6e  .bool minus = (n
1020: 3c 30 29 3b 0d 0a 09 09 69 66 28 20 6d 69 6e 75  <0);....if( minu
1030: 73 20 29 0d 0a 09 09 09 6e 3d 20 2d 6e 3b 0d 0a  s ).....n= -n;..
1040: 0d 0a 09 09 54 43 48 41 52 20 74 6d 70 5b 32 30  ....TCHAR tmp[20
1050: 5d 3b 0d 0a 09 09 74 6d 70 5b 31 39 5d 20 3d 20  ];....tmp[19] = 
1060: 54 45 58 54 28 27 5c 30 27 29 3b 0d 0a 09 09 69  TEXT('\0');....i
1070: 6e 74 20 69 3b 0d 0a 0d 0a 09 09 66 6f 72 28 20  nt i;......for( 
1080: 69 3d 31 38 3b 20 69 3e 3d 30 3b 20 2d 2d 69 20  i=18; i>=0; --i 
1090: 29 0d 0a 09 09 7b 0d 0a 09 09 09 74 6d 70 5b 69  )....{.....tmp[i
10a0: 5d 20 3d 20 54 45 58 54 28 27 30 27 29 20 2b 20  ] = TEXT('0') + 
10b0: 6e 25 31 30 3b 0d 0a 09 09 09 6e 20 2f 3d 20 31  n%10;.....n /= 1
10c0: 30 3b 0d 0a 09 09 09 69 66 28 20 6e 3d 3d 30 20  0;.....if( n==0 
10d0: 29 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09  )......break;...
10e0: 09 7d 0d 0a 0d 0a 09 09 69 66 28 20 6d 69 6e 75  .}......if( minu
10f0: 73 20 29 0d 0a 09 09 09 74 6d 70 5b 2d 2d 69 5d  s ).....tmp[--i]
1100: 20 3d 20 54 45 58 54 28 27 2d 27 29 3b 0d 0a 0d   = TEXT('-');...
1110: 0a 09 09 2a 74 68 69 73 20 3d 20 74 6d 70 2b 69  ...*this = tmp+i
1120: 3b 0d 0a 09 7d 0d 0a 09 72 65 74 75 72 6e 20 2a  ;...}...return *
1130: 74 68 69 73 3b 0d 0a 7d 0d 0a 0d 0a 63 6f 6e 73  this;..}....cons
1140: 74 20 77 63 68 61 72 5f 74 2a 20 53 74 72 69 6e  t wchar_t* Strin
1150: 67 3a 3a 43 6f 6e 76 54 6f 57 43 68 61 72 28 29  g::ConvToWChar()
1160: 20 63 6f 6e 73 74 0d 0a 7b 0d 0a 23 69 66 64 65   const..{..#ifde
1170: 66 20 5f 55 4e 49 43 4f 44 45 0d 0a 09 72 65 74  f _UNICODE...ret
1180: 75 72 6e 20 63 5f 73 74 72 28 29 3b 0d 0a 23 65  urn c_str();..#e
1190: 6c 73 65 0d 0a 09 69 6e 74 20 6c 6e 20 3d 20 3a  lse...int ln = :
11a0: 3a 4d 75 6c 74 69 42 79 74 65 54 6f 57 69 64 65  :MultiByteToWide
11b0: 43 68 61 72 28 20 43 50 5f 41 43 50 2c 20 20 30  Char( CP_ACP,  0
11c0: 2c 20 63 5f 73 74 72 28 29 2c 20 2d 31 20 2c 20  , c_str(), -1 , 
11d0: 30 2c 20 30 20 29 3b 0d 0a 09 77 63 68 61 72 5f  0, 0 );...wchar_
11e0: 74 2a 20 70 20 3d 20 6e 65 77 20 77 63 68 61 72  t* p = new wchar
11f0: 5f 74 5b 6c 6e 2b 31 5d 3b 0d 0a 09 3a 3a 4d 75  _t[ln+1];...::Mu
1200: 6c 74 69 42 79 74 65 54 6f 57 69 64 65 43 68 61  ltiByteToWideCha
1210: 72 28 20 43 50 5f 41 43 50 2c 20 20 30 2c 20 63  r( CP_ACP,  0, c
1220: 5f 73 74 72 28 29 2c 20 2d 31 20 2c 20 70 2c 20  _str(), -1 , p, 
1230: 6c 6e 2b 31 20 29 3b 0d 0a 09 72 65 74 75 72 6e  ln+1 );...return
1240: 20 70 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a   p;..#endif..}..
1250: 0d 0a                                            ..