11 class CAtlStringMgr
: public IAtlStringMgr
15 CNilStringData m_NilStrData
;
18 CAtlStringMgr(_In_opt_ IAtlMemMgr
* MemMgr
= NULL
):
21 m_NilStrData
.SetManager(this);
24 virtual ~CAtlStringMgr(void)
28 static IAtlStringMgr
* GetInstance(void)
30 static CWin32Heap
Win32Heap(::GetProcessHeap());
31 static CAtlStringMgr
StringMgr(&Win32Heap
);
35 virtual _Ret_maybenull_
_Post_writable_byte_size_(sizeof(CStringData
) + NumChars
* CharSize
) CStringData
* Allocate(
42 SizeBytes
= sizeof(CStringData
) + ((NumChars
+ 1) * CharSize
);
44 StrData
= static_cast<CStringData
*>(m_MemMgr
->Allocate(SizeBytes
));
45 if (StrData
== NULL
) return NULL
;
47 StrData
->pStringMgr
= this;
49 StrData
->nAllocLength
= NumChars
;
50 StrData
->nDataLength
= 0;
55 virtual void Free(_In_ CStringData
* StrData
)
57 ATLASSERT(StrData
->pStringMgr
== this);
58 m_MemMgr
->Free(StrData
);
61 virtual _Ret_maybenull_
_Post_writable_byte_size_(sizeof(CStringData
) + nChars
*nCharSize
) CStringData
* Reallocate(
62 _Inout_
_Post_readable_byte_size_(sizeof(CStringData
)) CStringData
* StrData
,
64 _In_
int nCharSize
) throw()
66 ATLASSERT(StrData
->pStringMgr
== this);
68 CStringData
* pNewData
;
73 nDataBytes
= nChars
* nCharSize
;
74 SizeBytes
= sizeof(CStringData
) + nDataBytes
;
76 pNewData
= static_cast<CStringData
*>(m_MemMgr
->Reallocate(StrData
, SizeBytes
));
77 if (pNewData
== NULL
) return NULL
;
79 pNewData
->nAllocLength
= nChars
- 1;
82 virtual CStringData
* GetNilString() throw()
84 m_NilStrData
.AddRef();
87 virtual IAtlStringMgr
* Clone() throw()
93 static bool StaticInitialize()
101 template< typename _CharType
= wchar_t >
103 public ChTraitsBase
< _CharType
>
109 template<typename _BaseType
= wchar_t, class StringIterator
= ChTraitsOS
<_BaseType
> >
111 public StringIterator
114 static HINSTANCE
FindStringResourceInstance(_In_ UINT nID
) throw()
116 return AtlFindStringResourceInstance(nID
);
119 static IAtlStringMgr
* GetDefaultManager() throw()
121 return CAtlStringMgr::GetInstance();
126 typedef CStringT
< wchar_t, StrTraitATL
< wchar_t, ChTraitsCRT
<wchar_t> > > CAtlStringW
;
127 typedef CStringT
< char, StrTraitATL
< char, ChTraitsCRT
<char> > > CAtlStringA
;
130 typedef CAtlStringW CStringW
;
131 typedef CAtlStringA CStringA
;
135 typedef CAtlStringW CAtlString
;
136 typedef CStringW CString
;
138 typedef CAtlStringA CAtlString
;
139 typedef CStringA CString
;