NuriKit
v0.1.0b2
Toggle main menu visibility
Loading...
Searching...
No Matches
include
nuri
core
container
linear_queue.h
Go to the documentation of this file.
1
//
2
// Project NuriKit - Copyright 2025 SNU Compbio Lab.
3
// SPDX-License-Identifier: Apache-2.0
4
//
5
6
#ifndef NURI_CORE_CONTAINER_LINEAR_QUEUE_H_
7
#define NURI_CORE_CONTAINER_LINEAR_QUEUE_H_
8
10
#include <utility>
11
12
#include <absl/log/absl_check.h>
14
15
namespace
nuri
{
16
namespace
internal {
17
template
<
class
C>
18
class
LinearQueue {
19
public
:
20
using
value_type =
typename
C::value_type;
21
22
explicit
LinearQueue(C &&container) noexcept
23
: container_(std::move(container)) {
24
clear();
25
}
26
27
bool
empty()
const
{
return
lp_ >= rp_; }
28
29
int
size()
const
{
return
rp_ - lp_; }
30
31
auto
capacity()
const
{
return
container_.size(); }
32
33
value_type &front() {
34
ABSL_DCHECK_LT(lp_, rp_);
35
return
container_[lp_];
36
}
37
38
const
value_type &front()
const
{
39
ABSL_DCHECK_LT(lp_, rp_);
40
return
container_[lp_];
41
}
42
43
value_type &back() {
44
ABSL_DCHECK_LT(lp_, rp_);
45
return
container_[rp_ - 1];
46
}
47
48
const
value_type &back()
const
{
49
ABSL_DCHECK_LT(lp_, rp_);
50
return
container_[rp_ - 1];
51
}
52
53
void
push(
const
value_type &v) {
54
ABSL_DCHECK_LT(rp_, capacity());
55
container_[rp_++] = v;
56
}
57
58
void
push(value_type &&v) {
59
ABSL_DCHECK_LT(rp_, capacity());
60
container_[rp_++] = std::move(v);
61
}
62
63
value_type pop() {
64
ABSL_DCHECK_LT(lp_, rp_);
65
return
std::move(container_[lp_++]);
66
}
67
68
void
clear() noexcept { lp_ = rp_ = 0; }
69
70
C &container() {
return
container_; }
71
const
C &container()
const
{
return
container_; }
72
73
private
:
74
C container_;
75
int
lp_;
76
int
rp_;
77
};
78
79
template
<
class
C>
80
LinearQueue(C &&container) -> LinearQueue<C>;
81
82
template
<
class
C>
83
LinearQueue(
const
LinearQueue<C> &) -> LinearQueue<C>;
84
85
template
<
class
C>
86
LinearQueue(LinearQueue<C> &&) -> LinearQueue<C>;
87
}
// namespace internal
88
}
// namespace nuri
89
90
#endif
/* NURI_CORE_CONTAINER_LINEAR_QUEUE_H_ */
nuri
Definition
crdgen.h:16
Generated by
1.17.0