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.
132 lines
3.3 KiB
132 lines
3.3 KiB
//
|
|
// varcomp.h
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#define PRLT ( 0 )
|
|
#define PRLE ( 1 )
|
|
#define PRGT ( 2 )
|
|
#define PRGE ( 3 )
|
|
#define PREQ ( 4 )
|
|
#define PRNE ( 5 )
|
|
#define PRRE ( 6 )
|
|
#define PRAllBits ( 7 )
|
|
#define PRSomeBits ( 8 )
|
|
#define PRAll ( 0x100 )
|
|
#define PRAny ( 0x200 )
|
|
|
|
|
|
typedef BOOL (* FRel)(PROPVARIANT const &, PROPVARIANT const &);
|
|
typedef BOOL (* FPRel)(BYTE const *, BYTE const *);
|
|
typedef int (* FCmp)(PROPVARIANT const &, PROPVARIANT const &);
|
|
typedef int (* FPCmp)(BYTE const *, BYTE const *);
|
|
|
|
class CComparators
|
|
{
|
|
public:
|
|
|
|
static FCmp GetComparator( VARENUM vt );
|
|
static FRel GetRelop( VARENUM vt, ULONG rel );
|
|
static FPCmp GetPointerComparator( PROPVARIANT const & v1,
|
|
PROPVARIANT const & v2 );
|
|
static FPRel GetPointerRelop( PROPVARIANT const & v1,
|
|
PROPVARIANT const & v2,
|
|
ULONG rel );
|
|
|
|
private:
|
|
|
|
//
|
|
// There is one SComparators structure for each base variant type.
|
|
// They are accessed off aVariantComarators by VT_xxx. Within
|
|
// the SComparators structure relops are accessed by PRxxx.
|
|
//
|
|
|
|
struct SComparators
|
|
{
|
|
FCmp comparator;
|
|
FPCmp pointercomparator;
|
|
FRel relops[9];
|
|
FPRel pointerrelops[9];
|
|
};
|
|
|
|
static ULONG const _iStart;
|
|
static SComparators const _aVariantComparators[];
|
|
static ULONG const _cVariantComparators;
|
|
|
|
static ULONG const _iStart2;
|
|
static SComparators const _aVariantComparators2[];
|
|
static ULONG const _cVariantComparators2;
|
|
|
|
static FRel const _aVectorComparators[];
|
|
static ULONG const _cVectorComparators;
|
|
static FRel const _aVectorComparatorsAll[];
|
|
static ULONG const _cVectorComparatorsAll;
|
|
static FRel const _aVectorComparatorsAny[];
|
|
static ULONG const _cVectorComparatorsAny;
|
|
};
|
|
|
|
extern CComparators VariantCompare;
|
|
|
|
inline BOOL isVector(VARTYPE vt)
|
|
{
|
|
return 0 != ( vt & VT_VECTOR );
|
|
}
|
|
|
|
inline BOOL isVector(PROPVARIANT const & v)
|
|
{
|
|
return isVector( v.vt );
|
|
}
|
|
|
|
inline BOOL isArray(VARTYPE vt)
|
|
{
|
|
return 0 != ( vt & VT_ARRAY );
|
|
}
|
|
|
|
inline BOOL isArray(PROPVARIANT const & v)
|
|
{
|
|
return isArray( v.vt );
|
|
}
|
|
|
|
inline BOOL isVectorOrArray(VARTYPE vt)
|
|
{
|
|
return 0 != ( vt & (VT_ARRAY|VT_VECTOR) );
|
|
}
|
|
|
|
inline BOOL isVectorOrArray(PROPVARIANT const & v)
|
|
{
|
|
return isVectorOrArray( v.vt );
|
|
}
|
|
|
|
inline BOOL isVectorRelop(ULONG relop)
|
|
{
|
|
return relop & (PRAny | PRAll);
|
|
}
|
|
|
|
inline BOOL isRelopAny(ULONG relop)
|
|
{
|
|
return relop & PRAny;
|
|
}
|
|
|
|
inline BOOL isRelopAll(ULONG relop)
|
|
{
|
|
return relop & PRAll;
|
|
}
|
|
|
|
inline VARENUM getBaseType(PROPVARIANT const &v)
|
|
{
|
|
return (VARENUM) (VT_TYPEMASK & v.vt);
|
|
}
|
|
|
|
inline ULONG getBaseRelop(ULONG relop)
|
|
{
|
|
return relop & ~(PRAny | PRAll);
|
|
}
|
|
|
|
BOOL VT_VARIANT_LT( PROPVARIANT const & v1, PROPVARIANT const & v2 );
|
|
BOOL VT_VARIANT_LE( PROPVARIANT const & v1, PROPVARIANT const & v2 );
|
|
BOOL VT_VARIANT_GE( PROPVARIANT const & v1, PROPVARIANT const & v2 );
|
|
BOOL VT_VARIANT_GT( PROPVARIANT const & v1, PROPVARIANT const & v2 );
|
|
BOOL VT_VARIANT_EQ( PROPVARIANT const & v1, PROPVARIANT const & v2 );
|
|
BOOL VT_VARIANT_NE( PROPVARIANT const & v1, PROPVARIANT const & v2 );
|
|
|