HIBF
1.0.0-rc.1
Loading...
Searching...
No Matches
insert_iterator.hpp
1
// SPDX-FileCopyrightText: 2006-2024, Knut Reinert & Freie Universität Berlin
2
// SPDX-FileCopyrightText: 2016-2024, Knut Reinert & MPI für molekulare Genetik
3
// SPDX-License-Identifier: BSD-3-Clause
4
5
#pragma once
6
7
#include <
cassert
>
// for assert
8
#include <
cinttypes
>
// for uint64_t
9
#include <
cstddef
>
// for ptrdiff_t
10
#include <
functional
>
// for equal_to
11
#include <
iterator
>
// for output_iterator_tag
12
#include <
memory
>
// for addressof
13
#include <
vector
>
// for vector
14
15
#include <hibf/contrib/robin_hood.hpp>
// for unordered_flat_set, hash
16
#include <
hibf/platform.hpp
>
17
18
// IWYU pragma: private, include <hibf/config.hpp>
19
20
namespace
seqan::hibf
21
{
22
23
class
insert_iterator
24
{
25
public
:
26
using
iterator_category
=
std::output_iterator_tag
;
27
using
value_type = void;
28
using
difference_type = ptrdiff_t;
29
using
pointer = void;
30
using
reference = void;
31
32
insert_iterator
() =
delete
;
33
insert_iterator
(
insert_iterator
const
&) =
default
;
34
insert_iterator
(
insert_iterator
&&) =
default
;
35
insert_iterator
& operator=(
insert_iterator
const
&) =
default
;
36
insert_iterator
& operator=(
insert_iterator
&&) =
default
;
37
~insert_iterator
() =
default
;
38
39
explicit
constexpr
insert_iterator
(robin_hood::unordered_flat_set<uint64_t> & set) :
40
set{
std::addressof
(set)},
41
is_set{
true
}
42
{}
43
44
explicit
constexpr
insert_iterator
(
std::vector<uint64_t>
& vec) : vec{
std::addressof
(vec)}, is_set{
false
}
45
{}
46
47
insert_iterator
& operator=(uint64_t
const
value)
noexcept
48
{
49
if
(is_set)
50
{
51
assert(set !=
nullptr
);
52
set->emplace(value);
53
}
54
else
55
{
56
assert(vec !=
nullptr
);
57
vec->
emplace_back
(value);
58
}
59
return
*
this
;
60
}
61
62
[[nodiscard]]
constexpr
insert_iterator
& operator*()
noexcept
63
{
64
return
*
this
;
65
}
66
67
constexpr
insert_iterator
& operator++()
noexcept
68
{
69
return
*
this
;
70
}
71
72
constexpr
insert_iterator
operator++(
int
)
noexcept
73
{
74
return
*
this
;
75
}
76
77
private
:
78
robin_hood::unordered_flat_set<uint64_t> * set{
nullptr
};
79
std::vector<uint64_t>
* vec{
nullptr
};
80
bool
is_set{
false
};
81
};
82
83
}
// namespace seqan::hibf
std::addressof
T addressof(T... args)
cassert
cinttypes
seqan::hibf::insert_iterator
Definition
insert_iterator.hpp:24
cstddef
std::vector::emplace_back
T emplace_back(T... args)
functional
iterator
std::output_iterator_tag
memory
platform.hpp
Provides platform and dependency checks.
vector
hibf
misc
insert_iterator.hpp
Generated on Thu Aug 29 2024 00:01:59 for HIBF by
1.10.0