* initial checkin of last in first out array queue (lifo)
This commit is contained in:
parent
8de4898694
commit
d5ff633d07
|
@ -27,8 +27,8 @@
|
|||
|
||||
SubDir TOP core ;
|
||||
|
||||
Module core : kernel_init.c sched.c mutex.c msg.c queue.c
|
||||
clist.c thread.c bitarithm.c cib.c ;
|
||||
Module core : kernel_init.c sched.c mutex.c msg.c thread.c : core_lib ;
|
||||
Module core_lib : queue.c clist.c bitarithm.c cib.c lifo.c ;
|
||||
|
||||
Module hwtimer : hwtimer.c : hwtimer_cpu ;
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
#ifndef __LIFO_H
|
||||
#define __LIFO_H
|
||||
|
||||
int lifo_empty(int *array);
|
||||
void lifo_init(int *array, int n);
|
||||
void lifo_insert(int *array, int i);
|
||||
int lifo_get(int *array);
|
||||
|
||||
#endif /* __LIFO_H */
|
|
@ -0,0 +1,44 @@
|
|||
#include <lifo.h>
|
||||
|
||||
int lifo_empty(int *array) {
|
||||
return array[0] == -1;
|
||||
}
|
||||
|
||||
void lifo_init(int *array, int n) {
|
||||
for (int i = 0; i <= n; i++) {
|
||||
array[i] = -1;
|
||||
}
|
||||
}
|
||||
|
||||
void lifo_insert(int *array, int i) {
|
||||
int index = i+1;
|
||||
array[index] = array[0];
|
||||
array[0] = i;
|
||||
}
|
||||
|
||||
int lifo_get(int *array) {
|
||||
int head = array[0];
|
||||
if (head != -1) {
|
||||
array[0] = array[head+1];
|
||||
}
|
||||
return head;
|
||||
}
|
||||
|
||||
|
||||
#ifdef WITH_MAIN
|
||||
#include <stdio.h>
|
||||
int main() {
|
||||
int array[5];
|
||||
|
||||
lifo_init(array, 4);
|
||||
|
||||
lifo_insert(array, 0);
|
||||
lifo_insert(array, 1);
|
||||
lifo_insert(array, 2);
|
||||
lifo_insert(array, 3);
|
||||
printf("get: %i\n", lifo_get(array));
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
Loading…
Reference in New Issue