⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memlib.c

📁 语法分析器 完成从c/c++向C++转变
💻 C
📖 第 1 页 / 共 4 页
字号:
               free(psHeap -> psHeapData[sCnt].pvData);
               psHeap -> psHeapData[sCnt].pvData = NULL;
            }
         }
      }


      /*
      **  Free up the data for the array of heapdata structures  
      */
    
      if(psHeap -> psHeapData != NULL)
        free(psHeap -> psHeapData);
      
      free(psHeap);

      (*ppsHeap) = NULL;
   }

   return(C_OK);

} 


/******************************************************************************
*+
** Function Name:   MemLstAddAfterMember
** 
** Description:   Adds a member after another given member in a list
**
** Return Codes:
**               C_OK
**
** Written by:  John Tal
**
**
** Modification History:
**
** Date          Programmer      Mod#     Modification
** ---------------------------------------------------------------------------
** 06/12/90      J. Tal          V1.0-000 New
**
*-
*/


#if C_ANSI

SHORT APIENTRY
MemLstAddAfterMember(LLIST_P psPrev,LLIST_P psNewMember)

#else

SHORT APIENTRY
MemLstAddAfterMember(psPrev, psNewMember)
LLIST_P  psPrev;
LLIST_P  psNewMember;

#endif


{
     LLIST_P psTemp;

     psNewMember -> psNext = psPrev -> psNext;
     psNewMember -> psPrev = psPrev;
     psTemp = psPrev -> psNext;
     psPrev -> psNext = psNewMember;
     if(psTemp != NULL)
        psTemp -> psPrev = psNewMember;

     return(C_OK);
}


/******************************************************************************
*+
** Function Name:   MemLstAddBeforeMember
** 
** Description:   Adds a member before another given member in a list.
**
** Return Codes:
**               C_OK
**
** Written by:  John Tal
**
**
** Modification History:
**
** Date          Programmer      Mod#     Modification
** ---------------------------------------------------------------------------
** 06/12/90      J. Tal          V1.0-000 New
**
*-
*/

#if C_ANSI

SHORT APIENTRY
MemLstAddBeforeMember(LLIST_P psListRoot,LLIST_P psPrev,LLIST_P psNewMember,LLIST_PP ppsRetMember)

#else

SHORT APIENTRY
MemLstAddBeforeMember(psListRoot,psPrev,psNewMember,ppsRetMember)
LLIST_P psListRoot;
LLIST_P psPrev;
LLIST_P psNewMember;
LLIST_PP ppsRetMember;

#endif

{
     LLIST_P psTemp;
                                                                                 
     if(psPrev == psListRoot)
     {
         psListRoot = psNewMember;
         psPrev -> psPrev = psNewMember;
         psNewMember -> psNext = psPrev;
     } 
     else
     {
        psTemp = psPrev -> psPrev;
        psTemp -> psNext = psNewMember;
        psPrev -> psPrev = psNewMember;
        psNewMember -> psNext = psPrev;
     }

     *ppsRetMember = psListRoot;

     return(C_OK);
}


/******************************************************************************
*+
** Function Name:   MemLstAllocMember
** 
** Description:   Allocates memory for a new member.
**                Initializes new member pointers.
**
** Return Codes:
**               C_OK
**
** Written by:  John Tal
**
**
** Modification History:
**
** Date          Programmer      Mod#     Modification
** ---------------------------------------------------------------------------
** 06/12/90      J. Tal          V1.0-000 New
**
*-
*/
                                       

#if C_ANSI

SHORT APIENTRY
MemLstAllocMember(LLIST_PP ppsRetMember)

#else

SHORT APIENTRY
MemLstAllocMember(ppsRetMember)
LLIST_PP ppsRetMember;

#endif


{                                 
   LLIST_P psItem;                      

   psItem = (LLIST_P) calloc(sizeof(LLIST_T),sizeof(BYTE));
 
   (*ppsRetMember) = psItem;

   if(psItem != NULL)
      return(C_OK);
   else
      return(C_NOTOK);

}               



/******************************************************************************
*+
** Function Name:   MemLstDeleteMember
** 
** Description:   Deletes a member from a list.  No search involved.
**
** Return Codes:
**               C_OK
**
** Written by:  John Tal
**
**
** Modification History:
**
** Date          Programmer      Mod#     Modification
** ---------------------------------------------------------------------------
** 06/12/90      J. Tal          V1.0-000 New
**
*-
*/


#if C_ANSI

SHORT APIENTRY
MemLstDeleteMember(LLIST_P psListRoot, LLIST_P psMember,LLIST_PP ppsRetMember)

#else

SHORT APIENTRY
MemLstDeleteMember(psListRoot,psMember,ppsRetMember)
LLIST_P psListRoot;    /* Root/head of list */
LLIST_P psMember;      /* address of member to delete */
LLIST_PP ppsRetMember; /* root/head on return */

#endif



{
     LLIST_P psTemp;

     if(psMember == psListRoot)
     {
        psListRoot = psMember -> psNext;
        if(psListRoot != NULL)
           psListRoot -> psPrev = NULL;
     }
     else
     {
        psTemp = psMember -> psNext;
        if(psTemp != NULL)
           psTemp -> psPrev = psMember -> psPrev;
        psTemp = psMember -> psPrev;
        psTemp -> psNext = psMember -> psNext;
     }

     free(psMember);

     (*ppsRetMember) = psListRoot;

     return(C_OK);
}


/******************************************************************************
*+
** Function Name:   MemLstFindMember
** 
** Description:   Searches for a member in a list
**
** Return Codes:
**               C_OK
**               (Check parameter on return, IF NULL = not in tree.
**                Otherwise set to point to member)
**
** Written by:  John Tal
**
**
** Modification History:
**
** Date          Programmer      Mod#     Modification
** ---------------------------------------------------------------------------
** 06/12/90      J. Tal          V1.0-000 New
**
*-
*/


#if C_ANSI

SHORT APIENTRY
MemLstFindMember(LLIST_P psListRoot, 
                  PVOID  pvData,
                  SHORT (*compare_func)(PVOID,PVOID), 
                  LLIST_PP ppsRetMember)

#else

SHORT APIENTRY
MemLstFindMember(psListRoot,pvData,compare_func,ppsRetMember)
LLIST_P psListRoot;     /*  root/head of list */
PVOID   pvData;            /*  value you are searching for (could be PVOID) */  
SHORT   (*compare_func)();  /* compare function you provide */
LLIST_PP  ppsRetMember;  /*  root/head on return */

#endif

{
    LLIST_P psList = NULL;
    SHORT  sTemp;

    if(psListRoot != NULL)
    {
       psList = psListRoot;

       while ( (sTemp=((*compare_func)(pvData,psList -> pvData)) ) != 0)
       {
           psList = psList -> psNext;

           if(psList == NULL)
               break;  
       }

       if(psList != NULL)
         if( ((*compare_func)(pvData,psList -> pvData)) != 0)
              psList = NULL;

    }

    *ppsRetMember = psList;

    return(C_OK);
}



/******************************************************************************
*+
** Function Name:   MemLstFindTailMember
** 
** Description:   Finds the last member in a list.
**
** Return Codes:
**               C_OK
**
** Written by:  John Tal
**
**
** Modification History:
**
** Date          Programmer      Mod#     Modification
** ---------------------------------------------------------------------------
** 06/12/90      J. Tal          V1.0-000 New
**
*-
*/

#if C_ANSI

SHORT APIENTRY
MemLstFindTailMember(LLIST_P psListRoot,LLIST_PP psRetMember)

#else

SHORT APIENTRY
MemLstFindTailMember(psListRoot, psRetMember)
LLIST_P  psListRoot;
LLIST_PP psRetMember;

#endif


{
    LLIST_P psList = NULL;
    LLIST_P psPrev = NULL;

    psList = psListRoot;

    while(psList != NULL)
    {
       psPrev = psList;
       psList = psList -> psNext;
    }

    psList = psPrev;

    *psRetMember = psList;

    return(C_OK);
}


/******************************************************************************
*+
** Function Name:   MemLstInsertMember
** 
** Description:   Inserts a newly allocated member into a list.
**                Uses the supplied compare function to determine
**                where to place the entry in the list.
**
** Return Codes:
**               C_OK
**
** Written by:  John Tal
**
**
** Modification History:
**
** Date          Programmer      Mod#     Modification
** ---------------------------------------------------------------------------
** 06/12/90      J. Tal          V1.0-000 New
**
*-
*/

#if C_ANSI

SHORT APIENTRY
MemLstInsertMember(LLIST_P psListRoot, LLIST_P psMember,SHORT (*compare_func)(PVOID,PVOID),LLIST_PP ppsRetMember)

#else

SHORT APIENTRY
MemLstInsertMember(psListRoot,psMember,compare_func,ppsRetMember)
LLIST_P  psListRoot;
LLIST_P  psMember;
SHORT    (*compare_func)();
LLIST_PP ppsRetMember;

#endif

{
   LLIST_P psPrev = NULL;
   LLIST_P psList;

   if(psListRoot == NULL)
   {
      psListRoot = psMember;
      *ppsRetMember = psListRoot;
      return(C_OK);
   }
   else
   {
      psList = psListRoot;

      while( ((*compare_func)(psList -> pvData, psMember -> pvData)) < 0)
      {
           psPrev = psList;
         psList = psList -> psNext;
         if(psList == NULL)
            break;
      }

      if(psPrev == NULL)
         MemLstAddBeforeMember(psListRoot,psList,psMember,&psListRoot);
      else
         MemLstAddAfterMember(psPrev,psMember);  /* big change from binary, uses
                                         prev ptr found here */

      *ppsRetMember = psListRoot;

      return(C_OK);

   } /* if list != NULL */

}



/******************************************************************************
*+
** Function Name:   MemLstUnlinkMember
** 
** Description:   Searches for a member in a list and unlinks 
**                that member from the list, does not free() pointer.
**
** Return Codes:
**               C_OK
**
** Written by:  John Tal
**
**
** Modification History:
**
** Date          Programmer      Mod#     Modification
** ---------------------------------------------------------------------------
** 06/12/90      J. Tal          V1.0-000 New
**
*-
*/

#if C_ANSI

SHORT APIENTRY
MemLstUnlinkMember(LLIST_P psListRoot, LLIST_P psMember,LLIST_PP ppsRetMember)

#else

SHORT APIENTRY
MemLstUnlinkMember(psListRoot,psMember,ppsRetMember)
LLIST_P  psListRoot;
LLIST_P  psMember;
LLIST_PP ppsRetMember;

#endif


{
     LLIST_P psTemp;

     if(psMember == psListRoot)
     {
        psListRoot = psMember -> psNext;
        if(psListRoot != NULL)
           psListRoot -> psPrev = NULL;
     }
     else
     {
        psTemp = psMember -> psNext;
        if(psTemp != NULL)
           psTemp -> psPrev = psMember -> psPrev;
        psTemp = psMember -> psPrev;
        psTemp -> psNext = psMember -> psNext;
     }

     *ppsRetMember = psListRoot;

     return(C_OK);
}


/******************************************************************************
*+
** Function Name:   MemLstVacateList
** 
** Description:   Removes all members from a list
**
** Return Codes:
**               C_OK
**
** Written by:  John Tal
**
**
** Modification History:
**
** Date          Programmer      Mod#     Modification
** ---------------------------------------------------------------------------
** 10-FEB-1991    J. Tal          V1.0-000 New
**
*-
*/

#if C_ANSI

SHORT APIENTRY
MemLstVacateList(LLIST_PP ppsListRoot, BOOL fFreeData)

#else

SHORT APIENTRY
MemLstVacateList(ppsListRoot,fFreeData)
LLIST_PP ppsListRoot;
BOOL  fFreeData;

#endif
{
     LLIST_P psTemp;   /*  working pointer */


     psTemp = (*ppsListRoot);

     /*
     **  Spin through list from head to end
     */

     while(psTemp != NULL)
     {
        /*
        **  If free the data and data to free then free
        */

        if(fFreeData)
          if(psTemp -> pvData != NULL)
              free(psTemp -> pvData);


        /*
        **  Delete the member itself
        */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -