Toolbox
snapshot
The Reactive C++ Toolbox
Loading...
Searching...
No Matches
toolbox
util
StreamInserter.hpp
Go to the documentation of this file.
1
// The Reactive C++ Toolbox.
2
// Copyright (C) 2022 Reactive Markets Limited
3
//
4
// Licensed under the Apache License, Version 2.0 (the "License");
5
// you may not use this file except in compliance with the License.
6
// You may obtain a copy of the License at
7
//
8
// http://www.apache.org/licenses/LICENSE-2.0
9
//
10
// Unless required by applicable law or agreed to in writing, software
11
// distributed under the License is distributed on an "AS IS" BASIS,
12
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
// See the License for the specific language governing permissions and
14
// limitations under the License.
15
16
#ifndef TOOLBOX_UTIL_STREAMINSERTER_HPP
17
#define TOOLBOX_UTIL_STREAMINSERTER_HPP
18
19
#include <utility>
20
21
namespace
toolbox
{
22
inline
namespace
util {
23
27
// clang-format off
28
template
<
typename
OStreamT,
typename
FnT>
29
requires
std::invocable<FnT, OStreamT&>
30
// clang-format on
31
class
StreamInserter
{
32
friend
OStreamT
&
operator<<
(
OStreamT
& os,
const
StreamInserter
&
si
)
33
{
34
si
.fn_(os);
35
return
os;
36
}
37
38
public
:
39
explicit
StreamInserter
(
FnT
fn)
40
: fn_{
std
::
move
(fn)}
41
{
42
}
43
~StreamInserter
() =
default
;
44
45
// Copy.
46
StreamInserter
(
const
StreamInserter
&) =
delete
;
47
StreamInserter
&
operator=
(
const
StreamInserter
&) =
delete
;
48
49
// Move.
50
StreamInserter
(
StreamInserter
&&)
noexcept
=
default
;
51
StreamInserter
&
operator
=(
StreamInserter
&&)
noexcept
=
delete
;
52
53
private
:
54
FnT
fn_;
55
};
56
58
template
<
typename
OStreamT
,
typename
FnT
>
59
auto
make_stream_inserter
(
FnT
fn)
60
{
61
return
StreamInserter<OStreamT, FnT>
{std::move(fn)};
62
}
63
64
}
// namespace util
65
}
// namespace toolbox
66
67
#endif
// TOOLBOX_UTIL_STREAMINSERTER_HPP
toolbox::StreamInserter
Definition
StreamInserter.hpp:31
toolbox::util::StreamInserter::StreamInserter
StreamInserter(StreamInserter &&) noexcept=default
toolbox::util::StreamInserter::operator<<
friend OStreamT & operator<<(OStreamT &os, const StreamInserter &si)
Definition
StreamInserter.hpp:32
toolbox::util::StreamInserter::StreamInserter
StreamInserter(const StreamInserter &)=delete
toolbox::util::StreamInserter::~StreamInserter
~StreamInserter()=default
toolbox::util::StreamInserter::operator=
StreamInserter & operator=(const StreamInserter &)=delete
toolbox::util::StreamInserter::StreamInserter
StreamInserter(FnT fn)
Definition
StreamInserter.hpp:39
std
STL namespace.
toolbox::util::make_stream_inserter
auto make_stream_inserter(FnT fn)
Returns a StreamInserter object, automatically deducing functor type from arguments.
Definition
StreamInserter.hpp:59
toolbox::util::bind
constexpr auto bind() noexcept
Definition
Slot.hpp:92
toolbox
Definition
Benchmark.cpp:26
Generated by
1.9.8