windows-nt/Source/XPSP1/NT/public/sdk/inc/restrict.hxx
2020-09-26 16:20:57 +08:00

1584 lines
31 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992-1999.
//
// File: Restrict.hxx
//
// Contents: C++ wrapper(s) for restrictions.
//
// History: 31-Dec-93 KyleP Created
// 28-Jul-94 KyleP Hand marshalling
// 05-Apr-95 t-ColinB Added a SetValue to CPropertyRestriction
//
// Notes: These C++ wrappers are a bit of a hack. They are
// dependent on the layout of the matching C structures.
// Inheritance from C structures cannot be used directly
// because MIDL doesn't support C++ style inheritance,
// and these structures are defined along with their
// respective Ole interfaces in .idl files.
//
// No virtual methods (even virtual destructors) are
// allowed because they change the layout of the class
// in C++. Luckily, the class hierarchies below are
// quite flat. Virtual methods are simulated with
// switch statements in parent classes.
//
// In C, all structures must be allocated via CoTaskMemAlloc.
// This is the only common allocator for Ole.
//
//--------------------------------------------------------------------------
#if !defined( __RESTRICT_HXX__ )
#define __RESTRICT_HXX__
#if _MSC_VER > 1000
#pragma once
#endif
#include <query.h>
#include <stgvar.hxx>
//
// The OFFSETS_MATCH macro is used to verify structure offsets between
// C++ structures and their corresponding C structures. 0 Cannot be used
// as pointer because of special treatment of casts to 0 in C++
//
#define OFFSETS_MATCH( class1, field1, class2, field2 ) \
( (ULONG_PTR)&((class1 *)10)->field1 == \
(ULONG_PTR)&((class2 *)10)->field2 )
//
// Forward declarations
//
class CNodeRestriction;
class PSerStream;
class PDeSerStream;
//+-------------------------------------------------------------------------
//
// Class: CFullPropertySpec
//
// Purpose: Describes full (PropertySet\Property) name of a property.
//
// History: 08-Jan-93 KyleP Created
//
//--------------------------------------------------------------------------
class CFullPropSpec
{
public:
//
// Constructors
//
CFullPropSpec();
CFullPropSpec( GUID const & guidPropSet, PROPID pidProperty );
CFullPropSpec( GUID const & guidPropSet, WCHAR const * wcsProperty );
//
// Validity check
//
inline BOOL IsValid() const;
//
// Copy constructors/assignment/clone
//
CFullPropSpec( CFullPropSpec const & Property );
CFullPropSpec & operator=( CFullPropSpec const & Property );
//
// Destructor
//
~CFullPropSpec();
//
// Memory allocation
//
void * operator new( size_t size );
inline void * operator new( size_t size, void * p );
void operator delete( void * p );
#if _MSC_VER >= 1200
inline void operator delete( void * p, void * pp );
#endif
//
// C/C++ conversion
//
inline FULLPROPSPEC * CastToStruct();
inline FULLPROPSPEC const * CastToStruct() const;
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
CFullPropSpec( PDeSerStream & stm );
//
// Comparators
//
int operator==( CFullPropSpec const & prop ) const;
int operator!=( CFullPropSpec const & prop ) const;
//
// Member variable access
//
inline void SetPropSet( GUID const & guidPropSet );
inline GUID const & GetPropSet() const;
void SetProperty( PROPID pidProperty );
BOOL SetProperty( WCHAR const * wcsProperty );
inline WCHAR const * GetPropertyName() const;
inline PROPID GetPropertyPropid() const;
inline PROPSPEC GetPropSpec() const;
inline BOOL IsPropertyName() const;
inline BOOL IsPropertyPropid() const;
# ifdef CIEXTMODE
void CiExtDump(void *ciExtSelf);
# endif
private:
GUID _guidPropSet;
PROPSPEC _psProperty;
};
inline
int CFullPropSpec::operator==( CFullPropSpec const & prop ) const
{
if ( prop._psProperty.ulKind != _psProperty.ulKind )
return 0;
switch( _psProperty.ulKind )
{
case PRSPEC_PROPID:
if ( GetPropertyPropid() != prop.GetPropertyPropid() )
return 0;
break;
case PRSPEC_LPWSTR:
if ( _wcsicmp( GetPropertyName(), prop.GetPropertyName() ) != 0 )
return 0;
break;
default:
return 0;
}
return prop._guidPropSet == _guidPropSet;
}
inline
int CFullPropSpec::operator!=( CFullPropSpec const & prop ) const
{
if (*this == prop)
return( 0 );
else
return( 1 );
}
inline
CFullPropSpec::~CFullPropSpec()
{
if ( _psProperty.ulKind == PRSPEC_LPWSTR &&
_psProperty.lpwstr )
{
CoTaskMemFree( _psProperty.lpwstr );
}
}
//+-------------------------------------------------------------------------
//
// Member: CFullPropSpec::CFullPropSpec, public
//
// Synopsis: Construct name based propspec
//
// Arguments: [guidPropSet] -- Property set
// [wcsProperty] -- Property
//
// History: 22-Jun-93 KyleP Created
//
//--------------------------------------------------------------------------
inline
CFullPropSpec::CFullPropSpec( GUID const & guidPropSet,
WCHAR const * wcsProperty )
: _guidPropSet( guidPropSet )
{
_psProperty.ulKind = PRSPEC_PROPID;
SetProperty( wcsProperty );
}
//+-------------------------------------------------------------------------
//
// Member: CFullPropSpec::CFullPropSpec, public
//
// Synopsis: Construct propid based propspec
//
// Arguments: [guidPropSet] -- Property set
// [pidProperty] -- Property
//
// History: 22-Jun-93 KyleP Created
//
//--------------------------------------------------------------------------
inline
CFullPropSpec::CFullPropSpec( GUID const & guidPropSet, PROPID pidProperty )
: _guidPropSet( guidPropSet )
{
_psProperty.ulKind = PRSPEC_PROPID;
_psProperty.propid = pidProperty;
}
//+-------------------------------------------------------------------------
//
// Member: CFullPropSpec::CFullPropSpec, public
//
// Synopsis: Default constructor
//
// Effects: Defines property with null guid and propid 0
//
// History: 22-Jun-93 KyleP Created
//
//--------------------------------------------------------------------------
inline
CFullPropSpec::CFullPropSpec()
{
RtlZeroMemory( &_guidPropSet, sizeof(_guidPropSet) );
_psProperty.ulKind = PRSPEC_PROPID;
_psProperty.propid = 0;
}
//+-------------------------------------------------------------------------
//
// Member: CFullPropSpec::operator=, public
//
// Synopsis: Assignment operator
//
// Arguments: [Property] -- Source property
//
// History: 17-Jul-93 KyleP Created
//
//--------------------------------------------------------------------------
inline
CFullPropSpec & CFullPropSpec::operator=( CFullPropSpec const & Property )
{
//
// Clean up.
//
CFullPropSpec::~CFullPropSpec();
new (this) CFullPropSpec( Property );
return *this;
}
//+-------------------------------------------------------------------------
//
// Class: CColumns
//
// Purpose: C++ wrapper for COLUMNSET
//
// History: 22-Jun-93 KyleP Created
//
//--------------------------------------------------------------------------
class CColumns
{
public:
//
// Constructors
//
CColumns( unsigned size = 0 );
//
// Copy constructors/assignment/clone
//
CColumns( CColumns const & src );
CColumns & operator=( CColumns const & src );
//
// Destructor
//
~CColumns();
//
// Validity check
//
inline BOOL IsValid() const;
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
CColumns( PDeSerStream & stm );
//
// C/C++ conversion
//
inline COLUMNSET * CastToStruct();
//
// Member variable access
//
void Add( CFullPropSpec const & Property, unsigned pos );
void Remove( unsigned pos );
inline CFullPropSpec const & Get( unsigned pos ) const;
inline unsigned Count() const;
private:
unsigned _cCol;
CFullPropSpec * _aCol;
unsigned _size;
};
//+-------------------------------------------------------------------------
//
// Structure: SortKey
//
// Purpose: wraper for SORTKEY class
//
//--------------------------------------------------------------------------
class CSortKey
{
public:
//
// Constructors
//
inline CSortKey();
CSortKey( CFullPropSpec const & ps, ULONG dwOrder );
CSortKey( CFullPropSpec const & ps, ULONG dwOrder, LCID locale );
//
// Validity check
//
inline BOOL IsValid() const;
//
// Member variable access
//
inline void SetProperty( CFullPropSpec const & ps );
inline CFullPropSpec const & GetProperty() const;
inline ULONG GetOrder() const;
inline LCID GetLocale() const;
inline void SetLocale(LCID locale);
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
CSortKey( PDeSerStream & stm );
private:
CFullPropSpec _property;
ULONG _dwOrder;
LCID _locale;
};
//+-------------------------------------------------------------------------
//
// Class: CSort
//
// Purpose: C++ wrapper for SORTSET
//
// History: 22-Jun-93 KyleP Created
//
//--------------------------------------------------------------------------
class CSort
{
public:
//
// Constructors
//
CSort( unsigned size = 0 );
//
// Copy constructors/assignment/clone
//
CSort( CSort const & src );
CSort & operator=( CSort const & src );
//
// Destructor
//
~CSort();
//
// Validity check
//
inline BOOL IsValid() const;
//
// C/C++ conversion
//
inline SORTSET * CastToStruct();
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
CSort( PDeSerStream & stm );
//
// Member variable access
//
void Add( CSortKey const &sk, unsigned pos );
void Add( CFullPropSpec const & Property, ULONG dwOrder, unsigned pos );
void Remove( unsigned pos );
inline CSortKey const & Get( unsigned pos ) const;
inline unsigned Count() const;
private:
unsigned _csk;
CSortKey * _ask;
unsigned _size;
};
//+-------------------------------------------------------------------------
//
// Class: CRestriction
//
// Purpose: Base restriction class
//
// History: 31-Dec-93 KyleP Created
//
//--------------------------------------------------------------------------
class CRestriction
{
public:
//
// Constructors
//
inline CRestriction();
inline CRestriction( ULONG RestrictionType, LONG lWeight );
//
// Copy constructors/assigment/clone
//
CRestriction * Clone() const;
//
// Destructor
//
~CRestriction();
//
// Validity check
//
BOOL IsValid() const;
//
// C/C++ conversion
//
inline RESTRICTION * CastToStruct() const;
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
static CRestriction * UnMarshall( PDeSerStream & stm );
//
// Member variable access
//
inline ULONG Type() const;
inline LONG Weight() const;
inline void SetWeight( LONG lWeight );
inline CNodeRestriction * CastToNode() const;
BOOL IsLeaf() const;
ULONG TreeCount() const;
# ifdef CIEXTMODE
void CiExtDump(void *ciExtSelf);
# endif
protected:
inline void SetType( ULONG RestrictionType );
private:
ULONG _ulType;
LONG _lWeight;
};
//+-------------------------------------------------------------------------
//
// Class: CNodeRestriction
//
// Purpose: Boolean AND/OR/VECTOR restriction
//
// History: 31-Dec-93 KyleP Created
//
//--------------------------------------------------------------------------
class CNodeRestriction : public CRestriction
{
public:
//
// Constructors
//
CNodeRestriction( ULONG NodeType, unsigned cInitAllocated = 2 );
//
// Copy constructors/assignment/clone
//
CNodeRestriction( const CNodeRestriction& nodeRst );
CNodeRestriction * Clone() const;
//
// Destructor
//
~CNodeRestriction();
//
// Validity check
//
BOOL IsValid() const;
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
CNodeRestriction( ULONG ulType, LONG lWeight, PDeSerStream & stm );
//
// Node manipulation
//
void AddChild( CRestriction * presChild, unsigned & pos );
inline void AddChild( CRestriction * presChild );
CRestriction * RemoveChild( unsigned pos );
//
// Member variable access
//
inline void SetChild( CRestriction * presChild, unsigned pos );
inline CRestriction * GetChild( unsigned pos ) const;
inline unsigned Count() const;
# ifdef CIEXTMODE
void CiExtDump(void *ciExtSelf);
# endif
private:
void Grow();
protected:
ULONG _cNode;
CRestriction ** _paNode;
//
// Members mapped to C structure end here. The following will
// be reserved in the C structure to maintain to C <--> C++
// facade.
//
ULONG _cNodeAllocated;
};
//+-------------------------------------------------------------------------
//
// Class: CNotRestriction
//
// Purpose: Boolean AND/OR/VECTOR restriction
//
// History: 31-Dec-93 KyleP Created
//
//--------------------------------------------------------------------------
class CNotRestriction : public CRestriction
{
public:
//
// Constructors
//
inline CNotRestriction();
inline CNotRestriction( CRestriction * pres );
CNotRestriction( CNotRestriction const & notRst );
CNotRestriction *Clone() const;
//
// Destructor
//
~CNotRestriction();
//
// Validity check
//
inline BOOL IsValid() const;
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
CNotRestriction( LONG lWeight, PDeSerStream & stm );
//
// Node manipulation
//
inline void SetChild( CRestriction * pres );
inline CRestriction * GetChild() const;
inline CRestriction * RemoveChild();
BOOL HasChild() const { return 0 != _pres; }
# ifdef CIEXTMODE
void CiExtDump(void *ciExtSelf);
# endif
private:
CRestriction * _pres;
};
//+-------------------------------------------------------------------------
//
// Class: CVectorRestriction
//
// Purpose: Extended boolean (vector) restriction
//
// History: 08-Jan-93 KyleP Created
//
//--------------------------------------------------------------------------
class CVectorRestriction : public CNodeRestriction
{
public:
//
// Constructors
//
inline CVectorRestriction( ULONG ulRankMethod,
unsigned cInitAllocated = 128 );
//
// Copy constructors/assignment/clone
//
inline CVectorRestriction( CVectorRestriction const & vecRst );
CVectorRestriction * Clone() const;
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
CVectorRestriction( LONG lWeight, PDeSerStream & stm );
//
// Member variable access
//
inline void SetRankMethod( ULONG ulRankMethod );
inline ULONG RankMethod() const;
# ifdef CIEXTMODE
void CiExtDump(void *ciExtSelf);
# endif
private:
ULONG _ulRankMethod;
};
//+-------------------------------------------------------------------------
//
// Class: CContentRestriction
//
// Purpose: Scope restriction
//
// History: 07-Jan-93 KyleP Created
//
//--------------------------------------------------------------------------
class CContentRestriction : public CRestriction
{
public:
//
// Constructors
//
CContentRestriction( WCHAR const * pwcsPhrase,
CFullPropSpec const & Property,
ULONG ulGenerateMethod = 0,
LCID lcid = GetSystemDefaultLCID() );
CContentRestriction( CContentRestriction const & contentRst );
//
// Copy constructors/assignment/clone
//
CContentRestriction * Clone() const;
//
// Destructor
//
~CContentRestriction();
//
// Validity check
//
inline BOOL IsValid() const;
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
CContentRestriction( LONG lWeight, PDeSerStream & stm );
//
// Member variable access
//
void SetPhrase( WCHAR const * pwcsPhrase );
inline WCHAR const * GetPhrase() const;
inline void SetProperty( CFullPropSpec const & Property );
inline CFullPropSpec const & GetProperty() const;
LCID GetLocale() const { return _lcid; }
inline void SetGenerateMethod( ULONG ulGenerateMethod );
inline ULONG GenerateMethod() const;
# ifdef CIEXTMODE
void CiExtDump(void *ciExtSelf);
# endif
private:
CFullPropSpec _Property; // Property Name
WCHAR * _pwcsPhrase; // content
LCID _lcid;
ULONG _ulGenerateMethod; // Generate method.
};
//+-------------------------------------------------------------------------
//
// Class: CComplexContentRestriction
//
// Purpose: Supports scaffolding query language
//
// History: 08-Jan-93 KyleP Created
//
//--------------------------------------------------------------------------
class CComplexContentRestriction : public CRestriction
{
public:
//
// Constructors
//
CComplexContentRestriction( WCHAR * pwcsExpression,
LCID lcid = GetSystemDefaultLCID() );
CComplexContentRestriction( const CComplexContentRestriction& compRst );
//
// Copy constructors/assignment/clone
//
CComplexContentRestriction * Clone() const;
//
// Destructors
//
~CComplexContentRestriction();
//
// Validity check
//
BOOL IsValid() const;
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
CComplexContentRestriction( LONG lWeight, PDeSerStream & stm );
//
// Member variable access
//
void SetExpression( WCHAR * pwcsExpression );
inline WCHAR * GetExpression();
LCID GetLocale() const { return _lcid; }
# ifdef CIEXTMODE
void CiExtDump(void *ciExtSelf);
# endif
private:
WCHAR * _pwcsExpression;
LCID _lcid;
};
//+-------------------------------------------------------------------------
//
// Class: CNatLanguageRestriction
//
// Purpose: Supports natural language queries
//
// History: 18-Jan-95 SitaramR Created
//
//--------------------------------------------------------------------------
class CNatLanguageRestriction : public CRestriction
{
public:
//
// Constructors
//
CNatLanguageRestriction( WCHAR const * pwcsPhrase,
CFullPropSpec const & Property,
LCID lcid = GetSystemDefaultLCID() );
//
// Copy constructors/assignment/clone
//
CNatLanguageRestriction * Clone() const;
//
// Destructors
//
~CNatLanguageRestriction();
//
// Validity check
//
inline BOOL IsValid() const;
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
CNatLanguageRestriction( LONG lWeight, PDeSerStream & stm );
//
// Member variable access
//
void SetPhrase( WCHAR const * pwcsPhrase );
inline WCHAR const * GetPhrase() const;
inline void SetProperty( CFullPropSpec const & Property );
inline CFullPropSpec const & GetProperty() const;
LCID GetLocale() const { return _lcid; }
# ifdef CIEXTMODE
void CiExtDump(void *ciExtSelf);
# endif
private:
CFullPropSpec _Property; // Property Name
WCHAR * _pwcsPhrase; // content
LCID _lcid;
};
//+-------------------------------------------------------------------------
//
// Class: CPropertyRestriction
//
// Purpose: Property <relop> constant restriction
//
// History: 08-Jan-93 KyleP Created
// 08-Nov-93 DwightKr Added new SetValue() methods
//
//--------------------------------------------------------------------------
class CPropertyRestriction : public CRestriction
{
public:
//
// Constructors
//
CPropertyRestriction();
CPropertyRestriction( ULONG relop,
CFullPropSpec const & Property,
CStorageVariant const & prval );
//
// Copy constructors/assignment/clone
//
CPropertyRestriction * Clone() const;
//
// Destructors
//
~CPropertyRestriction();
//
// Validity check
//
inline BOOL IsValid() const;
//
// Serialization
//
void Marshall( PSerStream & stm ) const;
CPropertyRestriction( LONG lWeight, PDeSerStream & stm );
//
// Member variable access
//
inline void SetRelation( ULONG relop );
inline ULONG Relation();
inline void SetProperty( CFullPropSpec const & Property );
inline CFullPropSpec const & GetProperty() const;
inline void SetValue( double dValue );
inline void SetUI4( ULONG ulValue );
inline void SetValue( ULONG ulValue );
inline void SetValue( LONG lValue );
inline void SetValue( LARGE_INTEGER llValue );
inline void SetValue( FILETIME ftValue );
inline void SetValue( CY CyValue );
inline void SetValue( float fValue );
inline void SetValue( SHORT sValue );
inline void SetValue( const CStorageVariant &prval );
inline void SetDate ( DATE dValue );
inline void SetBOOL( BOOL fValue );
void SetValue( BLOB & bValue );
void SetValue( WCHAR * pwcsValue );
void SetValue( GUID * pguidValue);
inline CStorageVariant const & Value();
# ifdef CIEXTMODE
void CiExtDump(void *ciExtSelf);
# endif
private:
void _CleanValue();
ULONG _relop; // Relation
CFullPropSpec _Property; // Property Name
CStorageVariant _prval; // Constant value
};
//
// Inline methods for CFullPropSpec
//
inline void * CFullPropSpec::operator new( size_t size )
{
void * p = CoTaskMemAlloc( size );
return( p );
}
inline void * CFullPropSpec::operator new( size_t size, void * p )
{
return( p );
}
inline void CFullPropSpec::operator delete( void * p )
{
if ( p )
CoTaskMemFree( p );
}
#if _MSC_VER >= 1200
inline void CFullPropSpec::operator delete( void * p, void * pp )
{
return;
}
#endif
inline BOOL CFullPropSpec::IsValid() const
{
return ( ( _psProperty.ulKind == PRSPEC_PROPID ) ||
( ( _psProperty.ulKind == PRSPEC_LPWSTR ) &&
( 0 != _psProperty.lpwstr ) ) );
}
inline void CFullPropSpec::SetPropSet( GUID const & guidPropSet )
{
_guidPropSet = guidPropSet;
}
inline GUID const & CFullPropSpec::GetPropSet() const
{
return( _guidPropSet );
}
inline PROPSPEC CFullPropSpec::GetPropSpec() const
{
return( _psProperty );
}
inline WCHAR const * CFullPropSpec::GetPropertyName() const
{
return( _psProperty.lpwstr );
}
inline PROPID CFullPropSpec::GetPropertyPropid() const
{
return( _psProperty.propid );
}
inline BOOL CFullPropSpec::IsPropertyName() const
{
return( _psProperty.ulKind == PRSPEC_LPWSTR );
}
inline BOOL CFullPropSpec::IsPropertyPropid() const
{
return( _psProperty.ulKind == PRSPEC_PROPID );
}
inline BOOL CColumns::IsValid() const
{
return ( 0 != _aCol );
}
inline CFullPropSpec const & CColumns::Get( unsigned pos ) const
{
if ( pos < _cCol )
return( _aCol[pos] );
else
return( *(CFullPropSpec *)0 );
}
//
// Inline methods for CColumns
//
inline unsigned CColumns::Count() const
{
return( _cCol );
}
inline COLUMNSET * CColumns::CastToStruct()
{
return( (COLUMNSET *)this );
}
//
// Inline methods for CSortKey
//
inline CSortKey::CSortKey()
{
}
inline BOOL CSortKey::IsValid() const
{
return _property.IsValid();
}
inline void CSortKey::SetProperty( CFullPropSpec const & ps )
{
_property = ps;
}
inline void CSortKey::SetLocale( LCID locale )
{
_locale = locale;
}
inline CFullPropSpec const & CSortKey::GetProperty() const
{
return( _property );
}
inline LCID CSortKey::GetLocale() const
{
return( _locale );
}
inline ULONG CSortKey::GetOrder() const
{
return( _dwOrder );
}
//
// Inline methods of CSort
//
inline BOOL CSort::IsValid() const
{
return ( 0 != _ask );
}
inline SORTSET * CSort::CastToStruct()
{
return( (SORTSET *)this );
}
inline CSortKey const & CSort::Get( unsigned pos ) const
{
if ( pos < _csk )
{
return( _ask[pos] );
}
else
{
return( *(CSortKey *)0 );
}
}
inline unsigned
CSort::Count() const
{
return( _csk );
}
//
// Inline methods of CRestriction
//
inline CRestriction::CRestriction()
: _ulType( RTNone ),
_lWeight( MAX_QUERY_RANK )
{
}
inline CRestriction::CRestriction( ULONG RestrictionType, LONG lWeight )
: _ulType( RestrictionType ),
_lWeight( lWeight )
{
}
inline RESTRICTION * CRestriction::CastToStruct() const
{
//
// It would be nice to assert valid _ulType here, but there is
// no published assert mechanism for external use.
//
return ( (RESTRICTION *)this );
}
inline FULLPROPSPEC * CFullPropSpec::CastToStruct()
{
return((FULLPROPSPEC *) this);
}
inline FULLPROPSPEC const * CFullPropSpec::CastToStruct() const
{
return((FULLPROPSPEC const *) this);
}
inline ULONG CRestriction::Type() const
{
return ( _ulType );
}
inline LONG CRestriction::Weight() const
{
return ( _lWeight );
}
inline void CRestriction::SetWeight( LONG lWeight )
{
_lWeight = lWeight;
}
inline void CRestriction::SetType( ULONG RestrictionType )
{
_ulType = RestrictionType;
}
//
// Inline methods of CNodeRestriction
//
inline void CNodeRestriction::AddChild( CRestriction * prst )
{
unsigned pos;
AddChild( prst, pos );
}
inline unsigned CNodeRestriction::Count() const
{
return _cNode;
}
inline CNodeRestriction * CRestriction::CastToNode() const
{
//
// It would be nice to assert node type here, but there is
// no published assert mechanism for external use.
//
return ( (CNodeRestriction *)this );
}
inline void CNodeRestriction::SetChild( CRestriction * presChild,
unsigned pos )
{
if ( pos < _cNode )
_paNode[pos] = presChild;
}
inline CRestriction * CNodeRestriction::GetChild( unsigned pos ) const
{
if ( pos < _cNode )
return( _paNode[pos] );
else
return( 0 );
}
//
// Inline methods of CNotRestriction
//
inline CNotRestriction::CNotRestriction()
: CRestriction( RTNot, MAX_QUERY_RANK ),
_pres(0)
{
}
inline CNotRestriction::CNotRestriction( CRestriction * pres )
: CRestriction( RTNot, MAX_QUERY_RANK ),
_pres( pres )
{
}
inline BOOL CNotRestriction::IsValid() const
{
return ( 0 != _pres && _pres->IsValid() );
}
inline void CNotRestriction::SetChild( CRestriction * pres )
{
delete _pres;
_pres = pres;
}
inline CRestriction * CNotRestriction::GetChild() const
{
return( _pres );
}
inline CRestriction * CNotRestriction::RemoveChild()
{
CRestriction *pRst = _pres;
_pres = 0;
return pRst;
}
//
// Inline methods of CVectorRestriction
//
inline CVectorRestriction::CVectorRestriction( ULONG ulRankMethod,
unsigned cInitAllocated )
: CNodeRestriction( RTVector, cInitAllocated )
{
SetRankMethod( ulRankMethod );
}
inline CVectorRestriction::CVectorRestriction( CVectorRestriction const & vecRst )
: CNodeRestriction( vecRst ),
_ulRankMethod( vecRst.RankMethod() )
{
}
inline void CVectorRestriction::SetRankMethod( ULONG ulRankMethod )
{
if ( ulRankMethod <= VECTOR_RANK_JACCARD )
_ulRankMethod = ulRankMethod;
else
_ulRankMethod = VECTOR_RANK_JACCARD;
}
inline ULONG CVectorRestriction::RankMethod() const
{
return ( _ulRankMethod );
}
//
// Inline methods of CContentRestriction
//
inline BOOL CContentRestriction::IsValid() const
{
return ( _Property.IsValid() && 0 != _pwcsPhrase );
}
inline WCHAR const * CContentRestriction::GetPhrase() const
{
return( _pwcsPhrase );
}
inline void CContentRestriction::SetProperty( CFullPropSpec const & Property )
{
_Property = Property;
}
inline CFullPropSpec const & CContentRestriction::GetProperty() const
{
return( _Property );
}
inline void CContentRestriction::SetGenerateMethod( ULONG ulGenerateMethod )
{
_ulGenerateMethod = ulGenerateMethod;
}
inline ULONG CContentRestriction::GenerateMethod() const
{
return( _ulGenerateMethod );
}
//
// Inline methods of CComplexContentRestriction
//
inline BOOL CComplexContentRestriction::IsValid() const
{
return ( 0 != _pwcsExpression );
}
inline WCHAR * CComplexContentRestriction::GetExpression()
{
return( _pwcsExpression );
}
//
// Inline methods of CNatLanguageRestriction
//
inline BOOL CNatLanguageRestriction::IsValid() const
{
return ( _Property.IsValid() && 0 != _pwcsPhrase );
}
inline WCHAR const * CNatLanguageRestriction::GetPhrase() const
{
return( _pwcsPhrase );
}
inline void CNatLanguageRestriction::SetProperty( CFullPropSpec const & Property )
{
_Property = Property;
}
inline CFullPropSpec const & CNatLanguageRestriction::GetProperty() const
{
return( _Property );
}
//
// Inline methods of CPropertyRestriction
//
inline BOOL CPropertyRestriction::IsValid() const
{
return ( _Property.IsValid() && _prval.IsValid() );
}
inline void CPropertyRestriction::SetRelation( ULONG relop )
{
_relop = relop;
}
inline ULONG CPropertyRestriction::Relation()
{
return( _relop );
}
inline void CPropertyRestriction::SetProperty( CFullPropSpec const & Property )
{
_Property = Property;
}
inline CFullPropSpec const & CPropertyRestriction::GetProperty() const
{
return( _Property );
}
inline void CPropertyRestriction::SetValue( double dValue )
{
_prval = dValue;
}
inline void CPropertyRestriction::SetValue( ULONG ulValue )
{
_prval.SetUI4( ulValue );
}
inline void CPropertyRestriction::SetUI4( ULONG ulValue )
{
_prval.SetUI4( ulValue );
}
inline void CPropertyRestriction::SetValue( LONG lValue )
{
_prval = lValue;
}
inline void CPropertyRestriction::SetValue( LARGE_INTEGER llValue )
{
_prval = llValue;
}
inline void CPropertyRestriction::SetValue( FILETIME ftValue )
{
_prval = ftValue;
}
inline void CPropertyRestriction::SetValue( CY cyValue )
{
_prval = cyValue;
}
inline void CPropertyRestriction::SetValue( float fValue )
{
_prval = fValue;
}
inline void CPropertyRestriction::SetValue( SHORT sValue )
{
_prval = sValue;
}
inline void CPropertyRestriction::SetValue( const CStorageVariant &prval )
{
_prval = prval;
}
inline void CPropertyRestriction::SetBOOL( BOOL fValue )
{
_prval.SetBOOL( (SHORT)fValue );
}
inline void CPropertyRestriction::SetDate( DATE dValue )
{
_prval.SetDATE( dValue );
}
inline CStorageVariant const & CPropertyRestriction::Value()
{
return( _prval );
}
#endif // __RESTRICT_HXX__