IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 15, 2004, 12:18:02 PM (22 years ago)
Author:
desonia
Message:

extracted the vector of pointers functionality to a new object, psArray.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/collections/psList.c

    r1193 r1228  
    66 *  @author Robert Daniel DeSonia, MHPCC
    77 *
    8  *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
    9  *  @date $Date: 2004-07-08 01:05:00 $
     8 *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
     9 *  @date $Date: 2004-07-15 22:18:02 $
    1010 *
    1111 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    401401 * Convert a psList to/from a psVoidPtrArray
    402402 */
    403 psVector* psListToVector(psList* restrict list)
     403psArray* psListToArray(psList* restrict list)
    404404{
    405405    psListElem* ptr;
    406406    unsigned int n;
    407     psVector* restrict arr;
     407    psArray* restrict arr;
    408408
    409409    if (list == NULL) {
     
    412412
    413413    if (list->size > 0) {
    414         arr = psVectorAlloc(list->size, PS_TYPE_PTR);
    415     } else {
    416         arr = psVectorAlloc(1, PS_TYPE_PTR);
     414        arr = psArrayAlloc(list->size);
     415    } else {
     416        arr = psArrayAlloc(1);
    417417    }
    418418
     
    422422    n = list->size;
    423423    for (int i = 0; i < n; i++) {
    424         arr->data.PTR[i] = psMemIncrRefCounter(ptr->data);
     424        arr->data[i] = psMemIncrRefCounter(ptr->data);
    425425        ptr = ptr->next;
    426426    }
     
    429429}
    430430
    431 psList* psVectorToList(psVector* arr)
     431psList* psArrayToList(psArray* arr)
    432432{
    433433    unsigned int n;
     
    435435
    436436    if (arr == NULL) {
    437         return NULL;
    438     }
    439 
    440     if (arr->type.type != PS_TYPE_PTR) {
    441         psError(__func__,"Can not convert a non pointer-vector to a linked list.");
    442437        return NULL;
    443438    }
     
    446441    n = arr->n;
    447442    for (int i = 0; i < n; i++) {
    448         psListAdd(list,arr->data.PTR[i],PS_LIST_TAIL);
     443        psListAdd(list,arr->data[i],PS_LIST_TAIL);
    449444    }
    450445
     
    455450psList* psListSort(psList* list, psComparePtrFcn compare)
    456451{
    457     psVector* vector;
     452    psArray* arr;
    458453    if (list == NULL) {
    459454        return NULL;
     
    461456
    462457    // convert to indexable vector for use by qsort.
    463     vector = psListToVector(list);
     458    arr = psListToArray(list);
    464459    psFree(list);
    465460
    466     qsort(vector->data.V, vector->n, sizeof(void*),
    467           (int(*)(const void *, const void *))compare);
     461    arr = psArraySort(arr,compare);
    468462
    469463    // convert back to linked list
    470     list = psVectorToList(vector);
    471     psFree(vector);
     464    list = psArrayToList(arr);
     465    psFree(arr);
    472466
    473467    return list;
Note: See TracChangeset for help on using the changeset viewer.