|
|
//+-------------------------------------------------------------------------
//
// 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__
|