summaryrefslogtreecommitdiff
path: root/core/fpdfdoc/cpvt_wordplace.h
blob: c0a1a9cd5c393b6b21595ba37565897bc172938f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// 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_