diff options
Diffstat (limited to 'inc/list.h')
-rw-r--r-- | inc/list.h | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/inc/list.h b/inc/list.h new file mode 100644 index 0000000..8b802f5 --- /dev/null +++ b/inc/list.h @@ -0,0 +1,200 @@ +#ifndef __list_h__ +#define __list_h__ + +#include "utility.h" + +/**********************************************************/ +/* This object is a double link list. */ +/* methods: */ +/* init(addr of the list, size per entry, list size) */ +/* The list's type depends on what user want to store*/ +/* . For example: if you want a list for int, you s- */ +/* hould declare like "int* v", and call the init() */ +/* like "init(&v, sizeof(int), 5)", which will creat */ +/* a double link list with 5 elements. */ +/* */ +/* free(addr of the list) */ +/* Free the memory the list use. You should call it */ +/* when you don't need the container. */ +/* */ +/* */ +/* getSize(addr of the list) */ +/* Return the number of elements. */ +/* */ +/* getEntrySize(addr of the list) */ +/* Return the size per entry, it dependent on what */ +/* type of data you store in the container. */ +/* */ +/* getFront(addr of the list) */ +/* Return a const pointer which point to the entry */ +/* at the head of the list. */ +/* */ +/* getBack(addr of the list) */ +/* Return a const pointer which point to the entry */ +/* at the end of the list. */ +/* */ +/* getBegin(addr of the list) */ +/* Return a pointer which point to the iterator at */ +/* the head of the list. */ +/* */ +/* getEnd(addr of the list) */ +/* Return a pointer which point to the iterator at */ +/* the end of the list (which cannot be modified). */ +/* */ +/* */ +/* setSize(addr of the list, new_size) */ +/* Resize the lsit to new_size at the back of the */ +/* list. Note that it won't initalize the newly ele- */ +/* ments when you increase the size. */ +/* */ +/* setFront(addr of the list, data) */ +/* Let the first element be the data you given. */ +/* */ +/* setBack(addr of the list, data) */ +/* Let the last element be the data you given. */ +/* */ +/* */ +/* addBack(addr of the list, data) */ +/* Add an element which contain data at the back of */ +/* the list. */ +/* */ +/* delBack(addr of the list) */ +/* Remove the last element of the list. */ +/* */ +/* addFront(addr of the list, data) */ +/* Add an element which contain data at the front of */ +/* the list. */ +/* */ +/* delFront(addr of the list) */ +/* Remove the first element of the list. */ +/* */ +/* */ +/* rm(addr of the list, addr of the iter1, iter2) */ +/* Remove the part of iter1 ~ iter2 (include iter1 */ +/* but not iter2) */ +/* */ +/* copy(addr of the list, addr of the iter1, iter2, */ +/* addr of the list2) */ +/* Create a new list which contain the part of the */ +/* iter1 ~ iter2 (include iter1 but not iter2) and */ +/* saved it to list2. */ +/* */ +/* move(addr of the list, addr of the iter1, iter2, */ +/* addr of the list2) */ +/* Move the part iter1 ~ iter2 to list2. */ +/* */ +/* swap(addr of the l1, addr of the iter. i1, i2, */ +/* addr of the l2, addr of the iter. j1, j2) */ +/* Swap the part of l1 from i1 to i2.previous and */ +/* the part of l2 from j1 to j2.previous. */ +/* */ +/* */ +/* iterGetEntry(addr of the iteator) */ +/* Return a const pointer which point to the data of */ +/* the iterator. */ +/* */ +/* iterGetNext(addr of the iterator) */ +/* Return a pointer which point to the next iterator */ +/* */ +/* iterGetPrev(addr of the iterator) */ +/* Return a pointer which point to the previous ite- */ +/* ator. */ +/* */ +/* */ +/* iterSetEntry(addr of the iterator, data) */ +/* Let the data which is stored in iterator be the */ +/* data you given. */ +/* */ +/* iterGoNext(addr of the iterator) */ +/* Instead of return a pointer, it will change the */ +/* pointer you given. */ +/* */ +/* iterGoPrev(addr of the iterator) */ +/* Instead of return a pointer, it will change the */ +/* pointer you given. */ +/* */ +/* */ +/* iterDel(addr of the iterator) */ +/* Delete the iterator you given, returning a pointer*/ +/* to the next iterator */ +/* */ +/* iterDelPrev(addr of the iterator) */ +/* Delete the previous of the iterator you given. */ +/* */ +/* iterDelPrev(addr of the iterator) */ +/* Delete the next of the iterator you given. */ +/* */ +/* */ +/**********************************************************/ + +pvoid ctl_list_initX(ppvoid l, size_t size, uint count); +pvoid ctl_list_freeX(ppvoid l); + +int ctl_list_getSizeX (ppcvoid l); +int ctl_list_getEntrySizeX(ppcvoid l); +pcvoid ctl_list_getFrontX (ppcvoid l); +pcvoid ctl_list_getBackX (ppcvoid l); +pvoid ctl_list_getBeginX (ppcvoid l); +pcvoid ctl_list_getEndX (ppcvoid l); + +int ctl_list_setSizeX (ppvoid l, uint count); +pvoid ctl_list_setFrontX(ppvoid l, pcvoid data); +pvoid ctl_list_setBackX (ppvoid l, pcvoid data); + +int ctl_list_addFrontX(ppvoid l, pcvoid data); +int ctl_list_delFrontX(ppvoid l); +int ctl_list_addBackX (ppvoid l, pcvoid data); +int ctl_list_delBackX (ppvoid l); + +int ctl_list_rmX (ppvoid li, pvoid i1, pvoid i2); +pvoid ctl_list_copyX(ppvoid li, pvoid i1, pvoid i2, ppvoid out); +pvoid ctl_list_moveX(ppvoid li, pvoid i1, pvoid i2, ppvoid out); +int ctl_list_swapX(ppvoid li, pvoid i1, pvoid i2, + ppvoid lj, pvoid j1, pvoid j2); + +pcvoid ctl_list_iterGetEntryX(pcvoid i); +pvoid ctl_list_iterGetNextX (pcvoid i); +pvoid ctl_list_iterGetPrevX (pcvoid i); + +pvoid ctl_list_iterSetEntryX(pvoid i, pcvoid data); + +pvoid ctl_list_iterDelX (pvoid i); +pvoid ctl_list_iterDelPrevX(pvoid i); +pvoid ctl_list_iterDelNextX(pvoid i); + +#define ctl_list_init(X,Y,Z) ctl_list_initX(ppVoid(X),Y,Z) +#define ctl_list_free(X) ctl_list_freeX(ppVoid(X)) + +#define ctl_list_getSize(X) ctl_list_getSizeX (ppcVoid(X)) +#define ctl_list_getEntrySize(X) ctl_list_getEntrySizeX(ppcVoid(X)) +#define ctl_list_getFront(X) ctl_list_getFrontX (ppcVoid(X)) +#define ctl_list_getBack(X) ctl_list_getBackX (ppcVoid(X)) +#define ctl_list_getBegin(X) ctl_list_getBeginX (ppcVoid(X)) +#define ctl_list_getEnd(X) ctl_list_getEndX (ppcVoid(X)) + +#define ctl_list_setSize(X,Y) ctl_list_setSizeX (ppVoid(X),Y) +#define ctl_list_setFront(X,Y) ctl_list_setFrontX(ppVoid(X),pcVoid(Y)) +#define ctl_list_setBack(X,Y) ctl_list_setBackX (ppVoid(X),pcVoid(Y)) + +#define ctl_list_addFront(X,Y) ctl_list_addFrontX(ppVoid(X),pcVoid(Y)) +#define ctl_list_delFront(X) ctl_list_delFrontX(ppVoid(X)) +#define ctl_list_addBack(X,Y) ctl_list_addBackX (ppVoid(X),pcVoid(Y)) +#define ctl_list_delBack(X) ctl_list_delBackX (ppVoid(X)) + + +#define ctl_list_rm(X,Y,Z) ctl_list_rmX (ppVoid(X),pVoid(Y),pVoid(Z)) +#define ctl_list_copy(X,Y,Z,A) ctl_list_copyX(ppVoid(X),pVoid(Y),pVoid(Z),ppVoid(A)) +#define ctl_list_move(X,Y,Z,A) ctl_list_moveX(ppVoid(X),pVoid(Y),pVoid(Z),ppVoid(A)) +#define ctl_list_swap(X,Y,Z,A,B,C) ctl_list_swapX(ppVoid(X),pVoid(Y),pVoid(Z),ppVoid(A),pVoid(B),pVoid(C)) + +#define ctl_list_iterGetEntry(X) ctl_list_iterGetEntryX(pcVoid(X)) +#define ctl_list_iterGetNext(X) ctl_list_iterGetNextX (pcVoid(X)) +#define ctl_list_iterGetPrev(X) ctl_list_iterGetPrevX (pcVoid(X)) + +#define ctl_list_iterSetEntry(X,Y) ctl_list_iterSetEntryX(pVoid(X),pcVoid(Y)) + +#define ctl_list_iterDel(X) ctl_list_iterDelX (pVoid(X)) +#define ctl_list_iterDelPrev(X) ctl_list_iterDelPrevX(pVoid(X)) +#define ctl_list_iterDelNext(X) ctl_list_iterDelNextX(pVoid(X)) + +#endif /* __list_h__ */ |