Euphoria
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
libs
core
src
core
last_n.h
Go to the documentation of this file.
1
#pragma once
2
3
4
5
#include "
assert/assert.h
"
6
#include "
base/cint.h
"
7
8
namespace
eu::core
9
{
10
// stores the "last N" values of some type, where N is configurable
11
template
<
typename
T>
12
struct
LastN
13
{
14
std::vector<T>
d
;
15
std::size_t
max
;
16
17
explicit
LastN
(std::size_t s) :
max
(
s
) {}
18
19
void
20
push
(
const
T& t)
21
{
22
if
(
d
.size() ==
max
)
23
{
24
d
.erase(
d
.begin());
25
}
26
d
.push_back(
t
);
27
}
28
29
[[nodiscard]]
const
T*
30
data
()
const
31
{
32
ASSERT
(!
d
.empty());
33
return
d
.data();
34
}
35
36
[[nodiscard]]
int
37
size
()
const
38
{
39
return
c_sizet_to_int
(
d
.size());
40
}
41
};
42
}
43
assert.h
ASSERT
#define ASSERT(x)
Definition:
assert.h:29
cint.h
eu::core
Definition:
argparse.cc:45
eu::core::Key::s
@ s
eu::core::Key::t
@ t
eu::c_sizet_to_int
int c_sizet_to_int(size_t t)
Definition:
cint.cc:11
eu::core::LastN
Definition:
last_n.h:13
eu::core::LastN::max
std::size_t max
Definition:
last_n.h:15
eu::core::LastN::data
const T * data() const
Definition:
last_n.h:30
eu::core::LastN::size
int size() const
Definition:
last_n.h:37
eu::core::LastN::d
std::vector< T > d
Definition:
last_n.h:14
eu::core::LastN::push
void push(const T &t)
Definition:
last_n.h:20
eu::core::LastN::LastN
LastN(std::size_t s)
Definition:
last_n.h:17