Skip to content

Commit

Permalink
In the middle of a review....
Browse files Browse the repository at this point in the history
  • Loading branch information
joka921 committed Jul 11, 2024
1 parent aa2bfad commit 62a0800
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 30 deletions.
18 changes: 10 additions & 8 deletions src/engine/LocalVocab.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,18 @@ std::vector<LocalVocab::LiteralOrIri> LocalVocab::getAllWordsForTesting()

// TODO<joka921> Consider moving the cheap case (if precomputed) into the
// header.
auto LocalVocabEntry::lowerBoundInIndex() const -> BoundsInIndex {
auto LocalVocabEntry::positionInVocab() const -> PositionInVocab {
if (positionInVocabKnown) {
return {lowerBoundInIndex_, upperBoundInIndex_};
return {lowerBoundInVocab_, upperBoundInVocab_};
}
const IndexImpl& index = IndexImpl::staticGlobalSingletonIndex();
BoundsInIndex result;
PositionInVocab positionInVocab;
const auto& vocab = index.getVocab();
result.lowerBound_ = vocab.lower_bound_external(toStringRepresentation());
result.upperBound_ = vocab.upper_bound_external(toStringRepresentation());
lowerBoundInIndex_ = result.lowerBound_;
upperBoundInIndex_ = result.upperBound_;
return result;
positionInVocab.lowerBound_ =
vocab.lower_bound_external(toStringRepresentation());
positionInVocab.upperBound_ =
vocab.upper_bound_external(toStringRepresentation());
lowerBoundInVocab_ = positionInVocab.lowerBound_;
upperBoundInVocab_ = positionInVocab.upperBound_;
return positionInVocab;
}
10 changes: 0 additions & 10 deletions src/engine/sparqlExpressions/RelationalExpressionHelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -145,16 +145,6 @@ auto makeValueId(const S& value, const EvaluationContext* context) {
auto visitor = [context](const auto& x) {
auto res = makeValueId(x, context);
return res;
/*
if constexpr (ad_utility::isSimilar<decltype(res), Id>) {
// We need the same return type on all cases when visiting a variant, so
// we need to return a pair here. As the second element is an upper
// bound, we have to increment it by one.
return std::pair{res, ValueId::fromBits(res.getBits() + 1)};
} else {
return res;
}
*/
};
return std::visit(visitor, value);

Expand Down
8 changes: 4 additions & 4 deletions src/global/IndexTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,17 @@ class alignas(16) LocalVocabEntry
: public ad_utility::triple_component::LiteralOrIri {
private:
using Base = ad_utility::triple_component::LiteralOrIri;
mutable CopyableAtomic<VocabIndex> lowerBoundInIndex_;
mutable CopyableAtomic<VocabIndex> upperBoundInIndex_;
mutable CopyableAtomic<VocabIndex> lowerBoundInVocab_;
mutable CopyableAtomic<VocabIndex> upperBoundInVocab_;
mutable CopyableAtomic<bool> positionInVocabKnown = false;

public:
struct BoundsInIndex {
struct PositionInVocab {
VocabIndex lowerBound_;
VocabIndex upperBound_;
};
using Base::Base;
BoundsInIndex lowerBoundInIndex() const;
PositionInVocab positionInVocab() const;

LocalVocabEntry(const Base& base) : Base{base} {}
LocalVocabEntry(Base&& base) noexcept : Base{std::move(base)} {}
Expand Down
7 changes: 4 additions & 3 deletions src/global/ValueId.h
Original file line number Diff line number Diff line change
Expand Up @@ -145,9 +145,10 @@ class ValueId {
if (type == LocalVocabIndex && otherType == LocalVocabIndex) [[unlikely]] {
return *getLocalVocabIndex() <=> *other.getLocalVocabIndex();
}
auto compareVocabAndLocalVocab = [](::VocabIndex vocabIndex,
::LocalVocabIndex localVocabIndex) {
auto [lowerBound, upperBound] = localVocabIndex->lowerBoundInIndex();
auto compareVocabAndLocalVocab =
[](::VocabIndex vocabIndex,
::LocalVocabIndex localVocabIndex) -> std::strong_ordering {
auto [lowerBound, upperBound] = localVocabIndex->positionInVocab();
if (vocabIndex < lowerBound) {
return std::strong_ordering::less;
} else if (vocabIndex >= upperBound) {
Expand Down
11 changes: 6 additions & 5 deletions src/global/ValueIdComparators.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ inline std::pair<RandomIt, RandomIt> getRangeForDatatype(RandomIt begin,
if (ad_utility::contains(
std::array{Datatype::LocalVocabIndex, Datatype::VocabIndex},
datatype)) {
// TODO<joka921> This doesn't work....
auto lower_bound =
std::lower_bound(begin, end, Datatype::VocabIndex, comparator);
auto upper_bound =
Expand Down Expand Up @@ -426,11 +427,11 @@ inline std::vector<std::pair<RandomIt, RandomIt>> getRangesForEqualIds(
AD_CONTRACT_CHECK(valueIdBegin <= valueIdEnd);
// This lambda enforces the invariants `non-empty` and `sorted` and also
// merges directly adjacent ranges.
auto typeA = valueIdBegin.getDatatype();
auto typeB = valueIdEnd.getDatatype();
AD_CONTRACT_CHECK(typeA == typeB ||
(ad_utility::contains(Id::stringTypes_, typeA) &&
ad_utility::contains(Id::stringTypes_, typeB)));
auto typeBegin = valueIdBegin.getDatatype();
auto typeEnd = valueIdEnd.getDatatype();
AD_CONTRACT_CHECK(typeBegin == typeEnd ||
(ad_utility::contains(Id::stringTypes_, typeBegin) &&
ad_utility::contains(Id::stringTypes_, typeEnd)));
switch (valueIdBegin.getDatatype()) {
case Datatype::Double:
case Datatype::Int:
Expand Down

0 comments on commit 62a0800

Please sign in to comment.