compile fix for MSVC 2008 and std::upper_bound

qUpperBound was replaced by std::upper_bound.

Unfortunately the STL of MSVC 2008 enforces
the definition of the operator in both
directions.

Change-Id: I3e0f775c23e43332d106e0847d3611e488da6c06
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
This commit is contained in:
Thomas Hartmann 2012-10-02 16:50:01 +02:00 committed by The Qt Project
parent 642867d2dd
commit 1fb3d849e4
3 changed files with 35 additions and 11 deletions

View File

@ -401,6 +401,26 @@ Q_STATIC_GLOBAL_OPERATOR bool operator<(const QCheckPoint &checkPoint, int pos)
return checkPoint.positionInFrame < pos; return checkPoint.positionInFrame < pos;
} }
#if defined(Q_CC_MSVC) && _MSC_VER < 1600
//The STL implementation of MSVC 2008 requires the definitions
Q_STATIC_GLOBAL_OPERATOR bool operator<(const QCheckPoint &checkPoint2, const QCheckPoint &checkPoint1)
{
return checkPoint1.y < checkPoint2.y;
}
Q_STATIC_GLOBAL_OPERATOR bool operator<(QFixed y, const QCheckPoint &checkPoint)
{
return y < checkPoint.y;
}
Q_STATIC_GLOBAL_OPERATOR bool operator<(int pos, const QCheckPoint &checkPoint)
{
return pos < checkPoint.positionInFrame;
}
#endif
static void fillBackground(QPainter *p, const QRectF &rect, QBrush brush, const QPointF &origin, QRectF gradientRect = QRectF()) static void fillBackground(QPainter *p, const QRectF &rect, QBrush brush, const QPointF &origin, QRectF gradientRect = QRectF())
{ {
p->save(); p->save();

View File

@ -2540,7 +2540,10 @@ namespace {
struct QScriptItemComparator { struct QScriptItemComparator {
bool operator()(const QScriptItem &a, const QScriptItem &b) { return a.position < b.position; } bool operator()(const QScriptItem &a, const QScriptItem &b) { return a.position < b.position; }
bool operator()(int p, const QScriptItem &b) { return p < b.position; } bool operator()(int p, const QScriptItem &b) { return p < b.position; }
//bool operator()(const QScriptItem &a, int p) { return a.position < p; } #if defined(Q_CC_MSVC) && _MSC_VER < 1600
//The STL implementation of MSVC 2008 requires the definition
bool operator()(const QScriptItem &a, int p) { return a.position < p; }
#endif
}; };
} }

View File

@ -1408,14 +1408,15 @@ QRectF QWidgetTextControlPrivate::rectForPosition(int position) const
return r; return r;
} }
static inline bool firstFramePosLessThanCursorPos(QTextFrame *frame, int position) namespace {
{ struct QTextFrameComparator {
return frame->firstPosition() < position; #if defined(Q_CC_MSVC) && _MSC_VER < 1600
} //The STL implementation of MSVC 2008 requires the definition
bool operator()(QTextFrame *frame1, QTextFrame *frame2) { return frame1->firstPosition() < frame2->firstPosition(); }
static inline bool cursorPosLessThanLastFramePos(int position, QTextFrame *frame) #endif
{ bool operator()(QTextFrame *frame, int position) { return frame->firstPosition() < position; }
return position < frame->lastPosition(); bool operator()(int position, QTextFrame *frame) { return position < frame->firstPosition(); }
};
} }
static QRectF boundingRectOfFloatsInSelection(const QTextCursor &cursor) static QRectF boundingRectOfFloatsInSelection(const QTextCursor &cursor)
@ -1425,9 +1426,9 @@ static QRectF boundingRectOfFloatsInSelection(const QTextCursor &cursor)
const QList<QTextFrame *> children = frame->childFrames(); const QList<QTextFrame *> children = frame->childFrames();
const QList<QTextFrame *>::ConstIterator firstFrame = std::lower_bound(children.constBegin(), children.constEnd(), const QList<QTextFrame *>::ConstIterator firstFrame = std::lower_bound(children.constBegin(), children.constEnd(),
cursor.selectionStart(), firstFramePosLessThanCursorPos); cursor.selectionStart(), QTextFrameComparator());
const QList<QTextFrame *>::ConstIterator lastFrame = std::upper_bound(children.constBegin(), children.constEnd(), const QList<QTextFrame *>::ConstIterator lastFrame = std::upper_bound(children.constBegin(), children.constEnd(),
cursor.selectionEnd(), cursorPosLessThanLastFramePos); cursor.selectionEnd(), QTextFrameComparator());
for (QList<QTextFrame *>::ConstIterator it = firstFrame; it != lastFrame; ++it) { for (QList<QTextFrame *>::ConstIterator it = firstFrame; it != lastFrame; ++it) {
if ((*it)->frameFormat().position() != QTextFrameFormat::InFlow) if ((*it)->frameFormat().position() != QTextFrameFormat::InFlow)
r |= frame->document()->documentLayout()->frameBoundingRect(*it); r |= frame->document()->documentLayout()->frameBoundingRect(*it);