CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
Join.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
11
12#include <iterator>
13
14namespace CeresEngine {
15
16 // compacted syntax for brevity...
17 template<typename T1, typename T2> struct JoinIterator {
18 public:
19 using iterator_category = std::forward_iterator_tag;
20 using value_type = typename std::iterator_traits<T1>::value_type;
21 using pointer = typename std::iterator_traits<T1>::pointer;
22 using reference = typename std::iterator_traits<T1>::reference;
23 using difference_type = typename std::iterator_traits<T1>::difference_type;
25
27
29 if(seq1 != seq1end) {
30 ++seq1;
31 } else {
32 ++seq2;
33 }
34 return *this;
35 }
36
38 if(seq1 != seq1end) {
39 return *seq1;
40 }
41 return *seq2;
42 }
43
45 if(seq1 != seq1end) {
46 return &(*seq1);
47 }
48 return &(*seq2);
49 }
50
51 bool operator==(const JoinIterator& rhs) const {
52 return std::tie(seq1, seq1end, seq2, seq2end) == std::tie(rhs.seq1, rhs.seq1end, rhs.seq2, rhs.seq2end);
53 }
54 bool operator!=(const JoinIterator& rhs) const { return !(*this == rhs); }
55
56 private:
61 };
62
63 template<typename Range1, typename Range2> class JoinIteratorRange {
64 private:
67
68 public:
70
71 [[nodiscard]] auto begin() const {
72 using std::begin;
73 using std::end;
75 }
76
77 [[nodiscard]] auto end() const {
78 using std::begin;
79 using std::end;
81 }
82 };
83
84 template<typename Range1, typename Range2> inline JoinIteratorRange<Range1, Range2> join(Range1& range1, Range2& range2) {
86 }
87
88 template<typename Range1, typename Range2> inline JoinIteratorRange<const Range1, const Range2> join(const Range1& range1, const Range2& range2) {
90 }
91
92 template<typename Range1, typename Range2, std::size_t L>
96
97 template<typename Range1, typename Range2, std::size_t L>
101
102 template<typename Range1, typename Other> inline auto joinWith(Range1& range1, const std::initializer_list<Other> range2) {
104 }
105
106 // template<typename Range1, typename Range2>
107 // inline JoinIteratorRange<Range1, const std::initializer_list<Range2>> join(Range1& range1, const
108 // std::initializer_list<Range2>& range2) {
109 // return JoinIteratorRange<Range1, const std::initializer_list<Range2>>(range1, range2);
110 // }
111
112 // template<typename Range1, typename Range2>
113 // inline JoinIteratorRange<const Range1, const std::initializer_list<const Range2>> join(const Range1& range1,
114 // const std::initializer_list<const Range2>& range2) {
115 // return JoinIteratorRange<const Range1, const std::initializer_list<const Range2>>(range1, range2);
116 // }
117
118} // namespace CeresEngine
Definition Join.hpp:63
Range1 & mRange1
Definition Join.hpp:65
JoinIteratorRange(Range1 &range1, Range2 &range2)
Definition Join.hpp:69
auto end() const
Definition Join.hpp:77
Range2 & mRange2
Definition Join.hpp:66
auto begin() const
Definition Join.hpp:71
Definition Application.hpp:19
auto joinWith(Range1 &range1, const std::initializer_list< Other > range2)
Definition Join.hpp:102
std::array< T, N > Array
Array is a container that encapsulates fixed size arrays.
Definition Array.hpp:17
JoinIteratorRange< Range1, Range2 > join(Range1 &range1, Range2 &range2)
Definition Join.hpp:84
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
Definition Join.hpp:17
T1 seq1end
Definition Join.hpp:58
T1 seq1
Definition Join.hpp:57
T2 seq2
Definition Join.hpp:59
reference operator*() const
Definition Join.hpp:37
JoinIterator(T1 b1, T1 e1, T2 b2, T2 e2)
Definition Join.hpp:26
typename std::iterator_traits< T1 >::pointer pointer
Definition Join.hpp:21
iterator & operator++()
Definition Join.hpp:28
bool operator==(const JoinIterator &rhs) const
Definition Join.hpp:51
typename std::iterator_traits< T1 >::difference_type difference_type
Definition Join.hpp:23
std::forward_iterator_tag iterator_category
Definition Join.hpp:19
typename std::iterator_traits< T1 >::reference reference
Definition Join.hpp:22
pointer operator->() const
Definition Join.hpp:44
T2 seq2end
Definition Join.hpp:60
bool operator!=(const JoinIterator &rhs) const
Definition Join.hpp:54
typename std::iterator_traits< T1 >::value_type value_type
Definition Join.hpp:20