// Copyright 2014 PDFium Authors. All rights reserved.
|
// Use of this source code is governed by a BSD-style license that can be
|
// found in the LICENSE file.
|
|
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
|
|
#include "xfa/fgas/layout/fgas_unicode.h"
|
|
void FX_TEXTLAYOUT_PieceSort(CFX_TPOArray& tpos, int32_t iStart, int32_t iEnd) {
|
ASSERT(iStart > -1 && iStart < tpos.GetSize());
|
ASSERT(iEnd > -1 && iEnd < tpos.GetSize());
|
if (iStart >= iEnd) {
|
return;
|
}
|
int32_t i = iStart, j = iEnd;
|
FX_TPO *pCur = tpos.GetPtrAt(iStart), *pSort;
|
int32_t v = pCur->pos;
|
while (i < j) {
|
while (j > i) {
|
pSort = tpos.GetPtrAt(j);
|
if (pSort->pos < v) {
|
FX_TPO t = *pSort;
|
*pSort = *pCur;
|
*pCur = t;
|
pCur = pSort;
|
break;
|
}
|
j--;
|
}
|
while (i < j) {
|
pSort = tpos.GetPtrAt(i);
|
if (pSort->pos > v) {
|
FX_TPO t = *pSort;
|
*pSort = *pCur;
|
*pCur = t;
|
pCur = pSort;
|
break;
|
}
|
i++;
|
}
|
}
|
i--, j++;
|
if (iStart < i) {
|
FX_TEXTLAYOUT_PieceSort(tpos, iStart, i);
|
}
|
if (j < iEnd) {
|
FX_TEXTLAYOUT_PieceSort(tpos, j, iEnd);
|
}
|
}
|