#if !defined(_BCL_W32UNICODEFIXEDSTRINGBUFFER_H_INCLUDED_) #define _BCL_W32UNICODEFIXEDSTRINGBUFFER_H_INCLUDED_ #pragma once /*++ Copyright (c) 2000 Microsoft Corporation Module Name: bcl_w32unicodefixedstringbuffer.h Abstract: Author: Michael Grier (MGrier) 2/6/2002 Revision History: --*/ #include #include #include #include #include namespace BCL { template class CWin32BaseUnicodeFixedStringBuffer; template class CWin32BaseUnicodeFixedStringBufferTraits : public CWin32BaseUnicodeStringBufferTraits, CWin32CallDisposition, BOOL> { typedef CWin32BaseUnicodeFixedStringBufferTraits TThis; typedef CWin32BaseUnicodeFixedStringBuffer TBuffer; typedef void TAccessor; friend BCL::CPureString; friend BCL::CInlineString; friend BCL::CUnicodeCharTraits; friend CWin32BaseUnicodeStringBufferTraits, CWin32CallDisposition, BOOL>; typedef BCL::CInlineString TInlineString; typedef CWin32BaseUnicodeFixedStringBuffer TBuffer; static inline PWSTR __fastcall GetInlineBufferPtr(const BCL::CBaseString *p) { return static_cast(p)->GetInlineBufferPtr(); } static inline SIZE_T __fastcall GetInlineBufferCch(const BCL::CBaseString *p) { return nInlineChars; } static inline TConstantPair __fastcall InlineBufferPair(const BCL::CBaseString *p) { return TConstantPair(TThis::GetInlineBufferPtr(p), TThis::GetInlineBufferCch(p)); } static inline TMutablePair __fastcall InlineMutableBufferPair(const BCL::CBaseString *p) { return TMutablePair(TThis::GetInlineBufferPtr(p), TThis::GetInlineBufferCch(p)); } static inline CWin32CallDisposition RoundBufferSize(SIZE_T cch, SIZE_T &rcchGranted) { BCL_MAYFAIL_PROLOG BCL_PARAMETER_CHECK(cch > nInlineChars); rcchGranted = 0; return CWin32CallDisposition::BufferOverflow(); BCL_MAYFAIL_EPILOG_INTERNAL } // We never have a non-inline buffer, so these shouldn't ever get called. static inline CWin32CallDisposition __fastcall ReallocateBuffer(BCL::CBaseString *p, SIZE_T cch) { BCL_ASSERT(false); return CWin32CallDisposition::InternalError_RuntimeCheck(); } static inline void __fastcall DeallocateBuffer(PCWSTR psz) { BCL_ASSERT(false); } }; // class CWin32BaseUnicodeFixedStringBufferTraits template class CWin32BaseUnicodeFixedStringBuffer : private BCL::CInlineString >, private CWin32BaseUnicodeStringBufferAddIn { public: typedef CWin32BaseUnicodeFixedStringBuffer TThis; typedef CWin32BaseUnicodeFixedStringBufferTraits TTraits; inline CWin32BaseUnicodeFixedStringBuffer() : CWin32BaseUnicodeStringBufferAddIn(m_rgchInlineBuffer, nInlineChars) { } inline ~CWin32BaseUnicodeFixedStringBuffer() { } // no dynamic buffer; nothing to do. operator PCWSTR() const { return this->GetStringPtr(); } #include private: inline PWSTR GetInlineBufferPtr() const { return const_cast(m_rgchInlineBuffer); } WCHAR m_rgchInlineBuffer[nInlineChars]; // Plus one to make instantiation with nInlineChars=0 work friend CWin32BaseUnicodeStringBufferTraits; friend CWin32BaseUnicodeFixedStringBufferTraits; friend BCL::CUnicodeCharTraits; }; // class CWin32BaseUnicodeFixedStringBuffer }; // namespace BCL #endif // !defined(_BCL_W32UNICODEFIXEDSTRINGBUFFER_H_INCLUDED_)