//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1992. // // File: pidremap.hxx // // Contents: Maps Fake pids <--> Real Pids. // // History: 21-Jan-93 KyleP Created // 03-Jan-97 SrikantS Split from pidmap.hxx // //-------------------------------------------------------------------------- #pragma once #include #include //+------------------------------------------------------------------------- // // Class: CPidRemapper // // Purpose: Maps 'fake' pid --> 'real' pid // // History: 12-Feb-93 KyleP Created // //-------------------------------------------------------------------------- class CPidRemapper : INHERIT_UNWIND, public ICiQueryPropertyMapper { INLINE_UNWIND(CPidRemapper) public: // // From IUnknown // virtual SCODE STDMETHODCALLTYPE QueryInterface( REFIID riid, void **ppvObject ); virtual ULONG STDMETHODCALLTYPE AddRef(); virtual ULONG STDMETHODCALLTYPE Release(); // // From ICiQueryPropertyMapper // virtual SCODE STDMETHODCALLTYPE PropertyToPropid( FULLPROPSPEC const *pFullPropSpec, PROPID *pPropId); virtual SCODE STDMETHODCALLTYPE PropidToProperty( PROPID pid, FULLPROPSPEC const **ppPropSpec); // // Local methods // CPidRemapper( const CPidMapper & pidmap, XInterface & xPropMapper, CRestriction * prst = 0, CColumnSet * pcol = 0, CSortSet * pso = 0 ); CPidRemapper( XInterface & xPropMapper ); ~CPidRemapper(); CFullPropSpec const * RealToName( PROPID pid ) const; inline PROPID NameToReal( DBID const * Property ); PROPID NameToReal( CFullPropSpec const * Property ); void RemapPropid( CRestriction * prst ); void RemapPropid( CColumnSet * pcol ); void RemapPropid( CSortSet * pso ); inline PROPID FakeToReal( PROPID pid ) const; inline unsigned Count( ) const; void ReBuild( const CPidMapper & pidMap ); void Set( XArray & aPids ); BOOL AnyStatProps() const { return _fAnyStatProps; } BOOL ContainsContentProp() const { return _fContentProp; } BOOL ContainsRankVectorProp() const { return _fRankVectorProp; } # ifdef CIEXTMODE void CiExtDump(void *ciExtSelf) const; # endif protected: BOOL _fAnyStatProps; BOOL _fContentProp; BOOL _fRankVectorProp; XInterface _xPropMapper; XArray _xaPidReal; unsigned _cpidReal; CPropNameArray _propNames; ULONG _cRefs; // Refcount }; DECLARE_SMARTP( PidRemapper ); inline PROPID CPidRemapper::NameToReal( DBID const * Property ) { return( NameToReal( (CFullPropSpec const *)Property ) ); } //+------------------------------------------------------------------------- //-------------------------------------------------------------------------- inline PROPID CPidRemapper::FakeToReal( PROPID pid ) const { if ( pid < _cpidReal ) return( _xaPidReal[pid] ); else return( pidInvalid ); } //+------------------------------------------------------------------------- //-------------------------------------------------------------------------- inline unsigned CPidRemapper::Count( ) const { return _cpidReal; }