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

📄 cpl_list.cpp

📁 用于读取TAB、MIF、SHP文件的类
💻 CPP
字号:
/********************************************************************** * $Id: cpl_list.cpp,v 1.1 2003/06/25 07:45:57 dron Exp $ * * Name:     cpl_list.cpp * Project:  CPL - Common Portability Library * Purpose:  List functions. * Author:   Andrey Kiselev, dron@remotesensing.org * ********************************************************************** * Copyright (c) 2003, Andrey Kiselev <dron@remotesensing.org> * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: *  * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. *  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER  * DEALINGS IN THE SOFTWARE. ********************************************************************** * * $Log: cpl_list.cpp,v $ * Revision 1.1  2003/06/25 07:45:57  dron * New. * * **********************************************************************/#include "cpl_list.h"#include "cpl_conv.h"CPL_CVSID("$Id: cpl_list.cpp,v 1.1 2003/06/25 07:45:57 dron Exp $");/*=====================================================================                    List manipulation functions. =====================================================================*//************************************************************************//*                          CPLListAppend()                             *//************************************************************************//** * Append an object list and return a pointer to the modified list. * If the input list is NULL, then a new list is created. *  * @param psList pointer to list head. * @param pData pointer to inserted data object. May be NULL. * * @return pointer to the head of modified list. */CPLList *CPLListAppend( CPLList *psList, void *pData ){    CPLList *psLast;        /* Allocate room for the new object */    if ( psList == NULL )    {        psLast = psList = (CPLList *)CPLMalloc( sizeof(CPLList) );    }    else    {        psLast = CPLListGetLast( psList );        psLast = psLast->psNext = (CPLList *)CPLMalloc( sizeof(CPLList) );    }    /* Append object to the end of list */    psLast->pData = pData;    psLast->psNext = NULL;    return psList;}/************************************************************************//*                          CPLListInsert()                             *//************************************************************************//** * Insert an object into list at specified position (zero based). * If the input list is NULL, then a new list is created. *  * @param psList pointer to list head. * @param pData pointer to inserted data object. May be NULL. * @param nPosition position number to insert an object. * * @return pointer to the head of modified list. */CPLList *CPLListInsert( CPLList *psList, void *pData, int nPosition ){    CPLList *psCurrent;    int     i, nCount;        if ( nPosition < 0 )        return psList;      /* Nothing to do!*/    nCount = CPLListCount( psList );    /* Allocate room for the new object */    if ( nCount < nPosition )    {        for ( i = nCount; i < nPosition - 1; i++ )            CPLListAppend( psList, NULL );        CPLListAppend( psList, pData );    }    else    {        CPLList *psNew = (CPLList *)CPLMalloc( sizeof(CPLList) );        psNew->pData = pData;        psCurrent = psList;        for ( i = 0; i < nPosition - 1; i++ )            psCurrent = psCurrent->psNext;        psNew->psNext = psCurrent->psNext;        psCurrent->psNext = psNew;    }    return psList;}/************************************************************************//*                          CPLListGetLast()                            *//************************************************************************//** * Return the pointer to last element in a list. *  * @param psList pointer to list head. * * @return pointer to last element in a list. */CPLList *CPLListGetLast( CPLList *psList ){    CPLList *psCurrent = psList;    if ( psList == NULL )        return NULL;    while ( psCurrent->psNext )        psCurrent = psCurrent->psNext;    return psCurrent;}/************************************************************************//*                          CPLListGet()                                *//************************************************************************//** * Return the pointer to the specified element in a list. *  * @param psList pointer to list head. * * @return pointer to the specified element in a list. */CPLList *CPLListGet( CPLList *psList, int nPosition ){    int     iItem = 0;    CPLList *psCurrent = psList;    if ( psList == NULL )        return NULL;    while ( iItem < nPosition && psCurrent )    {        psCurrent = psCurrent->psNext;        iItem++;    }    return psCurrent;}/************************************************************************//*                          CPLListCount()                              *//************************************************************************//** * Return the number of elements in a list. *  * @param psList pointer to list head. * * @return number of elements in a list. */int CPLListCount( CPLList *psList ){    int     nItems = 0;    CPLList *psCurrent = psList;    while ( psCurrent )    {        nItems++;        psCurrent = psCurrent->psNext;    }    return nItems;}/************************************************************************//*                          CPLListRemove()                             *//************************************************************************//** * Remone the element from the specified position (zero based) in a list. Data * object contained in removed element must be freed by the caller first. *  * @param psList pointer to list head. * @param nPosition position number to delet an element. * * @return pointer to the head of modified list. */CPLList *CPLListRemove( CPLList *psList, int nPosition ){    CPLList *psCurrent, *psRemoved;    int     i, nCount;        nCount = CPLListCount( psList );    if ( nPosition < 0 || nCount < nPosition )        return psList;      /* Nothing to do!*/    psCurrent = psList;    for ( i = 0; i < nPosition - 1; i++ )        psCurrent = psCurrent->psNext;    psRemoved = psCurrent->psNext;    psCurrent->psNext = psRemoved->psNext;    CPLFree( psRemoved );    return psList;}/************************************************************************//*                          CPLListDestroy()                            *//************************************************************************//** * Destroy a list. Caller responsible for freeing data objects contained in * list elements. *  * @param psList pointer to list head. * */void CPLListDestroy( CPLList *psList ){    CPLList *psNext;    CPLList *psCurrent = psList;    while ( psCurrent )    {        psNext = psCurrent->psNext;        CPLFree( psCurrent );        psCurrent = psNext;    }}/************************************************************************//*                          CPLListGetNext()                            *//************************************************************************//** * Return the pointer to next element in a list. *  * @param psElement pointer to list element. * * @return pointer to the list element preceded by the given element. */CPLList *CPLListGetNext( CPLList *psElement ){    if ( psElement == NULL )        return NULL;    else        return psElement->psNext;}/************************************************************************//*                          CPLListGetData()                            *//************************************************************************//** * Return pointer to the data object contained in given list element. *  * @param psElement pointer to list element. * * @return pointer to the data object contained in given list element. */void *CPLListGetData( CPLList *psElement ){    if ( psElement == NULL || psElement->pData == NULL )        return NULL;    else        return psElement->pData;}

⌨️ 快捷键说明

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