forked from facebook/hermes
-
Notifications
You must be signed in to change notification settings - Fork 0
/
StringKind.cpp
37 lines (31 loc) · 943 Bytes
/
StringKind.cpp
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
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the LICENSE
* file in the root directory of this source tree.
*/
#include "hermes/Support/StringKind.h"
namespace hermes {
StringKind::Entry::Entry(StringKind::Kind kind, uint32_t count)
: datum_{kind | count} {
assert((kind & MaxCount) == 0 && "kind overlapping with count storage.");
assert(1 <= count && count <= MaxCount && "Count out of bounds");
}
StringKind::Entry &StringKind::Entry::operator++() {
assert(count() < MaxCount && "Count Overflow");
datum_++;
return *this;
}
void StringKind::Accumulator::push_back(Kind k) {
if (LLVM_UNLIKELY(entries_.empty())) {
entries_.emplace_back(k);
return;
}
auto &back = entries_.back();
if (back.kind() != k || LLVM_UNLIKELY(back.count() >= MaxCount)) {
entries_.emplace_back(k);
} else {
++back;
}
}
} // namespace hermes