aboutsummaryrefslogtreecommitdiffstats
path: root/inc/list.h
diff options
context:
space:
mode:
Diffstat (limited to 'inc/list.h')
-rw-r--r--inc/list.h200
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__ */