Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

136 lines
3.6 KiB

//+-------------------------------------------------------------------------
//
// 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 <ciintf.h>
#include <pidmap.hxx>
//+-------------------------------------------------------------------------
//
// 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<IPropertyMapper> & xPropMapper,
CRestriction * prst = 0,
CColumnSet * pcol = 0,
CSortSet * pso = 0 );
CPidRemapper( XInterface<IPropertyMapper> & 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<PROPID> & 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<IPropertyMapper> _xPropMapper;
XArray<PROPID> _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;
}