OSDN Git Service

Mochi Library追加(連結リスト)
[mochi/master.git] / src / include / MLib / Basic / MLibBasicList.h
1 /******************************************************************************/
2 /* src/include/MLib/Basic/MLibBasicList.h                                     */
3 /*                                                                 2017/02/05 */
4 /* Copyright (C) 2017 Mochi                                                   */
5 /******************************************************************************/
6 #ifndef _MLIB_BASIC_LIST_H_
7 #define _MLIB_BASIC_LIST_H_
8 /******************************************************************************/
9 /* インクルード                                                               */
10 /******************************************************************************/
11 #include <stddef.h>
12
13 #include <MLib/MLib.h>
14
15
16 /******************************************************************************/
17 /* 定義                                                                       */
18 /******************************************************************************/
19 /** ノード構造体 */
20 typedef struct MLibBasicListNode {
21     struct MLibBasicListNode *pNext;    /**< 前ノード */
22     struct MLibBasicListNode *pPrev;    /**< 次ノード */
23 } MLibBasicListNode_t;
24
25 /** 連結リスト構造体 */
26 typedef struct {
27     MLibBasicListNode_t      *pHead;    /**< 先頭ノード             */
28     MLibBasicListNode_t      *pTail;    /**< 最後尾ノード           */
29     size_t                   size;      /**< 連結リストのノード個数 */
30 } MLibBasicList_t;
31
32
33 /******************************************************************************/
34 /* グローバル関数プロトタイプ宣言                                             */
35 /******************************************************************************/
36 /* 連結リスト初期化 */
37 extern MLibRet_t MLibBasicListInit( MLibBasicList_t *pList );
38
39 /* ノード後挿入 */
40 extern MLibRet_t MLibBasicListInsertAfter( MLibBasicList_t     *pList,
41                                            MLibBasicListNode_t *pNode,
42                                            MLibBasicListNode_t *pNewNode );
43
44 /* ノード前挿入 */
45 extern MLibRet_t MLibBasicListInsertBefore( MLibBasicList_t     *pList,
46                                             MLibBasicListNode_t *pNode,
47                                             MLibBasicListNode_t *pNewNode );
48
49 /* ノード先頭挿入 */
50 extern MLibRet_t MLibBasicListInsertHead( MLibBasicList_t     *pList,
51                                           MLibBasicListNode_t *pNewNode );
52
53 /* ノード最後尾挿入 */
54 extern MLibRet_t MLibBasicListInsertTail( MLibBasicList_t     *pList,
55                                           MLibBasicListNode_t *pNewNode );
56
57 /* 指定ノード削除 */
58 extern MLibRet_t MLibBasicListRemove( MLibBasicList_t     *pList,
59                                       MLibBasicListNode_t *pNode  );
60
61 /* 先頭ノード削除 */
62 extern MLibBasicListNode_t *MLibBasicListRemoveHead( MLibBasicList_t *pList );
63
64 /* 最後尾ノード削除 */
65 extern MLibBasicListNode_t *MLibBasicListRemoveTail( MLibBasicList_t *pList );
66
67
68 /******************************************************************************/
69 #endif