mini-llvm 0.1.0
Loading...
Searching...
No Matches
SequenceOps.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <utility>
6
7namespace mini_llvm {
8
9namespace detail {
10
11template <typename S>
12concept Addable = requires (S &sequence) {
13 sequence.push_back(std::declval<typename S::value_type>());
14};
15
16template <typename S>
17 requires Addable<S>
18void add(S &sequence, typename S::value_type value) {
19 sequence.push_back(std::move(value));
20}
21
22} // namespace detail
23
24namespace sequence_ops {
25
26template <typename S>
27 requires detail::Addable<S>
28S &operator+=(S &sequence, typename S::value_type value) {
29 detail::add(sequence, std::move(value));
30 return sequence;
31}
32
33template <typename S>
34 requires detail::Addable<S>
35S operator+=(S &&sequence, typename S::value_type value) {
36 detail::add(sequence, std::move(value));
37 return std::move(sequence);
38}
39
40template <typename S>
41 requires detail::Addable<S>
42S &operator,(S &sequence, typename S::value_type value) {
43 return sequence += std::move(value);
44}
45
46template <typename S>
47 requires detail::Addable<S>
48S operator,(S &&sequence, typename S::value_type value) {
49 return std::move(sequence) += std::move(value);
50}
51
52template <typename S>
53 requires detail::Addable<S>
54S operator+(S sequence, typename S::value_type value) {
55 return std::move(sequence) += std::move(value);
56}
57
58} // namespace sequence_ops
59
60} // namespace mini_llvm
Definition SequenceOps.h:24
S & operator+=(S &sequence, typename S::value_type value)
Definition SequenceOps.h:28
S & operator,(S &sequence, typename S::value_type value)
Definition SequenceOps.h:42
S operator+(S sequence, typename S::value_type value)
Definition SequenceOps.h:54
Definition GraphColoringAllocator.h:13