rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
util
containers
fl_stack.h
Go to the documentation of this file.
1
/**
2
* @file fl_stack.h
3
* @brief Fixed-length stack
4
*
5
* @date Jul 9, 2014
6
* @author Andrey Belomutskiy, (c) 2012-2020
7
*/
8
9
#pragma once
10
11
#include "
error_handling.h
"
12
13
template
<
typename
T,
int
MAXSIZE>
14
class
FLStack
{
15
public
:
16
FLStack
();
17
void
push
(T value);
18
void
reset
();
19
T
pop
();
20
T
get
(
int
index);
21
bool
remove
(T value);
22
int
size
();
23
bool
isEmpty
();
24
private
:
25
int
currentSize
;
26
T
values
[MAXSIZE];
27
};
28
29
template
<
typename
T,
int
MAXSIZE>
30
FLStack<T, MAXSIZE>::FLStack
() {
31
reset();
32
memset(values, 0,
sizeof
(values));
33
}
34
35
template
<
typename
T,
int
MAXSIZE>
36
bool
FLStack<T, MAXSIZE>::isEmpty
() {
37
return
currentSize == 0;
38
}
39
40
template
<
typename
T,
int
MAXSIZE>
41
void
FLStack<T, MAXSIZE>::reset
() {
42
currentSize = 0;
43
}
44
45
template
<
typename
T,
int
MAXSIZE>
46
bool
FLStack<T, MAXSIZE>::remove
(T value) {
47
for
(
int
i = 0; i < currentSize; i++) {
48
if
(values[i] == value) {
49
values[0] = values[currentSize - 1];
50
currentSize--;
51
return
true
;
52
}
53
}
54
return
false
;
55
}
56
57
template
<
typename
T,
int
MAXSIZE>
58
void
FLStack<T, MAXSIZE>::push
(T value) {
59
if
(currentSize >= MAXSIZE) {
60
firmwareError
(
ObdCode::ERROR_FL_STACK_OVERFLOW
,
"FLstack overflow"
);
61
return
;
62
//warning()
63
}
64
values[currentSize++] = value;
65
}
66
67
template
<
typename
T,
int
MAXSIZE>
68
T
FLStack<T, MAXSIZE>::pop
() {
69
if
(currentSize == 0) {
70
firmwareError
(
ObdCode::CUSTOM_FLSTACK
,
"FLStack is empty"
);
71
}
72
return
values[--currentSize];
73
}
74
75
/**
76
* @return element at the specified index
77
*/
78
template
<
typename
T,
int
MAXSIZE>
79
T
FLStack<T, MAXSIZE>::get
(
int
index) {
80
efiAssert(
ObdCode::CUSTOM_ERR_ASSERT
, index >= 0 && index < MAXSIZE,
"FLget"
, values[0]);
81
return
values[index];
82
}
83
84
template
<
typename
T,
int
MAXSIZE>
85
int
FLStack<T, MAXSIZE>::size
() {
86
return
currentSize;
87
}
88
89
template
<
class
Type,
int
Dimention>
90
class
ArrayList
{
91
public
:
92
ArrayList
();
93
int
size
;
94
Type
elements
[Dimention];
95
void
reset
(
void
);
96
Type *
add
(
void
);
97
void
removeAt
(
int
index);
98
};
99
100
template
<
class
Type,
int
Dimention>
101
ArrayList<Type, Dimention>::ArrayList
(
void
) {
102
memset(&elements, 0,
sizeof
(elements));
103
reset();
104
}
105
106
template
<
class
Type,
int
Dimention>
107
void
ArrayList<Type, Dimention>::removeAt
(
int
index) {
108
efiAssertVoid(
ObdCode::CUSTOM_ERR_ARRAY_REMOVE
, index >= 0 && index <
size
,
"invalid index"
);
109
memcpy(&elements[index], &elements[
size
- 1],
sizeof
(Type));
110
memset(&elements[
size
- 1], 0,
sizeof
(Type));
111
size
--;
112
}
113
114
template
<
class
Type,
int
Dimention>
115
void
ArrayList<Type, Dimention>::reset
(
void
) {
116
size
= 0;
117
}
118
119
template
<
class
Type,
int
Dimention>
120
Type *
ArrayList<Type, Dimention>::add
(
void
) {
121
efiAssert(
ObdCode::CUSTOM_ERR_ASSERT
,
size
< Dimention,
"add() too many elements"
, (Type *)NULL);
122
return
&elements[
size
++];
123
}
ArrayList
Definition
fl_stack.h:90
ArrayList::reset
void reset(void)
Definition
fl_stack.h:115
ArrayList::ArrayList
ArrayList()
Definition
fl_stack.h:101
ArrayList::size
int size
Definition
fl_stack.h:93
ArrayList::add
Type * add(void)
Definition
fl_stack.h:120
ArrayList::removeAt
void removeAt(int index)
Definition
fl_stack.h:107
ArrayList::elements
Type elements[Dimention]
Definition
fl_stack.h:94
FLStack
Definition
fl_stack.h:14
FLStack::values
T values[MAXSIZE]
Definition
fl_stack.h:26
FLStack::currentSize
int currentSize
Definition
fl_stack.h:25
FLStack::size
int size()
Definition
fl_stack.h:85
FLStack::isEmpty
bool isEmpty()
Definition
fl_stack.h:36
FLStack::push
void push(T value)
Definition
fl_stack.h:58
FLStack::pop
T pop()
Definition
fl_stack.h:68
FLStack::reset
void reset()
Definition
fl_stack.h:41
FLStack::get
T get(int index)
Definition
fl_stack.h:79
FLStack::FLStack
FLStack()
Definition
fl_stack.h:30
FLStack::remove
bool remove(T value)
Definition
fl_stack.h:46
firmwareError
void firmwareError(ObdCode code, const char *fmt,...)
Definition
error_handling.cpp:670
error_handling.h
ObdCode::CUSTOM_FLSTACK
@ CUSTOM_FLSTACK
ObdCode::ERROR_FL_STACK_OVERFLOW
@ ERROR_FL_STACK_OVERFLOW
ObdCode::CUSTOM_ERR_ASSERT
@ CUSTOM_ERR_ASSERT
ObdCode::CUSTOM_ERR_ARRAY_REMOVE
@ CUSTOM_ERR_ARRAY_REMOVE
size
composite packet size
Definition
tooth_logger.cpp:23
Generated on Sat Sep 27 2025 00:10:07 for rusEFI by
1.9.8