// 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_