Qt 4.8
Public Functions | Private Functions | Static Private Functions | Properties | List of all members
QPatternist::GeneralComparison Class Reference

Implements XPath 2.0's general comparions, such as the = operator. More...

#include <qgeneralcomparison_p.h>

Inheritance diagram for QPatternist::GeneralComparison:
QPatternist::PairContainer QPatternist::ComparisonPlatform< GeneralComparison, true, AtomicComparator::AsGeneralComparison > QPatternist::Expression QSharedData QPatternist::CppCastingHelper< Expression > QPatternist::SourceLocationReflection

Public Functions

virtual ExpressionVisitorResult::Ptr accept (const ExpressionVisitor::Ptr &visitor) const
 
virtual Expression::Ptr compress (const StaticContext::Ptr &context)
 
virtual bool evaluateEBV (const DynamicContext::Ptr &) const
 
virtual SequenceType::List expectedOperandTypes () const
 
 GeneralComparison (const Expression::Ptr &op1, const AtomicComparator::Operator op, const Expression::Ptr &op2, const bool isBackwardsCompat=false)
 
virtual ID id () const
 
AtomicComparator::Operator operatorID () const
 
virtual QList< QExplicitlySharedDataPointer< OptimizationPass > > optimizationPasses () const
 
virtual SequenceType::Ptr staticType () const
 
virtual Expression::Ptr typeCheck (const StaticContext::Ptr &context, const SequenceType::Ptr &reqType)
 
- Public Functions inherited from QPatternist::PairContainer
virtual bool compressOperands (const StaticContext::Ptr &)
 
virtual Expression::List operands () const
 
virtual void setOperands (const Expression::List &operands)
 
- Public Functions inherited from QPatternist::Expression
virtual const SourceLocationReflectionactualReflection () const
 Returns this. More...
 
virtual void announceFocusType (const ItemType::Ptr &itemType)
 
Properties deepProperties () const
 Computes the union of properties for this Expression and all its descending children. More...
 
virtual Properties dependencies () const
 
virtual QString description () const
 
virtual Item::Iterator::Ptr evaluateSequence (const DynamicContext::Ptr &context) const
 
virtual Item evaluateSingleton (const DynamicContext::Ptr &context) const
 
virtual void evaluateToSequenceReceiver (const DynamicContext::Ptr &context) const
 
virtual ItemType::Ptr expectedContextItemType () const
 
 Expression ()
 
bool has (const Property prop) const
 
bool hasDependency (const Property prop) const
 
bool is (const ID id) const
 
bool isEvaluated () const
 
virtual ItemType::Ptr newFocusType () const
 
virtual PatternPriority patternPriority () const
 
virtual Properties properties () const
 
const Expression::Ptrrewrite (const Expression::Ptr &to, const StaticContext::Ptr &context) const
 Rewrites this Expression to to, and return to. More...
 
virtual ~Expression ()
 
- Public Functions inherited from QSharedData
 QSharedData ()
 Constructs a QSharedData object with a reference count of 0. More...
 
 QSharedData (const QSharedData &)
 Constructs a QSharedData object with reference count 0. More...
 
- Public Functions inherited from QPatternist::CppCastingHelper< Expression >
const TCastTarget * as () const
 
TCastTarget * as ()
 
- Public Functions inherited from QPatternist::SourceLocationReflection
virtual QSourceLocation sourceLocation () const
 
 SourceLocationReflection ()
 
virtual ~SourceLocationReflection ()
 

Private Functions

AtomicComparator::Ptr fetchGeneralComparator (Expression::Ptr &op1, Expression::Ptr &op2, const ReportContext::Ptr &context) const
 
bool generalCompare (const Item &op1, const Item &op2, const DynamicContext::Ptr &context) const
 

Static Private Functions

static void updateType (ItemType::Ptr &type, const Expression::Ptr &source)
 

Properties

const bool m_isBackwardsCompat
 
const AtomicComparator::Operator m_operator
 

Additional Inherited Members

- Public Types inherited from QPatternist::Expression
typedef QExplicitlySharedDataPointer< const ExpressionConstPtr
 A smart pointer wrapping const Expression instances. More...
 
enum  ID {
  IDBooleanValue = 1, IDCountFN, IDEmptyFN, IDExistsFN,
  IDExpressionSequence, IDGeneralComparison, IDIfThenClause, IDIgnorableExpression,
  IDIntegerValue, IDPositionFN, IDStringValue, IDValueComparison,
  IDRangeVariableReference, IDContextItem, IDUserFunctionCallsite, IDExpressionVariableReference,
  IDAttributeConstructor, IDUpperCaseFN, IDLowerCaseFN, IDFirstItemPredicate,
  IDEmptySequence, IDReturnOrderBy, IDLetClause, IDForClause,
  IDPath, IDNamespaceConstructor, IDArgumentReference, IDGenericPredicate,
  IDAxisStep, IDFloat, IDCombineNodes, IDUnresolvedVariableReference,
  IDCardinalityVerifier
}
 
typedef QList< Expression::PtrList
 
typedef QFlags< PropertyProperties
 
enum  Property {
  UseContextItem = 1, DisableElimination = 1 << 1, IsEvaluated = 1 << 2, DisableTypingDeduction = 1 << 3,
  EmptynessFollowsChild = 1 << 4, RewriteToEmptyOnEmpty = 1 << 5, RequiresFocus = 1 << 6, AffectsOrderOnly = 1 << 7,
  RequiresContextItem = (1 << 8) | RequiresFocus, CreatesFocusForLast = 1 << 9, LastOperandIsCollation = 1 << 10, DependsOnLocalVariable = (1 << 11) | DisableElimination,
  EvaluationCacheRedundant = (1 << 12), IsNodeConstructor = 1 << 13, RequiresCurrentItem = 1 << 14
}
 
typedef QExplicitlySharedDataPointer< ExpressionPtr
 A smart pointer wrapping mutable Expression instances. More...
 
typedef ::QAbstractXmlForwardIterator< Expression::PtrQAbstractXmlForwardIterator
 
typedef QVector< Expression::PtrVector
 
- Static Public Functions inherited from QPatternist::Expression
static void rewrite (Expression::Ptr &old, const Expression::Ptr &New, const StaticContext::Ptr &context)
 
- Public Variables inherited from QSharedData
QAtomicInt ref
 
- Protected Functions inherited from QPatternist::PairContainer
 PairContainer (const Expression::Ptr &operand1, const Expression::Ptr &operand2)
 
- Protected Functions inherited from QPatternist::Expression
void typeCheckOperands (const StaticContext::Ptr &context)
 
- Protected Functions inherited from QPatternist::CppCastingHelper< Expression >
 CppCastingHelper ()
 
- Protected Functions inherited from QPatternist::ComparisonPlatform< GeneralComparison, true, AtomicComparator::AsGeneralComparison >
const AtomicComparator::Ptrcomparator () const
 
bool compare (const Item &i1, const Item &i2, const AtomicComparator::Ptr &comp, const AtomicComparator::Operator op) const
 Compares i1 and i2 with operator op, using comparator comp. All input arguments must be valid, and not null. More...
 
 ComparisonPlatform ()
 
AtomicComparator::ComparisonResult detailedFlexibleCompare (const Item &it1, const Item &it2, const DynamicContext::Ptr &context) const
 like flexibleCompare(), but returns the result as an AtomicComparator::Operator instead of bool. More...
 
AtomicComparator::Ptr fetchComparator (const ItemType::Ptr &type1, const ItemType::Ptr &type2, const ReportContext::Ptr &context) const
 
bool flexibleCompare (const Item &it1, const Item &it2, const DynamicContext::Ptr &context) const
 Compares it1 against it2, using comparator() and operatorID(). More...
 
void prepareComparison (const AtomicComparator::Ptr &comparator)
 
void useCaseInsensitiveComparator ()
 
- Protected Variables inherited from QPatternist::PairContainer
Expression::Ptr m_operand1
 
Expression::Ptr m_operand2
 

Detailed Description

Implements XPath 2.0's general comparions, such as the = operator.

ComparisonPlatform is inherited with protected scope because ComparisonPlatform must access members of GeneralComparison.

See also
XML Path Language (XPath) 2.0, 3.5.2 General Comparisons
Author
Frans Englich frans.nosp@m..eng.nosp@m.lich@.nosp@m.noki.nosp@m.a.com

Definition at line 77 of file qgeneralcomparison_p.h.

Constructors and Destructors

◆ GeneralComparison()

GeneralComparison::GeneralComparison ( const Expression::Ptr op1,
const AtomicComparator::Operator  op,
const Expression::Ptr op2,
const bool  isBackwardsCompat = false 
)

Definition at line 58 of file qgeneralcomparison.cpp.

61  : PairContainer(op1, op2)
62  , m_operator(op)
63  , m_isBackwardsCompat(isBackwardsCompat)
64 {
65 }
const AtomicComparator::Operator m_operator
PairContainer(const Expression::Ptr &operand1, const Expression::Ptr &operand2)

Functions

◆ accept()

ExpressionVisitorResult::Ptr GeneralComparison::accept ( const ExpressionVisitor::Ptr visitor) const
virtual

Implements QPatternist::Expression.

Definition at line 287 of file qgeneralcomparison.cpp.

288 {
289  return visitor->visit(this);
290 }

◆ compress()

Expression::Ptr GeneralComparison::compress ( const StaticContext::Ptr context)
virtual

Overridden to optimize case-insensitive compares.

Reimplemented from QPatternist::Expression.

Definition at line 135 of file qgeneralcomparison.cpp.

Referenced by operatorID().

136 {
137  const Expression::Ptr me(PairContainer::compress(context));
138 
139  if(me != this)
140  return me;
141 
144 
145  return me;
146 }
virtual Expression::Ptr compress(const StaticContext::Ptr &context)
static bool isCaseInsensitiveCompare(Expression::Ptr &op1, Expression::Ptr &op2)

◆ evaluateEBV()

bool GeneralComparison::evaluateEBV ( const DynamicContext::Ptr context) const
virtual

Determines the Effective Boolean Value of the expression.

The Effective Boolean Value of a value is not necessarily the same as converting the value to a new value of type xs:boolean.

Note that this function cannot return the empty sequence, evaluateSingleton() must be overridden in order to be able to do that.

The default implementation results in a type error. Hence, this function must be overridden if such behavior is not of interest.

See also
XML Path Language (XPath) 2.0, 2.4.3 Effective Boolean Value

Reimplemented from QPatternist::Expression.

Definition at line 92 of file qgeneralcomparison.cpp.

93 {
94  const Item::Iterator::Ptr it1(m_operand1->evaluateSequence(context));
95  Item item1(it1->next());
96 
97  if(!item1)
98  return false;
99 
100  const Item::Iterator::Ptr it2(m_operand2->evaluateSequence(context));
101  Item::List cache;
102  Item item2;
103 
104  while(true)
105  {
106  item2 = it2->next();
107  if(!item2)
108  break;
109 
110  if(generalCompare(item1, item2, context))
111  return true;
112 
113  cache.append(item2);
114  }
115 
116  while(true)
117  {
118  item1 = it1->next();
119 
120  if(!item1)
121  return false;
122 
123  const Item::List::const_iterator end(cache.constEnd());
125 
126  for(; it != end; ++it)
127  if(generalCompare(item1, *it, context))
128  return true;
129  }
130 
131  Q_ASSERT(false);
132  return false;
133 }
#define it(className, varName)
bool generalCompare(const Item &op1, const Item &op2, const DynamicContext::Ptr &context) const
The QExplicitlySharedDataPointer class represents a pointer to an explicitly shared object...
Definition: qshareddata.h:136
const_iterator constBegin() const
Returns a const STL-style iterator pointing to the first item in the list.
Definition: qlist.h:269
#define Q_ASSERT(cond)
Definition: qglobal.h:1823
friend class const_iterator
Definition: qlist.h:264
void append(const T &t)
Inserts value at the end of the list.
Definition: qlist.h:507
Represents an item in the XPath 2.0 Data Model.
Definition: qitem_p.h:182
QList< Item > List
Definition: qitem_p.h:195
static const KeyPair *const end
virtual Item::Iterator::Ptr evaluateSequence(const DynamicContext::Ptr &context) const
const_iterator constEnd() const
Returns a const STL-style iterator pointing to the imaginary item after the last item in the list...
Definition: qlist.h:272

◆ expectedOperandTypes()

SequenceType::List GeneralComparison::expectedOperandTypes ( ) const
virtual

Returns a list of Sequence Types, describing the type of each of the expression's operands. Hence, this function has a relationship to the operands() function:

- The lengths of the lists returned by expectedOperandTypes()
and operands() should always be equal in length, since one
cannot describe the type of a non-existent operand(and all
operands must have type information).
- A significant difference between the two functions is that while
the type of objects in the list returned by operands() may vary
between compilations/static context, simply because the particular
Expression is part of different XPath expressions, the
types in the list returned by expectedOperandTypes is always the same
since the function/operator signature never changes.

This function should not be confused with staticType(), which returns the static type of the expression itself, not its operands. The function call is an expression where this is clear: the type of the return value is not the same as the arguments' types. The static type of the operands supplied to the expression can be determined via the staticType() function of the instances returned by operands().

If the expression has no operands, an empty list should be returned.

Implements QPatternist::Expression.

Definition at line 274 of file qgeneralcomparison.cpp.

275 {
276  SequenceType::List result;
279  return result;
280 }
void append(const T &t)
Inserts value at the end of the list.
Definition: qlist.h:507
static const SequenceType::Ptr ZeroOrMoreAtomicTypes
The QList class is a template class that provides lists.
Definition: qdatastream.h:62

◆ fetchGeneralComparator()

AtomicComparator::Ptr GeneralComparison::fetchGeneralComparator ( Expression::Ptr op1,
Expression::Ptr op2,
const ReportContext::Ptr context 
) const
private

Definition at line 189 of file qgeneralcomparison.cpp.

Referenced by generalCompare(), operatorID(), and typeCheck().

192 {
193  ItemType::Ptr t1(op1->staticType()->itemType());
194  ItemType::Ptr t2(op2->staticType()->itemType());
195 
196  /* a. "If one of the atomic values is an instance of xs:untypedAtomic and
197  * the other is an instance of a numeric type, then the xs:untypedAtomic
198  * value is cast to the type xs:double." */
199  if(BuiltinTypes::numeric->xdtTypeMatches(t1) &&
200  BuiltinTypes::xsUntypedAtomic->xdtTypeMatches(t2))
201  {
203 
204  /* The types might have changed, reload. */
205  updateType(t2, op2);
206  }
207  else if(BuiltinTypes::numeric->xdtTypeMatches(t2) &&
208  BuiltinTypes::xsUntypedAtomic->xdtTypeMatches(t1))
209  {
211 
212  /* The types might have changed, reload. */
213  updateType(t1, op1);
214  }
215  /* "If XPath 1.0 compatibility mode is true, a general comparison is
216  * evaluated by applying the following rules, in order:
217  * 1. If either operand is a single atomic value that is an instance of
218  * xs:boolean, then the other operand is converted to xs:boolean by taking
219  * its effective boolean value."
220  *
221  * Notably, it's not conversion to boolean, it is EBV extraction.
222  */
223  else if(m_isBackwardsCompat && BuiltinTypes::xsBoolean->xdtTypeMatches(t1))
224  {
225  op2 = Expression::Ptr(new EBVExtractor(op2));
226  updateType(t2, op2);
227  }
228  else if(m_isBackwardsCompat && BuiltinTypes::xsBoolean->xdtTypeMatches(t2))
229  {
230  op1 = Expression::Ptr(new EBVExtractor(op1));
231  updateType(t1, op1);
232  }
233  /* b. "If one of the atomic values is an instance of xs:untypedAtomic and
234  * the other is an instance of xs:untypedAtomic or xs:string, then the
235  * xs:untypedAtomic value (or values) is (are) cast to the type xs:string."
236  *
237  * c. "If one of the atomic values is an instance of xs:untypedAtomic and the
238  * other is not an instance of xs:string, xs:untypedAtomic, or any numeric
239  * type, then the xs:untypedAtomic value is cast to the dynamic type of the
240  * other value." */
241  else if(BuiltinTypes::xsUntypedAtomic->xdtTypeMatches(t1) &&
242  !BuiltinTypes::xsString->xdtTypeMatches(t2) &&
243  !BuiltinTypes::xsUntypedAtomic->xdtTypeMatches(t2) &&
244  !BuiltinTypes::xsAnyURI->xdtTypeMatches(t2))
245  {
246  op1 = Expression::Ptr(new UntypedAtomicConverter(op1, t2));
247  updateType(t1, op1);
248  }
249  else if(BuiltinTypes::xsUntypedAtomic->xdtTypeMatches(t2) &&
250  !BuiltinTypes::xsString->xdtTypeMatches(t1) &&
251  !BuiltinTypes::xsUntypedAtomic->xdtTypeMatches(t1) &&
252  !BuiltinTypes::xsAnyURI->xdtTypeMatches(t1))
253  {
254  op2 = Expression::Ptr(new UntypedAtomicConverter(op2, t1));
255  updateType(t2, op2);
256  }
257 
258  /* d. "After performing the conversions described above, the atomic
259  * values are compared using one of the value comparison operators
260  * eq, ne, lt, le, gt, or ge, depending on whether the general comparison
261  * operator was =, !=, <, <=, >, or >=. The values have the required
262  * magnitude relationship if and only if the result of this value comparison
263  * is true." */
264 
265  return fetchComparator(t1, t2, context);
266 }
static void updateType(ItemType::Ptr &type, const Expression::Ptr &source)
AtomicComparator::Ptr fetchComparator(const ItemType::Ptr &type1, const ItemType::Ptr &type2, const ReportContext::Ptr &context) const
static const AtomicType::Ptr xsString
static const AtomicType::Ptr xsDouble
static const AtomicType::Ptr xsUntypedAtomic
QExplicitlySharedDataPointer< Expression > Ptr
A smart pointer wrapping mutable Expression instances.
virtual SequenceType::Ptr staticType() const =0
static const AtomicType::Ptr numeric
Calculates the Effective Boolean Value of its operand.
Casts every item in a sequence obtained from evaluating an Expression, to a requested atomic type...
static const AtomicType::Ptr xsBoolean
virtual ItemType::Ptr itemType() const =0
static const AtomicType::Ptr xsAnyURI

◆ generalCompare()

bool GeneralComparison::generalCompare ( const Item op1,
const Item op2,
const DynamicContext::Ptr context 
) const
private

Definition at line 67 of file qgeneralcomparison.cpp.

Referenced by evaluateEBV(), and operatorID().

70 {
71  Q_ASSERT(op1);
72  Q_ASSERT(op2);
73 
74  if(comparator())
75  return compare(op1, op2, comparator(), m_operator);
76 
77  Expression::Ptr a1(new Literal(op1));
78  Expression::Ptr a2(new Literal(op2));
79 
80  const AtomicComparator::Ptr comp(fetchGeneralComparator(a1, a2, context));
81  /* The fetchGeneralComparator call may rewrite a1 and/or a2. */
82  Q_ASSERT(a1);
83  Q_ASSERT(a2);
84  Q_ASSERT(comp);
85 
86  return compare(a1->evaluateSingleton(context),
87  a2->evaluateSingleton(context),
88  comp,
89  m_operator);
90 }
bool compare(const Item &i1, const Item &i2, const AtomicComparator::Ptr &comp, const AtomicComparator::Operator op) const
Compares i1 and i2 with operator op, using comparator comp. All input arguments must be valid...
#define Q_ASSERT(cond)
Definition: qglobal.h:1823
const AtomicComparator::Operator m_operator
Houses an AtomicValue, making it available as an Expression.
Definition: qliteral_p.h:74
AtomicComparator::Ptr fetchGeneralComparator(Expression::Ptr &op1, Expression::Ptr &op2, const ReportContext::Ptr &context) const

◆ id()

Expression::ID GeneralComparison::id ( ) const
virtual
Returns
always IDGeneralComparison

Reimplemented from QPatternist::Expression.

Definition at line 292 of file qgeneralcomparison.cpp.

◆ operatorID()

AtomicComparator::Operator QPatternist::GeneralComparison::operatorID ( ) const
inline
Returns
the operator that this GeneralComparison is using.

Definition at line 107 of file qgeneralcomparison_p.h.

Referenced by QPatternist::ComparisonIdentifier::matches().

108  {
109  return m_operator;
110  }
const AtomicComparator::Operator m_operator

◆ optimizationPasses()

OptimizationPass::List GeneralComparison::optimizationPasses ( ) const
virtual

Returns the OptimizationPasses that applies for this Expression. The default implementation returns an empty list. Sub-classes can re-implement this function and return actual OptimizationPasses.

Returns
always an empty list.

Reimplemented from QPatternist::Expression.

Definition at line 268 of file qgeneralcomparison.cpp.

269 {
272 }
#define Q_ASSERT(cond)
Definition: qglobal.h:1823
OptimizationPass::List comparisonPasses
static bool isEmpty(const char *str)

◆ staticType()

SequenceType::Ptr GeneralComparison::staticType ( ) const
virtual
Returns
the static type of this Expression. For example, an 'and' expression have as static type xs:boolean

Implements QPatternist::Expression.

Definition at line 282 of file qgeneralcomparison.cpp.

283 {
285 }
static const SequenceType::Ptr ExactlyOneBoolean

◆ typeCheck()

Expression::Ptr GeneralComparison::typeCheck ( const StaticContext::Ptr context,
const SequenceType::Ptr reqType 
)
virtual

This implementation guarantees to never rewrite away this Expression, but at most rewrite it as a child of another expression(that presumably have a type checking role). It is therefore always safe to override this function and call this implementation and not worry about that this Expression becomes deleted.

Many Expressions override typeCheck() and performs optimizations, as opposed to doing it in the compress() stage. This is due to that the design of those Expressions often are tied to that certain simplifications are done at the typeCheck() stage of the compilation process or that it in some other way is related to what the typeCheck() do. Also, the earlier the AST can be simplified, the better the chances are for subsequent optimizations.

It is important that the super class's typeCheck() is called before doing any custom type checking, since the call can change the children(notably, the childrens' static types). For example, if the Expression, MyExpression in the example, does not match the required type, typeCheck returns the Expression wrapped in for example ItemVerifier, CardinalityVerifier, or both.

typeCheck() may be called many times. typeCheck() must either raise an error if this Expression is an invalid expression. Thus, it is guaranteed that an Expression is valid after typeCheck() is called.

Parameters
contextsupplies information, such as namespace bindings and available function signatures, that can be needed at compilation time. context is guaranteed by the caller to never null.
reqTypethe static type that this Expression must match when evaluated. reqType is guaranteed by the caller to never null.
Returns
an Expression that can be this Expression, or another expression, which somehow is necessary for making this Expression conforming to reqType

Reimplemented from QPatternist::Expression.

Definition at line 148 of file qgeneralcomparison.cpp.

150 {
151 
152  const Expression::Ptr me(PairContainer::typeCheck(context, reqType));
153 
156 
157  if(*CommonSequenceTypes::Empty == *t1 ||
159  {
160  return wrapLiteral(CommonValues::BooleanFalse, context, this);
161  }
162 
163  if(*BuiltinTypes::xsAnyAtomicType == *t1 ||
165  return me;
166 
168 
171  {
172  /* Rewrite to a ValueComparison whose operands uses typing rules
173  * as for an general comparison(that's what's done above). */
175  m_operator,
176  m_operand2))->typeCheck(context, reqType),
177  context);
178  }
179  else
180  return me;
181 }
virtual Expression::Ptr typeCheck(const StaticContext::Ptr &context, const SequenceType::Ptr &reqType)
Definition: qexpression.cpp:70
virtual Expression::Ptr typeCheck(const StaticContext::Ptr &context, const SequenceType::Ptr &reqType)
static void rewrite(Expression::Ptr &old, const Expression::Ptr &New, const StaticContext::Ptr &context)
const AtomicComparator::Operator m_operator
virtual Cardinality cardinality() const =0
virtual SequenceType::Ptr staticType() const =0
static const EmptySequenceType::Ptr Empty
AtomicComparator::Ptr fetchGeneralComparator(Expression::Ptr &op1, Expression::Ptr &op2, const ReportContext::Ptr &context) const
static const AtomicType::Ptr xsAnyAtomicType
Implements XPath 2.0 value comparions, such as the eq operator.
virtual ItemType::Ptr itemType() const =0
static const AtomicValue::Ptr BooleanFalse

◆ updateType()

void GeneralComparison::updateType ( ItemType::Ptr type,
const Expression::Ptr source 
)
inlinestaticprivate

Definition at line 183 of file qgeneralcomparison.cpp.

Referenced by fetchGeneralComparator(), and operatorID().

185 {
186  type = source->staticType()->itemType();
187 }
virtual SequenceType::Ptr staticType() const =0
virtual ItemType::Ptr itemType() const =0

Properties

◆ m_isBackwardsCompat

const bool QPatternist::GeneralComparison::m_isBackwardsCompat
private

Definition at line 128 of file qgeneralcomparison_p.h.

Referenced by fetchGeneralComparator().

◆ m_operator

const AtomicComparator::Operator QPatternist::GeneralComparison::m_operator
private

Definition at line 127 of file qgeneralcomparison_p.h.

Referenced by generalCompare(), operatorID(), and typeCheck().


The documentation for this class was generated from the following files: