Skip to content

Commit 4db85d2

Browse files
committed
Move transform_traits into its own file
1 parent 3e0c139 commit 4db85d2

File tree

4 files changed

+49
-33
lines changed

4 files changed

+49
-33
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ target_sources(containers PUBLIC
250250
source/containers/algorithms/splice.cpp
251251
source/containers/algorithms/transform.cpp
252252
source/containers/algorithms/transform_iterator.cpp
253+
source/containers/algorithms/transform_traits.cpp
253254
source/containers/algorithms/uninitialized.cpp
254255
source/containers/algorithms/unique.cpp
255256
source/containers/algorithms/zip.cpp

source/containers/algorithms/transform.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ module;
1010
export module containers.algorithms.transform;
1111

1212
import containers.algorithms.compare;
13+
import containers.algorithms.transform_traits;
1314
import containers.array;
1415
import containers.algorithms.transform_iterator;
1516
import containers.adapt;

source/containers/algorithms/transform_iterator.cpp

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module;
99

1010
export module containers.algorithms.transform_iterator;
1111

12+
import containers.algorithms.transform_traits;
1213
import containers.default_adapt_traits;
1314
import containers.is_iterator;
1415
import containers.iterator_adapter;
@@ -17,39 +18,6 @@ import std_module;
1718

1819
namespace containers {
1920

20-
export template<typename UnaryFunction>
21-
struct transform_traits : default_add, default_subtract, default_compare {
22-
private:
23-
[[no_unique_address]] UnaryFunction m_dereference;
24-
25-
public:
26-
constexpr explicit transform_traits(UnaryFunction dereference_):
27-
m_dereference(std::move(dereference_))
28-
{
29-
}
30-
31-
constexpr auto dereference(iterator auto const & it) const OPERATORS_RETURNS(
32-
std::invoke(m_dereference, *it)
33-
)
34-
};
35-
36-
export template<typename UnaryFunction>
37-
struct transform_traits_dereference : default_add, default_subtract, default_compare {
38-
private:
39-
[[no_unique_address]] UnaryFunction m_dereference;
40-
41-
public:
42-
constexpr explicit transform_traits_dereference(UnaryFunction dereference_):
43-
m_dereference(std::move(dereference_))
44-
{
45-
}
46-
47-
constexpr auto dereference(iterator auto const & it) const OPERATORS_RETURNS(
48-
std::invoke(m_dereference, it)
49-
)
50-
51-
};
52-
5321
export constexpr auto transform_iterator(iterator auto it, auto dereference) {
5422
return adapt_iterator(std::move(it), transform_traits(std::move(dereference)));
5523
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright David Stone 2018.
2+
// Distributed under the Boost Software License, Version 1.0.
3+
// (See accompanying file LICENSE_1_0.txt or copy at
4+
// http://www.boost.org/LICENSE_1_0.txt)
5+
6+
export module containers.algorithms.transform_traits;
7+
8+
import containers.default_adapt_traits;
9+
import containers.is_iterator;
10+
import containers.iter_reference_t;
11+
12+
import std_module;
13+
14+
namespace containers {
15+
16+
export template<typename UnaryFunction>
17+
struct transform_traits : default_add, default_subtract, default_compare {
18+
constexpr explicit transform_traits(UnaryFunction dereference_):
19+
m_dereference(std::move(dereference_))
20+
{
21+
}
22+
23+
template<iterator It> requires std::invocable<UnaryFunction const &, iter_reference_t<It>>
24+
constexpr auto dereference(It const & it) const -> decltype(auto) {
25+
return std::invoke(m_dereference, *it);
26+
}
27+
private:
28+
[[no_unique_address]] UnaryFunction m_dereference;
29+
};
30+
31+
export template<typename UnaryFunction>
32+
struct transform_traits_dereference : default_add, default_subtract, default_compare {
33+
constexpr explicit transform_traits_dereference(UnaryFunction dereference_):
34+
m_dereference(std::move(dereference_))
35+
{
36+
}
37+
38+
template<iterator It> requires std::invocable<UnaryFunction const &, It>
39+
constexpr auto dereference(It const & it) const -> decltype(auto) {
40+
return std::invoke(m_dereference, it);
41+
}
42+
private:
43+
[[no_unique_address]] UnaryFunction m_dereference;
44+
};
45+
46+
} // namespace containers

0 commit comments

Comments
 (0)