From 28f422ebf516aefb34f1602aeef8f87432cc4fb9 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Fri, 24 Jan 2014 22:11:16 +0100 Subject: Move ArrayElementLessThen to qv4arraydata.cpp This is the only place the class gets used. Change-Id: Iebb0cba7af30c1b2da68f67596c349d5e20c5053 Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4arraydata.cpp | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/qml/jsruntime/qv4arraydata.cpp') diff --git a/src/qml/jsruntime/qv4arraydata.cpp b/src/qml/jsruntime/qv4arraydata.cpp index 9c6ff94583..63fe650cd5 100644 --- a/src/qml/jsruntime/qv4arraydata.cpp +++ b/src/qml/jsruntime/qv4arraydata.cpp @@ -630,6 +630,47 @@ Property *ArrayData::insert(Object *o, uint index, bool isAccessor) return reinterpret_cast(o->arrayData->data + n->value); } + +class ArrayElementLessThan +{ +public: + inline ArrayElementLessThan(ExecutionContext *context, ObjectRef thisObject, const ValueRef comparefn) + : m_context(context), thisObject(thisObject), m_comparefn(comparefn) {} + + bool operator()(const SafeValue &v1, const SafeValue &v2) const; + +private: + ExecutionContext *m_context; + ObjectRef thisObject; + const ValueRef m_comparefn; +}; + + +bool ArrayElementLessThan::operator()(const SafeValue &v1, const SafeValue &v2) const +{ + Scope scope(m_context); + + if (v1.isUndefined() || v1.isEmpty()) + return false; + if (v2.isUndefined() || v2.isEmpty()) + return true; + ScopedObject o(scope, m_comparefn); + if (o) { + Scope scope(o->engine()); + ScopedValue result(scope); + ScopedCallData callData(scope, 2); + callData->thisObject = Primitive::undefinedValue(); + callData->args[0] = v1; + callData->args[1] = v2; + result = __qmljs_call_value(m_context, m_comparefn, callData); + + return result->toNumber() < 0; + } + ScopedString p1s(scope, v1.toString(m_context)); + ScopedString p2s(scope, v2.toString(m_context)); + return p1s->toQString() < p2s->toQString(); +} + void ArrayData::sort(ExecutionContext *context, ObjectRef thisObject, const ValueRef comparefn, uint len) { if (!len) -- cgit v1.2.3