File tree Expand file tree Collapse file tree 1 file changed +27
-2
lines changed Expand file tree Collapse file tree 1 file changed +27
-2
lines changed Original file line number Diff line number Diff line change 5
5
#define FTXUI_DOM_TAKE_ANY_ARGS_HPP
6
6
7
7
// IWYU pragma: private, include "ftxui/dom/elements.hpp"
8
+ #include < concepts>
8
9
#include < ftxui/dom/node.hpp>
10
+ #include < queue>
11
+ #include < ranges>
12
+ #include < stack>
9
13
10
14
namespace ftxui {
11
15
@@ -17,13 +21,34 @@ inline void Merge(Elements& container, Element element) {
17
21
container.push_back (std::move (element));
18
22
}
19
23
20
- template <>
21
- inline void Merge (Elements& container, Elements elements) {
24
+ template <class Container >
25
+ concept ElementRange =
26
+ std::ranges::range<Container> &&
27
+ std::same_as<std::ranges::range_value_t <Container>, Element>;
28
+
29
+ template <ElementRange T>
30
+ inline void Merge (Elements& container, T elements) {
22
31
for (auto & element : elements) {
23
32
container.push_back (std::move (element));
24
33
}
25
34
}
26
35
36
+ template <>
37
+ inline void Merge (Elements& container, std::stack<Element> elements) {
38
+ while (!elements.empty ()) {
39
+ container.push_back (std::move (elements.top ()));
40
+ elements.pop ();
41
+ }
42
+ }
43
+
44
+ template <>
45
+ inline void Merge (Elements& container, std::queue<Element> elements) {
46
+ while (!elements.empty ()) {
47
+ container.push_back (std::move (elements.back ()));
48
+ elements.pop ();
49
+ }
50
+ }
51
+
27
52
// Turn a set of arguments into a vector.
28
53
template <class ... Args>
29
54
Elements unpack (Args... args) {
You can’t perform that action at this time.
0 commit comments