| // 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); |
| } |
| } |