RapidFuzz
Toggle main menu visibility
Loading...
Searching...
No Matches
SplittedSentenceView.hpp
1
#pragma once
2
#include <algorithm>
3
#include <rapidfuzz/details/Range.hpp>
4
#include <rapidfuzz/details/type_traits.hpp>
5
6
namespace
rapidfuzz {
7
namespace
detail {
8
9
template
<
typename
InputIt>
10
class
SplittedSentenceView {
11
public
:
12
using
CharT = iter_value_t<InputIt>;
13
14
SplittedSentenceView(RangeVec<InputIt> sentence)
noexcept
(
15
std::is_nothrow_move_constructible<RangeVec<InputIt>>::value)
16
: m_sentence(std::move(sentence))
17
{}
18
19
size_t
dedupe();
20
size_t
size()
const
;
21
22
size_t
length()
const
23
{
24
return
size();
25
}
26
27
bool
empty()
const
28
{
29
return
m_sentence.empty();
30
}
31
32
size_t
word_count()
const
33
{
34
return
m_sentence.size();
35
}
36
37
std::vector<CharT> join()
const
;
38
39
const
RangeVec<InputIt>& words()
const
40
{
41
return
m_sentence;
42
}
43
44
private
:
45
RangeVec<InputIt> m_sentence;
46
};
47
48
template
<
typename
InputIt>
49
size_t
SplittedSentenceView<InputIt>::dedupe()
50
{
51
size_t
old_word_count = word_count();
52
m_sentence.erase(std::unique(m_sentence.begin(), m_sentence.end()), m_sentence.end());
53
return
old_word_count - word_count();
54
}
55
56
template
<
typename
InputIt>
57
size_t
SplittedSentenceView<InputIt>::size()
const
58
{
59
if
(m_sentence.empty())
return
0;
60
61
// there is a whitespace between each word
62
size_t
result = m_sentence.size() - 1;
63
for
(
const
auto
& word : m_sentence) {
64
result +=
static_cast<
size_t
>
(std::distance(word.begin(), word.end()));
65
}
66
67
return
result;
68
}
69
70
template
<
typename
InputIt>
71
auto
SplittedSentenceView<InputIt>::join() const -> std::vector<CharT>
72
{
73
if
(m_sentence.empty()) {
74
return
std::vector<CharT>();
75
}
76
77
auto
sentence_iter = m_sentence.begin();
78
std::vector<CharT> joined(sentence_iter->begin(), sentence_iter->end());
79
++sentence_iter;
80
for
(; sentence_iter != m_sentence.end(); ++sentence_iter) {
81
joined.push_back(0x20);
82
joined.insert(joined.end(), sentence_iter->begin(), sentence_iter->end());
83
}
84
return
joined;
85
}
86
87
}
// namespace detail
88
}
// namespace rapidfuzz
rapidfuzz
details
SplittedSentenceView.hpp
Generated by
1.17.0