windows-nt/Source/XPSP1/NT/shell/ext/mlang/mlswalk.h
2020-09-26 16:20:57 +08:00

64 lines
1.5 KiB
C++

// MLSWalk.h : Declaration of the CMLStrWalkW and CMLStrWalkA
#ifndef __MLSWALK_H_
#define __MLSWALK_H_
/////////////////////////////////////////////////////////////////////////////
// CMLStrWalkW
class CMLStrWalkW
{
public:
inline CMLStrWalkW(IMLangStringWStr* pMLStrW, long lPos, long lLen, long lFlags = MLSTR_READ, BOOL fCanStopAtMiddle = FALSE);
BOOL Lock(HRESULT& rhr);
void Unlock(HRESULT& rhr, long lActualLen = 0);
inline WCHAR* GetStr(void);
inline long GetCCh(void) const;
long GetPos(void) const {return m_lPos + m_lDoneLen;}
long GetLen(void) const {return m_lLen - m_lDoneLen;}
long GetDoneLen(void) const {return m_lDoneLen;}
protected:
IMLangStringWStr* m_pMLStr;
BOOL m_fCanStopAtMiddle;
long m_lPos;
long m_lLen;
long m_lFlags;
long m_lDoneLen;
WCHAR* m_pszBuf;
long m_cchBuf;
long m_lLockLen;
};
/////////////////////////////////////////////////////////////////////////////
// CMLStrWalkW inline functions
CMLStrWalkW::CMLStrWalkW(IMLangStringWStr* pMLStr, long lPos, long lLen, long lFlags, BOOL fCanStopAtMiddle) :
m_pMLStr(pMLStr),
m_fCanStopAtMiddle(fCanStopAtMiddle)
{
m_lPos = lPos;
m_lLen = lLen;
m_lFlags = lFlags;
m_lDoneLen = 0;
m_pszBuf = NULL; // Mark as it's not locked
}
WCHAR* CMLStrWalkW::GetStr(void)
{
ASSERT(m_pszBuf); // Not locked
return m_pszBuf;
}
long CMLStrWalkW::GetCCh(void) const
{
ASSERT(m_pszBuf); // Not locked
if (m_pszBuf)
return m_cchBuf;
else
return 0;
}
#endif //__MLSWALK_H_