| // Copyright 2016 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 |
| |
| #ifndef CORE_FPDFDOC_CPVT_WORDPLACE_H_ |
| #define CORE_FPDFDOC_CPVT_WORDPLACE_H_ |
| |
| #include "core/fxcrt/fx_system.h" |
| |
| struct CPVT_WordPlace { |
| CPVT_WordPlace() : nSecIndex(-1), nLineIndex(-1), nWordIndex(-1) {} |
| |
| CPVT_WordPlace(int32_t other_nSecIndex, |
| int32_t other_nLineIndex, |
| int32_t other_nWordIndex) |
| : nSecIndex(other_nSecIndex), |
| nLineIndex(other_nLineIndex), |
| nWordIndex(other_nWordIndex) {} |
| |
| void Reset() { |
| nSecIndex = -1; |
| nLineIndex = -1; |
| nWordIndex = -1; |
| } |
| |
| void AdvanceSection() { |
| nSecIndex++; |
| nLineIndex = 0; |
| nWordIndex = -1; |
| } |
| |
| inline bool operator==(const CPVT_WordPlace& wp) const { |
| return wp.nSecIndex == nSecIndex && wp.nLineIndex == nLineIndex && |
| wp.nWordIndex == nWordIndex; |
| } |
| inline bool operator!=(const CPVT_WordPlace& wp) const { |
| return !(*this == wp); |
| } |
| inline bool operator<(const CPVT_WordPlace& wp) const { |
| if (nSecIndex != wp.nSecIndex) |
| return nSecIndex < wp.nSecIndex; |
| if (nLineIndex != wp.nLineIndex) |
| return nLineIndex < wp.nLineIndex; |
| return nWordIndex < wp.nWordIndex; |
| } |
| inline bool operator>(const CPVT_WordPlace& wp) const { |
| if (nSecIndex != wp.nSecIndex) |
| return nSecIndex > wp.nSecIndex; |
| if (nLineIndex != wp.nLineIndex) |
| return nLineIndex > wp.nLineIndex; |
| return nWordIndex > wp.nWordIndex; |
| } |
| inline bool operator<=(const CPVT_WordPlace& wp) const { |
| return *this < wp || *this == wp; |
| } |
| inline bool operator>=(const CPVT_WordPlace& wp) const { |
| return *this > wp || *this == wp; |
| } |
| |
| inline int32_t LineCmp(const CPVT_WordPlace& wp) const { |
| if (nSecIndex != wp.nSecIndex) |
| return nSecIndex - wp.nSecIndex; |
| return nLineIndex - wp.nLineIndex; |
| } |
| |
| int32_t nSecIndex; |
| int32_t nLineIndex; |
| int32_t nWordIndex; |
| }; |
| |
| #endif // CORE_FPDFDOC_CPVT_WORDPLACE_H_ |