// 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_