* initial checkin of last in first out array queue (lifo)

This commit is contained in:
Kaspar Schleiser 2010-12-10 16:49:29 +01:00
parent 8de4898694
commit d5ff633d07
3 changed files with 55 additions and 2 deletions

View File

@ -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 ;

9
core/include/lifo.h Normal file
View File

@ -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 */

44
core/lifo.c Normal file
View File

@ -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