Skip to content

Commit eae9a75

Browse files
committed
add fast flat map feature
1 parent 9dd66d1 commit eae9a75

13 files changed

Lines changed: 892 additions & 379 deletions

src/array19.lib/array19/Zip.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,16 @@ template<class A, class B> struct Zip {
3737
};
3838

3939
constexpr Zip() = default;
40-
constexpr explicit Zip(A& a, B& b) : a(&a), b(&b) {}
40+
constexpr explicit Zip(A&& a, B&& b) : a{(A &&) a}, b{(B &&) b} {}
4141

42-
constexpr auto begin() const -> iterator { return {adlBegin(*a), adlBegin(*b)}; }
43-
constexpr auto end() const -> iterator { return {adlEnd(*a), adlEnd(*b)}; }
42+
constexpr auto begin() const -> iterator { return {adlBegin(a), adlBegin(b)}; }
43+
constexpr auto end() const -> iterator { return {adlEnd(a), adlEnd(b)}; }
4444

4545
private:
46-
A* a{};
47-
B* b{};
46+
A&& a{};
47+
B&& b{};
4848
};
4949

50-
template<class A, class B> Zip(A&, B&) -> Zip<A, B>;
50+
template<class A, class B> Zip(A&&, B&&) -> Zip<A, B>;
5151

5252
} // namespace array19

src/array19.lib/array19/adlRange.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33

44
namespace array19 {
55

6-
template<class T> constexpr auto adlBegin(T& v) {
6+
template<class T> constexpr auto adlBegin(T&& v) {
77
using std::begin;
88
return begin(v);
99
}
10-
template<class T> constexpr auto adlEnd(T& v) {
10+
template<class T> constexpr auto adlEnd(T&& v) {
1111
using std::end;
1212
return end(v);
1313
}
1414

15-
} // namespace array19
15+
} // namespace array19

src/array19.lib/array19/array19.qbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Product {
1515
"AllocatedArrayUtils.h",
1616
"Array.h",
1717
"Array.ostream.h",
18-
"DynamicArrayOf.AsHex.ostream.h",
18+
"DynamicArray.AsHex.ostream.h",
1919
"DynamicArray.equals.h",
2020
"DynamicArray.h",
2121
"DynamicArray.ostream.h",
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#pragma once
2+
#include "OrderedMapArray.h"
3+
#include "array19/Span.equals.h"
4+
5+
namespace lookup19 {
6+
7+
template<class Key, class Value, class Less>
8+
bool operator==(const OrderedMapArray<Key, Value, Less>& a, const OrderedMapArray<Key, Value, Less>& b) {
9+
return a.keys() == b.keys() && a.values() == b.values();
10+
}
11+
12+
} // namespace lookup19

0 commit comments

Comments
 (0)