mirror of
https://github.com/reactos/reactos.git
synced 2024-10-04 00:13:57 +00:00
[ATL]
Add skeleton support for CAtlStringW svn path=/trunk/; revision=67579
This commit is contained in:
parent
df3b279994
commit
41044145e2
126
reactos/lib/atl/atlsimpstr.h
Normal file
126
reactos/lib/atl/atlsimpstr.h
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
#ifndef __ATLSIMPSTR_H__
|
||||||
|
#define __ATLSIMPSTR_H__
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <atlcore.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ATL
|
||||||
|
{
|
||||||
|
struct CStringData;
|
||||||
|
|
||||||
|
__interface IAtlStringMgr
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
_Ret_maybenull_ _Post_writable_byte_size_(sizeof(CStringData) + nAllocLength*nCharSize)
|
||||||
|
CStringData* Allocate(
|
||||||
|
_In_ int nAllocLength,
|
||||||
|
_In_ int nCharSize) throw();
|
||||||
|
|
||||||
|
void Free(_Inout_ CStringData* pData) throw();
|
||||||
|
|
||||||
|
virtual _Ret_maybenull_ _Post_writable_byte_size_(sizeof(CStringData) + nAllocLength*nCharSize)
|
||||||
|
CStringData* Reallocate(
|
||||||
|
_Inout_ CStringData* pData,
|
||||||
|
_In_ int nAllocLength,
|
||||||
|
_In_ int nCharSize) throw();
|
||||||
|
|
||||||
|
CStringData* GetNilString() throw();
|
||||||
|
|
||||||
|
IAtlStringMgr* Clone() throw();
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CStringData
|
||||||
|
{
|
||||||
|
IAtlStringMgr* pStringMgr;
|
||||||
|
int nDataLength;
|
||||||
|
int nAllocLength;
|
||||||
|
long nRefs;
|
||||||
|
|
||||||
|
void* data() throw()
|
||||||
|
{
|
||||||
|
return (this + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddRef() throw()
|
||||||
|
{
|
||||||
|
ATLASSERT(nRefs > 0);
|
||||||
|
_InterlockedIncrement(&nRefs);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Release() throw()
|
||||||
|
{
|
||||||
|
ATLASSERT(nRefs != 0);
|
||||||
|
|
||||||
|
if (_InterlockedDecrement(&nRefs) <= 0)
|
||||||
|
{
|
||||||
|
pStringMgr->Free(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template< typename BaseType = char >
|
||||||
|
class ChTraitsBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef char XCHAR;
|
||||||
|
typedef LPSTR PXSTR;
|
||||||
|
typedef LPCSTR PCXSTR;
|
||||||
|
typedef wchar_t YCHAR;
|
||||||
|
typedef LPWSTR PYSTR;
|
||||||
|
typedef LPCWSTR PCYSTR;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
class ChTraitsBase< wchar_t >
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef wchar_t XCHAR;
|
||||||
|
typedef LPWSTR PXSTR;
|
||||||
|
typedef LPCWSTR PCXSTR;
|
||||||
|
typedef char YCHAR;
|
||||||
|
typedef LPSTR PYSTR;
|
||||||
|
typedef LPCSTR PCYSTR;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template< typename BaseType, bool t_bMFCDLL = false>
|
||||||
|
class CSimpleStringT
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef typename ChTraitsBase<BaseType>::XCHAR XCHAR;
|
||||||
|
typedef typename ChTraitsBase<BaseType>::PXSTR PXSTR;
|
||||||
|
typedef typename ChTraitsBase<BaseType>::PCXSTR PCXSTR;
|
||||||
|
typedef typename ChTraitsBase<BaseType>::YCHAR YCHAR;
|
||||||
|
typedef typename ChTraitsBase<BaseType>::PYSTR PYSTR;
|
||||||
|
typedef typename ChTraitsBase<BaseType>::PCYSTR PCYSTR;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit CSimpleStringT(_Inout_ IAtlStringMgr* pStringMgr)
|
||||||
|
{
|
||||||
|
ATLENSURE(pStringMgr != NULL);
|
||||||
|
CStringData* pData = pStringMgr->GetNilString();
|
||||||
|
Attach(pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
CSimpleStringT(_In_ const CSimpleStringT& strSrc)
|
||||||
|
{
|
||||||
|
CStringData* pSrcData = strSrc.GetData();
|
||||||
|
CStringData* pNewData = CloneData(pSrcData);
|
||||||
|
Attach(pNewData);
|
||||||
|
}
|
||||||
|
|
||||||
|
CSimpleStringT(_In_ const CSimpleStringT<BaseType, !t_bMFCDLL>& strSrc)
|
||||||
|
{
|
||||||
|
CStringData* pSrcData = strSrc.GetData();
|
||||||
|
CStringData* pNewData = CloneData(pSrcData);
|
||||||
|
Attach(pNewData);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
55
reactos/lib/atl/atlstr.h
Normal file
55
reactos/lib/atl/atlstr.h
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#ifndef __ATLSTR_H__
|
||||||
|
#define __ATLSTR_H__
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#error ATL requires C++ compilation (use a .cpp suffix)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <atlbase.h>
|
||||||
|
#include <cstringt.h>
|
||||||
|
|
||||||
|
namespace ATL
|
||||||
|
{
|
||||||
|
template< typename _BaseType = char, class StringIterator = ChTraitsOS<_BaseType>>
|
||||||
|
class StrTraitATL :
|
||||||
|
public StringIterator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static HINSTANCE FindStringResourceInstance(_In_ UINT nID) throw()
|
||||||
|
{
|
||||||
|
return(AtlFindStringResourceInstance(nID));
|
||||||
|
}
|
||||||
|
|
||||||
|
static IAtlStringMgr* GetDefaultManager() throw()
|
||||||
|
{
|
||||||
|
return CAtlStringMgr::GetInstance();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template< typename _CharType = wchar_t>
|
||||||
|
class ChTraitsOS :
|
||||||
|
public ChTraitsBase<_CharType>
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifndef _ATL_CSTRING_NO_CRT
|
||||||
|
typedef CStringT<wchar_t, StrTraitATL<wchar_t, ChTraitsCRT<wchar_t>>> CAtlStringW;
|
||||||
|
#else
|
||||||
|
typedef CStringT<wchar_t, StrTraitATL<wchar_t>> CAtlStringW;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AFX
|
||||||
|
typedef CAtlStringW CStringW;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
} //namespace ATL
|
||||||
|
|
||||||
|
#endif
|
77
reactos/lib/atl/cstringt.h
Normal file
77
reactos/lib/atl/cstringt.h
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
#ifndef __CSTRINGT_H__
|
||||||
|
#define __CSTRINGT_H__
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <atlsimpstr.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace ATL
|
||||||
|
{
|
||||||
|
|
||||||
|
template< typename _CharType = wchar_t>
|
||||||
|
class ChTraitsCRT :
|
||||||
|
public ChTraitsBase<_CharType>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace _CSTRING_IMPL_
|
||||||
|
{
|
||||||
|
template <typename _CharType, class StringTraits>
|
||||||
|
struct _MFCDLLTraitsCheck
|
||||||
|
{
|
||||||
|
const static bool c_bIsMFCDLLTraits = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename BaseType, class StringTraits>
|
||||||
|
class CStringT :
|
||||||
|
public CSimpleStringT <BaseType, _CSTRING_IMPL_::_MFCDLLTraitsCheck<BaseType, StringTraits>::c_bIsMFCDLLTraits>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef CSimpleStringT<BaseType, _CSTRING_IMPL_::_MFCDLLTraitsCheck<BaseType, StringTraits>::c_bIsMFCDLLTraits> CThisSimpleString;
|
||||||
|
typedef StringTraits StrTraits;
|
||||||
|
typedef typename CThisSimpleString::XCHAR XCHAR;
|
||||||
|
typedef typename CThisSimpleString::PXSTR PXSTR;
|
||||||
|
typedef typename CThisSimpleString::PCXSTR PCXSTR;
|
||||||
|
typedef typename CThisSimpleString::YCHAR YCHAR;
|
||||||
|
typedef typename CThisSimpleString::PYSTR PYSTR;
|
||||||
|
typedef typename CThisSimpleString::PCYSTR PCYSTR;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CStringT() throw() :
|
||||||
|
CThisSimpleString(StringTraits::GetDefaultManager())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
explicit CStringT( _In_ IAtlStringMgr* pStringMgr) throw() :
|
||||||
|
CThisSimpleString(pStringMgr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CStringT(_In_ const VARIANT& varSrc);
|
||||||
|
CStringT(
|
||||||
|
_In_ const VARIANT& varSrc,
|
||||||
|
_In_ IAtlStringMgr* pStringMgr);
|
||||||
|
|
||||||
|
static void __cdecl Construct(_In_ CStringT* pString)
|
||||||
|
{
|
||||||
|
new(pString)CStringT;
|
||||||
|
}
|
||||||
|
|
||||||
|
CStringT(_In_ const CStringT& strSrc) :
|
||||||
|
CThisSimpleString(strSrc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} //namespace ATL
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue