// GROUPIMP.H: Definition of CITGroupLocal #ifndef __GROUPIMP_H__ #define __GROUPIMP_H__ #include "verinfo.h" class CITGroupLocal : public IITGroup, public CComObjectRootEx, public CComCoClass { public: ~CITGroupLocal(); CITGroupLocal() : m_lpGroup(NULL) {} // constructor--initialize member // variable to NULL BEGIN_COM_MAP(CITGroupLocal) COM_INTERFACE_ENTRY(IITGroup) END_COM_MAP() DECLARE_REGISTRY(CLSID_IITGroupLocal, "ITIR.LocalGroup.4", "ITIR.LocalGroup", 0, THREADFLAGS_BOTH) // ITGroup methods (member functions) go here. CITGroupLocal inherits // these methods from the pure, virtual functions of IITGroup. public: STDMETHOD(Initiate)(DWORD lcGrpItem); STDMETHOD(CreateFromBitVector)(LPBYTE lpBits, DWORD dwSize, DWORD dwItems); STDMETHOD(CreateFromBuffer)(HANDLE h); STDMETHOD(Open)(IITDatabase* lpITDB, LPCWSTR lpszMoniker); STDMETHOD(Free)(void); STDMETHOD(CopyOutBitVector)(IITGroup* pIITGroup); STDMETHOD(AddItem)(DWORD dwGrpItem); STDMETHOD(RemoveItem)(DWORD dwGrpItem); STDMETHOD(FindTopicNum)(DWORD dwCount, LPDWORD lpdwOutputTopicNum); STDMETHOD(FindOffset)(DWORD dwTopicNum, LPDWORD lpdwOutputOffset); STDMETHOD(GetSize)(LPDWORD lpdwGrpSize); STDMETHOD(Trim)(void); STDMETHOD(And)(IITGroup* pIITGroup); STDMETHOD(And)(IITGroup* pIITGroupIn, IITGroup* pIITGroupOut); STDMETHOD(Or)(IITGroup* pIITGroup); STDMETHOD(Or)(IITGroup* pIITGroupIn, IITGroup* pIITGroupOut); STDMETHOD(Not)(void); STDMETHOD(Not)(IITGroup* pIITGroupOut); STDMETHOD(IsBitSet)(DWORD dwTopicNum); STDMETHOD(CountBitsOn)(LPDWORD lpdwTotalNumBitsOn); STDMETHOD(Clear)(void); STDMETHOD_(LPVOID, GetLocalImageOfGroup)(void); STDMETHOD(PutRemoteImageOfGroup)(LPVOID lpGroupIn); // private data members private: _LPGROUP m_lpGroup; }; class CITGroupArrayLocal : public IITGroupArray, public CComObjectRootEx, public CComCoClass { public: CITGroupArrayLocal(): m_pGroup(NULL), m_fDirty(TRUE), m_iDefaultOp(ITGP_OPERATOR_OR), // note that OR is the default operator m_iEntryMax(0), m_rgfEntries(0L){}; // constructor--initialize member ~CITGroupArrayLocal(); // variable to NULL BEGIN_COM_MAP(CITGroupArrayLocal) COM_INTERFACE_ENTRY(IITGroup) COM_INTERFACE_ENTRY(IITGroupArray) END_COM_MAP() DECLARE_REGISTRY(CLSID_IITGroupArrayLocal, "ITIR.LocalGroupArray.4", "ITIR.LocalGroupArray", 0, THREADFLAGS_BOTH) // ITGroup methods (member functions) go here. CITGroupLocal inherits // these methods from the pure, virtual functions of IITGroup. public: // UNDONE: Currently most IITGroup interfaces are not supported. We have only // put in enough support for xBookshelf. STDMETHOD(Initiate)(DWORD lcGrpItem) {return E_NOTIMPL;}; STDMETHOD(CreateFromBitVector)(LPBYTE lpBits, DWORD dwSize, DWORD dwItems) {return E_NOTIMPL;}; STDMETHOD(CreateFromBuffer)(HANDLE h) {return E_NOTIMPL;}; STDMETHOD(Open)(IITDatabase* lpITDB, LPCWSTR lpszMoniker) {return E_NOTIMPL;}; STDMETHOD(Free)(void) {return E_NOTIMPL;} STDMETHOD(CopyOutBitVector)(IITGroup* pIITGroup) {return E_NOTIMPL;} STDMETHOD(AddItem)(DWORD dwGrpItem){return E_NOTIMPL;} STDMETHOD(RemoveItem)(DWORD dwGrpItem){return E_NOTIMPL;} STDMETHOD(FindTopicNum)(DWORD dwCount, LPDWORD lpdwOutputTopicNum){return E_NOTIMPL;} STDMETHOD(FindOffset)(DWORD dwTopicNum, LPDWORD lpdwOutputOffset){return E_NOTIMPL;} STDMETHOD(GetSize)(LPDWORD lpdwGrpSize){return E_NOTIMPL;} STDMETHOD(Trim)(void){return E_NOTIMPL;} STDMETHOD(And)(IITGroup* pIITGroup){return E_NOTIMPL;} STDMETHOD(And)(IITGroup* pIITGroupIn, IITGroup* pIITGroupOut){return E_NOTIMPL;} STDMETHOD(Or)(IITGroup* pIITGroup){return E_NOTIMPL;} STDMETHOD(Or)(IITGroup* pIITGroupIn, IITGroup* pIITGroupOut){return E_NOTIMPL;} STDMETHOD(Not)(void){return E_NOTIMPL;} STDMETHOD(Not)(IITGroup* pIITGroupOut){return E_NOTIMPL;} STDMETHOD(IsBitSet)(DWORD dwTopicNum){return E_NOTIMPL;} STDMETHOD(CountBitsOn)(LPDWORD lpdwTotalNumBitsOn){return E_NOTIMPL;} STDMETHOD(PutRemoteImageOfGroup)(LPVOID lpGroupIn){return E_NOTIMPL;} // UNDONE: The following are the only IITGroup methods currently supported. Sort of lame, but // it is all the local code currently requires and time doesn't permit fully expanding this STDMETHOD_(LPVOID, GetLocalImageOfGroup)(void); STDMETHOD(Clear)(void) {return ClearEntry(ITGP_ALL_ENTRIES);} public: // ITGroupArray methods go here STDMETHOD(InitEntry)(IITDatabase *piitDB, LPCWSTR lpwszName, LONG& lEntryNum); STDMETHOD(InitEntry)(IITGroup *piitGroup, LONG& lEntryNum); STDMETHOD(SetEntry)(LONG lEntryNum); STDMETHOD(ClearEntry)(LONG lEntryNum); STDMETHOD(SetDefaultOp)(LONG iDefaultOp); STDMETHOD(ToString)(LPWSTR *ppwBuffer); // private data members private: LONG m_fDirty; LONG m_iEntryMax; LONG m_rgfEntries; // 32-bit flag LONG m_iDefaultOp; IITGroup* m_rgpGroup[ITGP_MAX_GROUPARRAY_ENTRIES]; IITGroup* m_pGroup; // the composed group }; #endif // __GROUPIMP_H__