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 ..