// SYSSRT.H: Definition of CITSysSort sort object implementation. #ifndef __SYSSRT_H__ #define __SYSSRT_H__ #include "verinfo.h" #define VERSION_SYSSORT (MAKELONG(MAKEWORD(0, rapFile), MAKEWORD(rmmFile, rmjFile))) // Sort control structure that contains all the information that can // vary how keys are compared. typedef struct _srtctl { DWORD dwCodePageID; LCID lcid; DWORD dwKeyType; DWORD grfSortFlags; } SRTCTL; class CITSysSort : public IITSortKey, public IITSortKeyConfig, public IPersistStreamInit, public CComObjectRootEx, public CComCoClass { public: CITSysSort(); virtual ~CITSysSort(); BEGIN_COM_MAP(CITSysSort) COM_INTERFACE_ENTRY(IITSortKey) COM_INTERFACE_ENTRY(IITSortKeyConfig) COM_INTERFACE_ENTRY(IPersistStreamInit) END_COM_MAP() DECLARE_REGISTRY(CLSID_ITSysSort, "ITIR.SystemSort.4", "ITIR.SystemSort", 0, THREADFLAGS_BOTH ) // IITSortKey methods STDMETHOD(GetSize)(LPCVOID lpcvKey, DWORD *pcbSize); STDMETHOD(Compare)(LPCVOID lpcvKey1, LPCVOID lpcvKey2, LONG *plResult, DWORD *pgrfReason); STDMETHOD(IsRelated)(LPCVOID lpcvKey1, LPCVOID lpcvKey2, DWORD dwKeyRelation, DWORD *pgrfReason); STDMETHOD(Convert)(DWORD dwKeyTypeIn, LPCVOID lpcvKeyIn, DWORD dwKeyTypeOut, LPVOID lpvKeyOut, DWORD *pcbSizeOut); STDMETHOD(ResolveDuplicates)(LPCVOID lpcvKey1, LPCVOID lpcvKey2, LPCVOID lpvKeyOut, DWORD *pcbSizeOut); // IITSortKeyConfig methods STDMETHOD(SetLocaleInfo)(DWORD dwCodePageID, LCID lcid); STDMETHOD(GetLocaleInfo)(DWORD *pdwCodePageID, LCID *plcid); STDMETHOD(SetKeyType)(DWORD dwKeyType); STDMETHOD(GetKeyType)(DWORD *pdwKeyType); STDMETHOD(SetControlInfo)(DWORD grfSortFlags, DWORD dwReserved); STDMETHOD(GetControlInfo)(DWORD *pgrfSortFlags, DWORD *pdwReserved); STDMETHOD(LoadExternalSortData)(IStream *pStream, DWORD dwExtDataType); // IPersistStreamInit methods STDMETHOD(GetClassID)(CLSID *pclsid); STDMETHOD(IsDirty)(void); STDMETHOD(Load)(IStream *pStream); STDMETHOD(Save)(IStream *pStream, BOOL fClearDirty); STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSizeMax); STDMETHOD(InitNew)(void); private: // Private methods void Close(void); HRESULT ReallocBuffer(HGLOBAL *phmemBuf, DWORD *cbBufCur, DWORD cbBufNew); HRESULT CompareSz(LPCVOID lpvSz1, LONG cch1, LPCVOID lpvSz2, LONG cch2, LONG *plResult, BOOL fUnicode); // Private data members BOOL m_fInitialized; BOOL m_fDirty; BOOL m_fWinNT; SRTCTL m_srtctl; HGLOBAL m_hmemAnsi1, m_hmemAnsi2; DWORD m_cbBufAnsi1Cur, m_cbBufAnsi2Cur; _ThreadModel::AutoCriticalSection m_cs; // Critical section obj. }; // Initial size of Ansi string buffers. #define cbAnsiBufInit 256 #endif // __SYSSRT_H__