OSDN Git Service

Mochi Library修正(連結リストの用語変更、GET系関数追加とマクロ追加)
authorMochi <master.c.mochi@gmail.com>
Sat, 18 Feb 2017 04:22:00 +0000 (13:22 +0900)
committerMochi <master.c.mochi@gmail.com>
Sat, 18 Feb 2017 04:22:00 +0000 (13:22 +0900)
src/include/MLib/Basic/MLibBasic.h [new file with mode: 0644]
src/include/MLib/Basic/MLibBasicList.h
src/libraries/libMLibBasic/List/ListGet.c [new file with mode: 0644]
src/libraries/libMLibBasic/List/ListInsert.c
src/libraries/libMLibBasic/Makefile

diff --git a/src/include/MLib/Basic/MLibBasic.h b/src/include/MLib/Basic/MLibBasic.h
new file mode 100644 (file)
index 0000000..c71e2c7
--- /dev/null
@@ -0,0 +1,17 @@
+/******************************************************************************/
+/* src/include/MLib/Basic/MLibBasic.h                                         */
+/*                                                                 2017/02/11 */
+/* Copyright (C) 2017 Mochi                                                   */
+/******************************************************************************/
+#ifndef _MLIB_BASIC_H_
+#define _MLIB_BASIC_H_
+/******************************************************************************/
+/* 定義                                                                       */
+/******************************************************************************/
+/** アライメント計算マクロ */
+#define MLIB_BASIC_ALIGN( _VALUE, _ALIGNMENT ) \
+    ( ( ( _VALUE ) + ( ( _ALIGNMENT ) - 1 ) ) & ~( ( _ALIGNMENT ) - 1 ) )
+
+
+/******************************************************************************/
+#endif
index e5ec5b7..63981e9 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************/
 /* src/include/MLib/Basic/MLibBasicList.h                                     */
-/*                                                                 2017/02/05 */
+/*                                                                 2017/02/17 */
 /* Copyright (C) 2017 Mochi                                                   */
 /******************************************************************************/
 #ifndef _MLIB_BASIC_LIST_H_
@@ -33,23 +33,33 @@ typedef struct {
 /******************************************************************************/
 /* グローバル関数プロトタイプ宣言                                             */
 /******************************************************************************/
-/* 連結リスト初期化 */
-extern MLibRet_t MLibBasicListInit( MLibBasicList_t *pList );
+/* 次ノード取得 */
+extern MLibBasicListNode_t *MLibBasicListGetNextNode(
+    MLibBasicList_t     *pList,
+    MLibBasicListNode_t *pNode  );
 
-/* ノード後挿入 */
-extern MLibRet_t MLibBasicListInsertAfter( MLibBasicList_t     *pList,
-                                           MLibBasicListNode_t *pNode,
-                                           MLibBasicListNode_t *pNewNode );
+/* 前ノード取得 */
+extern MLibBasicListNode_t *MLibBasicListGetPrevNode(
+    MLibBasicList_t     *pList,
+    MLibBasicListNode_t *pNode  );
 
-/* ノード前挿入 */
-extern MLibRet_t MLibBasicListInsertBefore( MLibBasicList_t     *pList,
-                                            MLibBasicListNode_t *pNode,
-                                            MLibBasicListNode_t *pNewNode );
+/* 連結リスト初期化 */
+extern MLibRet_t MLibBasicListInit( MLibBasicList_t *pList );
 
 /* ノード先頭挿入 */
 extern MLibRet_t MLibBasicListInsertHead( MLibBasicList_t     *pList,
                                           MLibBasicListNode_t *pNewNode );
 
+/* ノード次挿入 */
+extern MLibRet_t MLibBasicListInsertNext( MLibBasicList_t     *pList,
+                                          MLibBasicListNode_t *pNode,
+                                          MLibBasicListNode_t *pNewNode );
+
+/* ノード前挿入 */
+extern MLibRet_t MLibBasicListInsertPrev( MLibBasicList_t     *pList,
+                                          MLibBasicListNode_t *pNode,
+                                          MLibBasicListNode_t *pNewNode );
+
 /* ノード最後尾挿入 */
 extern MLibRet_t MLibBasicListInsertTail( MLibBasicList_t     *pList,
                                           MLibBasicListNode_t *pNewNode );
diff --git a/src/libraries/libMLibBasic/List/ListGet.c b/src/libraries/libMLibBasic/List/ListGet.c
new file mode 100644 (file)
index 0000000..9c5ca36
--- /dev/null
@@ -0,0 +1,109 @@
+/******************************************************************************/
+/* src/libraries/libMLibBasic/List/ListGet.c                                  */
+/*                                                                 2017/02/10 */
+/* Copyright (C) 2017 Mochi.                                                  */
+/******************************************************************************/
+/******************************************************************************/
+/* インクルード                                                               */
+/******************************************************************************/
+#include <stddef.h>
+#include <MLib/MLib.h>
+#include <MLib/Basic/MLibBasicList.h>
+
+
+/******************************************************************************/
+/* グローバル関数宣言                                                         */
+/******************************************************************************/
+/******************************************************************************/
+/**
+ * @brief       次ノード取得
+ * @details     指定したノードの次のノードを連結リストから削除せずに取得する。
+ *              ノーを指定しない場合は先頭ノードを取得する。
+ * 
+ * @param[in]   *pList 連結リスト
+ * @param[in]   *pNode ノード
+ * 
+ * @retval      NULL     ノード無
+ * @retval      NULL以外 ノード有
+ */
+/******************************************************************************/
+MLibBasicListNode_t *MLibBasicListGetNextNode( MLibBasicList_t     *pList,
+                                               MLibBasicListNode_t *pNode  )
+{
+    MLibBasicListNode_t *pRet;  /* 戻り値 */
+    
+    /* 初期化 */
+    pRet = NULL;
+    
+    /* 引数チェック */
+    if ( pList == NULL ) {
+        /* 不正 */
+        
+        return NULL;
+    }
+    
+    /* ノード指定判定 */
+    if ( pNode == NULL ) {
+        /* 指定無 */
+        
+        /* 先頭ノード返却 */
+        pRet = pList->pHead;
+        
+    } else {
+        /* 指定有 */
+        
+        /* 次ノード返却 */
+        pRet = pNode->pNext;
+    }
+    
+    return pRet;
+}
+
+
+/******************************************************************************/
+/**
+ * @brief       前ノード取得
+ * @details     指定したノードの前のノードを連結リストから削除せずに取得する。
+ *              ノーを指定しない場合は最後尾ノードを取得する。
+ * 
+ * @param[in]   *pList 連結リスト
+ * @param[in]   *pNode ノード
+ * 
+ * @retval      NULL     ノード無
+ * @retval      NULL以外 ノード有
+ */
+/******************************************************************************/
+MLibBasicListNode_t *MLibBasicListGetPrevNode( MLibBasicList_t     *pList,
+                                               MLibBasicListNode_t *pNode  )
+{
+    MLibBasicListNode_t *pRet;  /* 戻り値 */
+    
+    /* 初期化 */
+    pRet = NULL;
+    
+    /* 引数チェック */
+    if ( pList == NULL ) {
+        /* 不正 */
+        
+        return NULL;
+    }
+    
+    /* ノード指定判定 */
+    if ( pNode == NULL ) {
+        /* 指定無 */
+        
+        /* 最後尾ノード返却 */
+        pRet = pList->pTail;
+        
+    } else {
+        /* 指定有 */
+        
+        /* 前ノード返却 */
+        pRet = pNode->pPrev;
+    }
+    
+    return pRet;
+}
+
+
+/******************************************************************************/
index c8685d0..7306ea3 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************/
 /* src/libraries/libMLibBasic/List/ListInsert.c                               */
-/*                                                                 2017/02/05 */
+/*                                                                 2017/02/17 */
 /* Copyright (C) 2017 Mochi.                                                  */
 /******************************************************************************/
 /******************************************************************************/
 /******************************************************************************/
 /******************************************************************************/
 /**
- * @brief       ã\83\8eã\83¼ã\83\89å¾\8c挿入
- * @details     指定したノードの後ろに新しいノードを挿入する。
+ * @brief       ã\83\8eã\83¼ã\83\89å\85\88é ­挿入
+ * @details     指定した連結リストの先頭に新しいノードを挿入する。
  * 
  * @param[in]   *pList      連結リスト
- * @param[in]   *pNode      挿入先ノード
  * @param[in]   *pNewNode   挿入ノード
  * 
  * @retval      MLIB_SUCCESS 正常終了
  * @retval      MLIB_FAILURE 異常終了
  */
 /******************************************************************************/
-MLibRet_t MLibBasicListInsertAfter( MLibBasicList_t     *pList,
-                                    MLibBasicListNode_t *pNode,
-                                    MLibBasicListNode_t *pNewNode )
+MLibRet_t MLibBasicListInsertHead( MLibBasicList_t     *pList,
+                                   MLibBasicListNode_t *pNewNode )
 {
-    MLibBasicListNode_t *pNextNode; /* 挿入後ノード */
+    MLibBasicListNode_t *pOldHead;  /* 旧先頭ノード */
     
     /* 初期化 */
-    pNextNode = NULL;
+    pOldHead = NULL;
     
     /* 引数pListチェック */
     if ( pList == NULL ) {
@@ -45,13 +43,6 @@ MLibRet_t MLibBasicListInsertAfter( MLibBasicList_t     *pList,
         return MLIB_FAILURE;
     }
     
-    /* 引数pNodeチェック */
-    if ( pNode == NULL ) {
-        /* 不正値 */
-        
-        return MLIB_FAILURE;
-    }
-    
     /* 引数pNewNodeチェック */
     if ( pNewNode == NULL ) {
         /* 不正値 */
@@ -60,34 +51,34 @@ MLibRet_t MLibBasicListInsertAfter( MLibBasicList_t     *pList,
     }
     
     /* 連結リストサイズチェック */
-    if ( ( pList->size == 0 ) || ( pList->size == SIZE_MAX ) ) {
+    if ( pList->size == SIZE_MAX ) {
         /* サイズ不正 */
         
         return MLIB_FAILURE;
     }
     
-    /* æ\8c¿å\85¥å¾\8cノード取得 */
-    pNextNode = pNode->pNext;
+    /* æ\97§å\85\88é ­ノード取得 */
+    pOldHead = pList->pHead;
     
-    /* 挿入前ノード設定 */
-    pNode->pNext = pNewNode;
+    /* 連結リスト先頭ノード設定 */
+    pList->pHead = pNewNode;
     
     /* 挿入ノード設定 */
-    pNewNode->pPrev = pNode;
-    pNewNode->pNext = pNextNode;
+    pNewNode->pNext = pOldHead;
+    pNewNode->pPrev = NULL;
     
-    /* æ\8c¿å\85¥å¾\8cノード有無判定 */
-    if ( pNextNode == NULL ) {
-        /* æ\8c¿å\85¥å¾\8cノード無 */
+    /* æ\97§å\85\88é ­ノード有無判定 */
+    if ( pOldHead == NULL ) {
+        /* æ\97§å\85\88é ­ノード無 */
         
         /* 連結リスト最後尾ノード設定 */
         pList->pTail = pNewNode;
         
     } else {
-        /* æ\8c¿å\85¥å¾\8cノード有 */
+        /* æ\97§å\85\88é ­ノード有 */
         
-        /* æ\8c¿å\85¥å¾\8cノード設定 */
-        pNextNode->pPrev = pNextNode;
+        /* æ\97§å\85\88é ­ノード設定 */
+        pOldHead->pPrev = pNewNode;
     }
     
     /* 連結リストサイズ設定 */
@@ -99,8 +90,8 @@ MLibRet_t MLibBasicListInsertAfter( MLibBasicList_t     *pList,
 
 /******************************************************************************/
 /**
- * @brief       ノード挿入
- * @details     指定したノードのに新しいノードを挿入する。
+ * @brief       ノード挿入
+ * @details     指定したノードのに新しいノードを挿入する。
  * 
  * @param[in]   *pList      連結リスト
  * @param[in]   *pNode      挿入先ノード
@@ -110,14 +101,14 @@ MLibRet_t MLibBasicListInsertAfter( MLibBasicList_t     *pList,
  * @retval      MLIB_FAILURE 異常終了
  */
 /******************************************************************************/
-MLibRet_t MLibBasicListInsertBefore( MLibBasicList_t     *pList,
-                                     MLibBasicListNode_t *pNode,
-                                     MLibBasicListNode_t *pNewNode )
+MLibRet_t MLibBasicListInsertNext( MLibBasicList_t     *pList,
+                                   MLibBasicListNode_t *pNode,
+                                   MLibBasicListNode_t *pNewNode )
 {
-    MLibBasicListNode_t *pBeforeNode; /* 挿入前ノード */
+    MLibBasicListNode_t *pNextNode; /* 次ノード */
     
     /* 初期化 */
-    pBeforeNode = NULL;
+    pNextNode = NULL;
     
     /* 引数pListチェック */
     if ( pList == NULL ) {
@@ -147,28 +138,28 @@ MLibRet_t MLibBasicListInsertBefore( MLibBasicList_t     *pList,
         return MLIB_FAILURE;
     }
     
-    /* æ\8c¿å\85¥å\89\8dノード取得 */
-    pBeforeNode = pNode->pPrev;
+    /* æ¬¡ノード取得 */
+    pNextNode = pNode->pNext;
     
-    /* 挿入後ノード設定 */
-    pNode->pPrev = pNewNode;
+    /* ノード設定 */
+    pNode->pNext = pNewNode;
     
     /* 挿入ノード設定 */
-    pNewNode->pNext = pNode;
-    pNewNode->pPrev = pBeforeNode;
+    pNewNode->pPrev = pNode;
+    pNewNode->pNext = pNextNode;
     
-    /* æ\8c¿å\85¥å\89\8dノード有無判定 */
-    if ( pBeforeNode == NULL ) {
-        /* æ\8c¿å\85¥å\89\8dノード無 */
+    /* æ¬¡ノード有無判定 */
+    if ( pNextNode == NULL ) {
+        /* æ¬¡ノード無 */
         
-        /* 連結リスト先頭ノード設定 */
-        pList->pHead = pNewNode;
+        /* 連結リスト最後尾ノード設定 */
+        pList->pTail = pNewNode;
         
     } else {
-        /* æ\8c¿å\85¥å\89\8dノード有 */
+        /* æ¬¡ノード有 */
         
-        /* æ\8c¿å\85¥å\89\8dノード設定 */
-        pBeforeNode->pNext = pNewNode;
+        /* æ¬¡ノード設定 */
+        pNextNode->pPrev = pNextNode;
     }
     
     /* 連結リストサイズ設定 */
@@ -180,23 +171,25 @@ MLibRet_t MLibBasicListInsertBefore( MLibBasicList_t     *pList,
 
 /******************************************************************************/
 /**
- * @brief       ã\83\8eã\83¼ã\83\89å\85\88é ­挿入
- * @details     指定した連結リストの先頭に新しいノードを挿入する。
+ * @brief       ã\83\8eã\83¼ã\83\89å\89\8d挿入
+ * @details     指定したノードの前に新しいノードを挿入する。
  * 
  * @param[in]   *pList      連結リスト
+ * @param[in]   *pNode      挿入先ノード
  * @param[in]   *pNewNode   挿入ノード
  * 
  * @retval      MLIB_SUCCESS 正常終了
  * @retval      MLIB_FAILURE 異常終了
  */
 /******************************************************************************/
-MLibRet_t MLibBasicListInsertHead( MLibBasicList_t     *pList,
+MLibRet_t MLibBasicListInsertPrev( MLibBasicList_t     *pList,
+                                   MLibBasicListNode_t *pNode,
                                    MLibBasicListNode_t *pNewNode )
 {
-    MLibBasicListNode_t *pOldHead;  /* 旧先頭ノード */
+    MLibBasicListNode_t *pPrevNode; /* 前ノード */
     
     /* 初期化 */
-    pOldHead = NULL;
+    pPrevNode = NULL;
     
     /* 引数pListチェック */
     if ( pList == NULL ) {
@@ -205,6 +198,13 @@ MLibRet_t MLibBasicListInsertHead( MLibBasicList_t     *pList,
         return MLIB_FAILURE;
     }
     
+    /* 引数pNodeチェック */
+    if ( pNode == NULL ) {
+        /* 不正値 */
+        
+        return MLIB_FAILURE;
+    }
+    
     /* 引数pNewNodeチェック */
     if ( pNewNode == NULL ) {
         /* 不正値 */
@@ -213,34 +213,34 @@ MLibRet_t MLibBasicListInsertHead( MLibBasicList_t     *pList,
     }
     
     /* 連結リストサイズチェック */
-    if ( pList->size == SIZE_MAX ) {
+    if ( ( pList->size == 0 ) || ( pList->size == SIZE_MAX ) ) {
         /* サイズ不正 */
         
         return MLIB_FAILURE;
     }
     
-    /* 旧先頭ノード取得 */
-    pOldHead = pList->pHead;
+    /* ノード取得 */
+    pPrevNode = pNode->pPrev;
     
-    /* 連結リスト先頭ノード設定 */
-    pList->pHead = pNewNode;
+    /* ノード設定 */
+    pNode->pPrev = pNewNode;
     
     /* 挿入ノード設定 */
-    pNewNode->pNext = pOldHead;
-    pNewNode->pPrev = NULL;
+    pNewNode->pNext = pNode;
+    pNewNode->pPrev = pPrevNode;
     
-    /* 旧先頭ノード有無判定 */
-    if ( pOldHead == NULL ) {
-        /* 旧先頭ノード無 */
+    /* ノード有無判定 */
+    if ( pPrevNode == NULL ) {
+        /* ノード無 */
         
-        /* 連結リスト最後尾ノード設定 */
-        pList->pTail = pNewNode;
+        /* 連結リスト先頭ノード設定 */
+        pList->pHead = pNewNode;
         
     } else {
-        /* 旧先頭ノード有 */
+        /* ノード有 */
         
-        /* 旧先頭ノード設定 */
-        pOldHead->pPrev = pNewNode;
+        /* ノード設定 */
+        pPrevNode->pNext = pNewNode;
     }
     
     /* 連結リストサイズ設定 */
index 9a2a5f6..48106dd 100644 (file)
@@ -1,6 +1,6 @@
 #******************************************************************************#
 #* src/libraries/libMLibBasic/Makefile                                        *#
-#*                                                                 2017/02/05 *#
+#*                                                                 2017/02/17 *#
 #* Copyright (C) 2017 Mochi.                                                  *#
 #******************************************************************************#
 #******************************************************************************#
@@ -13,7 +13,8 @@ CUR_DIR   = libraries/libMLibBasic
 LIB_NAME  = libMLibBasic.a
 
 # ソースコード
-SRCS = List/ListInit.c   \
+SRCS = List/ListGet.c    \
+       List/ListInit.c   \
        List/ListInsert.c \
        List/ListRemove.c