Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include "spellcheckcontext.hxx"
11 :
12 : namespace sc {
13 :
14 12972 : size_t SpellCheckContext::CellPos::Hash::operator() (const CellPos& rPos) const
15 : {
16 12972 : size_t nVal = rPos.mnCol;
17 12972 : nVal = nVal << 4;
18 12972 : nVal += rPos.mnRow;
19 12972 : return nVal;
20 : }
21 :
22 348 : SpellCheckContext::CellPos::CellPos() : mnCol(0), mnRow(0) {}
23 12972 : SpellCheckContext::CellPos::CellPos(SCCOL nCol, SCROW nRow) : mnCol(nCol), mnRow(nRow) {}
24 :
25 376 : void SpellCheckContext::CellPos::setInvalid()
26 : {
27 376 : mnCol = -1;
28 376 : mnRow = -1;
29 376 : }
30 :
31 2219 : bool SpellCheckContext::CellPos::isValid() const
32 : {
33 2219 : return mnCol >= 0 && mnRow >= 0;
34 : }
35 :
36 1368 : void SpellCheckContext::CellPos::reset()
37 : {
38 1368 : mnCol = 0;
39 1368 : mnRow = 0;
40 1368 : }
41 :
42 0 : bool SpellCheckContext::CellPos::operator< (const CellPos& r) const
43 : {
44 0 : if (mnCol != r.mnCol)
45 0 : return mnCol < r.mnCol;
46 :
47 0 : return mnRow < r.mnRow;
48 : }
49 :
50 149 : bool SpellCheckContext::CellPos::operator== (const CellPos& r) const
51 : {
52 149 : return mnCol == r.mnCol && mnRow == r.mnRow;
53 : }
54 :
55 348 : SpellCheckContext::SpellCheckContext()
56 : {
57 348 : }
58 :
59 11888 : bool SpellCheckContext::isMisspelled( SCCOL nCol, SCROW nRow ) const
60 : {
61 11888 : return maMisspellCells.count(CellPos(nCol, nRow)) > 0;
62 : }
63 :
64 1079 : const std::vector<editeng::MisspellRanges>* SpellCheckContext::getMisspellRanges(
65 : SCCOL nCol, SCROW nRow ) const
66 : {
67 1079 : CellMapType::const_iterator it = maMisspellCells.find(CellPos(nCol,nRow));
68 1079 : if (it == maMisspellCells.end())
69 931 : return NULL;
70 :
71 148 : return &it->second;
72 : }
73 :
74 0 : void SpellCheckContext::setMisspellRanges(
75 : SCCOL nCol, SCROW nRow, const std::vector<editeng::MisspellRanges>* pRanges )
76 : {
77 0 : CellPos aPos(nCol, nRow);
78 0 : CellMapType::iterator it = maMisspellCells.find(aPos);
79 :
80 0 : if (pRanges)
81 : {
82 0 : if (it == maMisspellCells.end())
83 0 : maMisspellCells.insert(CellMapType::value_type(aPos, *pRanges));
84 : else
85 0 : it->second = *pRanges;
86 : }
87 : else
88 : {
89 0 : if (it != maMisspellCells.end())
90 0 : maMisspellCells.erase(it);
91 : }
92 0 : }
93 :
94 1368 : void SpellCheckContext::reset()
95 : {
96 1368 : maPos.reset();
97 1368 : maMisspellCells.clear();
98 1368 : }
99 :
100 : }
101 :
102 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|