Exemplo n.º 1
0
 void object::test<1>()
 {
     CPLList* list;
 
     list = CPLListInsert(NULL, (void*)0, 0);
     ensure(CPLListCount(list) == 1);
     list = CPLListRemove(list, 2);
     ensure(CPLListCount(list) == 1);
     list = CPLListRemove(list, 1);
     ensure(CPLListCount(list) == 1);
     list = CPLListRemove(list, 0);
     ensure(CPLListCount(list) == 0);
     list = NULL;
     
     list = CPLListInsert(NULL, (void*)0, 2);
     ensure(CPLListCount(list) == 3);
     list = CPLListRemove(list, 2);
     ensure(CPLListCount(list) == 2);
     list = CPLListRemove(list, 1);
     ensure(CPLListCount(list) == 1);
     list = CPLListRemove(list, 0);
     ensure(CPLListCount(list) == 0);
     list = NULL;
 
     list = CPLListAppend(list, (void*)1);
     ensure(CPLListGet(list,0) == list);
     ensure(CPLListGet(list,1) == NULL);
     list = CPLListAppend(list, (void*)2);
     list = CPLListInsert(list, (void*)3, 2);
     ensure(CPLListCount(list) == 3);
     CPLListDestroy(list);
     list = NULL;
 
     list = CPLListAppend(list, (void*)1);
     list = CPLListAppend(list, (void*)2);
     list = CPLListInsert(list, (void*)4, 3);
     CPLListGet(list,2)->pData = (void*)3;
     ensure(CPLListCount(list) == 4);
     ensure(CPLListGet(list,0)->pData == (void*)1);
     ensure(CPLListGet(list,1)->pData == (void*)2);
     ensure(CPLListGet(list,2)->pData == (void*)3);
     ensure(CPLListGet(list,3)->pData == (void*)4);
     CPLListDestroy(list);
     list = NULL;
 
     list = CPLListInsert(list, (void*)4, 1);
     CPLListGet(list,0)->pData = (void*)2;
     list = CPLListInsert(list, (void*)1, 0);
     list = CPLListInsert(list, (void*)3, 2);
     ensure(CPLListCount(list) == 4);
     ensure(CPLListGet(list,0)->pData == (void*)1);
     ensure(CPLListGet(list,1)->pData == (void*)2);
     ensure(CPLListGet(list,2)->pData == (void*)3);
     ensure(CPLListGet(list,3)->pData == (void*)4);
     list = CPLListRemove(list, 1);
     list = CPLListRemove(list, 1);
     list = CPLListRemove(list, 0);
     list = CPLListRemove(list, 0);
     ensure(list == NULL);
 }
Exemplo n.º 2
0
static void CPLHashSetRehash(CPLHashSet* set)
{
    int nNewAllocatedSize = anPrimes[set->nIndiceAllocatedSize];
    CPLList** newTabList = (CPLList**) CPLCalloc(sizeof(CPLList*), nNewAllocatedSize);
#ifdef HASH_DEBUG
    CPLDebug("CPLHASH", "hashSet=%p, nSize=%d, nCollisions=%d, fCollisionRate=%.02f",
             set, set->nSize, set->nCollisions, set->nCollisions * 100.0 / set->nSize);
    set->nCollisions = 0;
#endif
    for(int i=0;i<set->nAllocatedSize;i++)
    {
        CPLList* cur = set->tabList[i];
        while(cur)
        {
            unsigned long nNewHashVal = set->fnHashFunc(cur->pData) % nNewAllocatedSize;
#ifdef HASH_DEBUG
            if (newTabList[nNewHashVal])
                set->nCollisions ++;
#endif
            newTabList[nNewHashVal] = CPLListInsert(newTabList[nNewHashVal], cur->pData, 0);
            cur = cur->psNext;
        }
        CPLListDestroy(set->tabList[i]);
    }
    CPLFree(set->tabList);
    set->tabList = newTabList;
    set->nAllocatedSize = nNewAllocatedSize;
}
Exemplo n.º 3
0
/** Destroys a pool of worker threads.
 *
 * Any still pending job will be completed before the destructor returns.
 */
CPLWorkerThreadPool::~CPLWorkerThreadPool()
{
    if( hCond )
    {
        WaitCompletion();

        CPLAcquireMutex(hMutex, 1000.0);
        eState = CPLWTS_STOP;
        CPLReleaseMutex(hMutex);

        for(size_t i=0;i<aWT.size();i++)
        {
            CPLAcquireMutex(aWT[i].hMutex, 1000.0);
            CPLCondSignal(aWT[i].hCond);
            CPLReleaseMutex(aWT[i].hMutex);
            CPLJoinThread(aWT[i].hThread);
            CPLDestroyCond(aWT[i].hCond);
            CPLDestroyMutex(aWT[i].hMutex);
        }

        CPLListDestroy(psWaitingWorkerThreadsList);

        CPLDestroyCond(hCond);
    }
    CPLDestroyMutex(hMutex);
}
static void WFS_ExprFreeList(CPLList* psExprList)
{
    CPLList* psIterList = psExprList;
    while(psIterList)
    {
        WFS_ExprFree((Expr*)psIterList->pData);
        psIterList = psIterList->psNext;
    }
    CPLListDestroy(psExprList);
}
Exemplo n.º 5
0
void CPLHashSetDestroy(CPLHashSet* set)
{
    CPLAssert(set != NULL);
    for(int i=0;i<set->nAllocatedSize;i++)
    {
        if (set->fnFreeEltFunc)
        {
            CPLList* cur = set->tabList[i];
            while(cur)
            {
                set->fnFreeEltFunc(cur->pData);
                cur = cur->psNext;
            }
        }
        CPLListDestroy(set->tabList[i]);
    }
    CPLFree(set->tabList);
    CPLFree(set);
}