aboutsummaryrefslogtreecommitdiff
path: root/reference_set.cc
diff options
context:
space:
mode:
authorEtienne Pierre-doray <etiennep@chromium.org>2018-08-13 18:49:00 +0000
committerCopybara-Service <copybara-worker@google.com>2021-07-25 20:34:45 -0700
commit8f9a9e7376eac67e03f3f2aea2c020132f9f2fe9 (patch)
tree6cca9d6c234f1bfc0d6f528e8de798fca318f064 /reference_set.cc
parente57c4e6bb4c122686c16f40e0b9d50a2e683d42b (diff)
downloadzucchini-8f9a9e7376eac67e03f3f2aea2c020132f9f2fe9.tar.gz
[Zucchini]: Remove IndirectReference.
IndirectReference brings complexity conceptually. The purpose of IndirectReference was to speed-up look-ups. Turns out that there is no significant impact on patching time when using direct references. Furthermore, this reduces coupling between TargetPool and ReferenceSet. Change-Id: Ic50dbf59e483a7fa1480c8eb37f4b1d01a53401a Reviewed-on: https://chromium-review.googlesource.com/1136578 Commit-Queue: Etienne Pierre-Doray <etiennep@chromium.org> Reviewed-by: Samuel Huang <huangs@chromium.org> Cr-Commit-Position: refs/heads/master@{#582653} NOKEYCHECK=True GitOrigin-RevId: 0434f5b4a564c6295e62a3996826f8627b8aa617
Diffstat (limited to 'reference_set.cc')
-rw-r--r--reference_set.cc31
1 files changed, 12 insertions, 19 deletions
diff --git a/reference_set.cc b/reference_set.cc
index 963e814..0179a51 100644
--- a/reference_set.cc
+++ b/reference_set.cc
@@ -16,12 +16,11 @@ namespace zucchini {
namespace {
// Returns true if |refs| is sorted by location.
-bool IsReferenceListSorted(const std::vector<IndirectReference>& refs) {
- return std::is_sorted(
- refs.begin(), refs.end(),
- [](const IndirectReference& a, const IndirectReference& b) {
- return a.location < b.location;
- });
+bool IsReferenceListSorted(const std::vector<Reference>& refs) {
+ return std::is_sorted(refs.begin(), refs.end(),
+ [](const Reference& a, const Reference& b) {
+ return a.location < b.location;
+ });
}
} // namespace
@@ -36,28 +35,22 @@ void ReferenceSet::InitReferences(ReferenceReader&& ref_reader) {
DCHECK(references_.empty());
for (auto ref = ref_reader.GetNext(); ref.has_value();
ref = ref_reader.GetNext()) {
- references_.push_back(
- {ref->location, target_pool_.KeyForOffset(ref->target)});
+ references_.push_back(*ref);
}
DCHECK(IsReferenceListSorted(references_));
}
void ReferenceSet::InitReferences(const std::vector<Reference>& refs) {
DCHECK(references_.empty());
- references_.reserve(refs.size());
- std::transform(refs.begin(), refs.end(), std::back_inserter(references_),
- [&](const Reference& ref) -> IndirectReference {
- return {ref.location, target_pool_.KeyForOffset(ref.target)};
- });
DCHECK(IsReferenceListSorted(references_));
+ references_.assign(refs.begin(), refs.end());
}
-IndirectReference ReferenceSet::at(offset_t offset) const {
- auto pos =
- std::upper_bound(references_.begin(), references_.end(), offset,
- [](offset_t offset, const IndirectReference& ref) {
- return offset < ref.location;
- });
+Reference ReferenceSet::at(offset_t offset) const {
+ auto pos = std::upper_bound(references_.begin(), references_.end(), offset,
+ [](offset_t offset, const Reference& ref) {
+ return offset < ref.location;
+ });
DCHECK(pos != references_.begin()); // Iterators.
--pos;