8000 Minor improvements · arangodb/arangodb@c4c19fc · GitHub
[go: up one dir, main page]

Skip to content

Commit c4c19fc

Browse files
committed
Minor improvements
1 parent 1e508b9 commit c4c19fc

File tree

2 files changed

+26
-31
lines changed

2 files changed

+26
-31
lines changed

arangod/Zkd/ZkdHelper.cpp

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#include "ZkdHelper.h"
22

3-
#include <Basics/debugging.h>
3+
#include "Basics/ScopeGuard.h"
4+
#include "Basics/debugging.h"
5+
#include "Containers/SmallVector.h"
6+
47
#include <algorithm>
58
#include <cassert>
69
#include <cmath>
@@ -145,7 +148,7 @@ auto zkd::ByteReader::next() -> std::optional<std::byte> {
145148

146149
void zkd::BitWriter::append(Bit bit) {
147150
if (bit == Bit::ONE) {
148-
_value |= std::byte{1} << (7u - _nibble);
151+
_value |= std::byte{1} << (7U - _nibble);
149152
}
150153
_nibble += 1;
151154
if (_nibble == 8) {
@@ -271,9 +274,6 @@ auto zkd::transpose(byte_string_view bs, std::size_t dimensions) -> std::vector<
271274
return result;
272275
}
273276

274-
275-
constexpr std::size_t max_dimensions = 64;
276-
277277
auto zkd::compareWithBox(byte_string_view cur, byte_string_view min, byte_string_view max, std::size_t dimensions)
278278
-> std::vector<CompareResult> {
279279
if (dimensions == 0) {
@@ -299,8 +299,12 @@ void zkd::compareWithBoxInto(byte_string_view cur, byte_string_view min, byte_st
299299
BitReader min_reader(min);
300300
BitReader max_reader(max);
301301

302-
bool isLargerThanMin[max_dimensions] = {};
303-
bool isLowerThanMax[max_dimensions] = {};
302+
auto const isLargerThanMin = [&result](auto const dim) {
303+
return result[dim].saveMin != CompareResult::max;
304+
};
305+
auto const isLowerThanMax = [&result](auto const dim) {
306+
return result[dim].saveMax != CompareResult::max;
307+
};
304308

305309
unsigned step = 0;
306310
unsigned dim = 0;
@@ -315,22 +319,20 @@ void zkd::compareWithBoxInto(byte_string_view cur, byte_string_view min, byte_st
315319
continue;
316320
}
317321

318-
if (!isLargerThanMin[dim]) {
322+
if (!isLargerThanMin(dim)) {
319323
if (cur_bit == Bit::ZERO && min_bit == Bit::ONE) {
320324
result[dim].outStep = step;
321325
result[dim].flag = -1;
322326
} else if (cur_bit == Bit::ONE && min_bit == Bit::ZERO) {
323-
isLargerThanMin[dim] = true;
324327
result[dim].saveMin = step;
325328
}
326329
}
327330

328-
if (!isLowerThanMax[dim]) {
331+
if (!isLowerThanMax(dim)) {
329332
if (cur_bit == Bit::ONE && max_bit == Bit::ZERO) {
330333
result[dim].outStep = step;
331334
result[dim].flag = 1;
332335
} else if (cur_bit == Bit::ZERO && max_bit == Bit::ONE) {
333-
isLowerThanMax[dim] = true;
334336
result[dim].saveMax = step;
335337
}
336338
}
@@ -347,7 +349,7 @@ void zkd::compareWithBoxInto(byte_string_view cur, byte_string_view min, byte_st
347349
auto zkd::testInBox(byte_string_view cur, byte_string_view min, byte_string_view max, std::size_t dimensions)
348350
-> bool {
349351

350-
if (dimensions == 0 && dimensions <= max_dimensions) {
352+
if (dimensions == 0) {
351353
auto msg = std::string{"dimensions argument to "};
352354
msg += __func__;
353355
msg += " must be greater than zero.";
@@ -360,8 +362,16 @@ auto zkd::testInBox(byte_string_view cur, byte_string_view min, byte_string_view
360362
BitReader min_reader(min);
361363
BitReader max_reader(max);
362364

363-
bool isLargerThanMin[max_dimensions] = {};
364-
bool isLowerThanMax[max_dimensions] = {};
365+
using allocator_type = containers::detail::short_alloc<bool, 64, alignof(bool)>;
366+
allocator_type::arena_type arena;
367+
auto allocator = allocator_type{arena};
368+
auto const boolArraySize = sizeof(bool) * dimensions;
369+
auto* const isLargerThanMin = allocator.allocate(boolArraySize);
370+
TRI_DEFER(arena.deallocate((char*)isLargerThanMin, dimensions));
371+
auto* const isLowerThanMax = allocator.allocate(boolArraySize);
372+
TRI_DEFER(arena.deallocate((char*)isLowerThanMax, dimensions));
373+
std::fill_n(isLargerThanMin, dimensions, false);
374+
std::fill_n(isLowerThanMax, dimensions, false);
365375

366376
unsigned dim = 0;
367377
unsigned finished_dims = 2 * dimensions;

arangod/Zkd/ZkdHelper.h

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,7 @@ namespace arangodb::zkd {
1313
inline static std::byte operator"" _b(unsigned long long b) {
1414
return std::byte{(unsigned char)b};
1515
}
16-
/*
17-
struct byte_string : public std::basic_string<std::byte> {
18-
using std::basic_string<std::byte>::basic_string;
19-
using std::basic_string<std::byte>::operator=;
20-
21-
//byte_string(std::basic_string<std::byte> str) : std::basic_string<std::byte>(std::move(str)) {}
22-
23-
template<typename T>
24-
auto operator+(T&& other) -> byte_string {
25-
return byte_string(static_cast<std::basic_string<std::byte>&>(*this) + std::forward<T>(other));
26-
}
27-
28-
auto as_string_view() const -> std::string_view {
29-
return std::string_view(reinterpret_cast<const char *>(data()), size());
30-
}
31-
};*/
16+
3217
using byte_string = std::basic_string<std::byte>;
3318
using byte_string_view = std::basic_string_view<std::byte>;
3419

@@ -38,7 +23,7 @@ byte_string operator"" _bss(const char* str, std::size_t len);
3823
auto interleave(std::vector<byte_string> const& vec) -> byte_string;
3924
auto transpose(byte_string_view bs, std::size_t dimensions) -> std::vector<byte_string>;
4025

41-
struct CompareResult {
26+
struct alignas(32) CompareResult {
4227
static constexpr auto max = std::numeric_limits<std::size_t>::max();
4328

4429
signed flag = 0;

0 commit comments

Comments
 (0)
0