OSDN Git Service

Mochi Library修正(連結リストの用語変更、GET系関数追加とマクロ追加)
[mochi/master.git] / src / libraries / libMLibBasic / List / ListInsert.c
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;
     }
     
     /* 連結リストサイズ設定 */