Changeset 1228 for trunk/psLib/src/collections/psList.c
- Timestamp:
- Jul 15, 2004, 12:18:02 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/collections/psList.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/collections/psList.c
r1193 r1228 6 6 * @author Robert Daniel DeSonia, MHPCC 7 7 * 8 * @version $Revision: 1.1 0$ $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 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 401 401 * Convert a psList to/from a psVoidPtrArray 402 402 */ 403 ps Vector* psListToVector(psList* restrict list)403 psArray* psListToArray(psList* restrict list) 404 404 { 405 405 psListElem* ptr; 406 406 unsigned int n; 407 ps Vector* restrict arr;407 psArray* restrict arr; 408 408 409 409 if (list == NULL) { … … 412 412 413 413 if (list->size > 0) { 414 arr = ps VectorAlloc(list->size, PS_TYPE_PTR);415 } else { 416 arr = ps VectorAlloc(1, PS_TYPE_PTR);414 arr = psArrayAlloc(list->size); 415 } else { 416 arr = psArrayAlloc(1); 417 417 } 418 418 … … 422 422 n = list->size; 423 423 for (int i = 0; i < n; i++) { 424 arr->data .PTR[i] = psMemIncrRefCounter(ptr->data);424 arr->data[i] = psMemIncrRefCounter(ptr->data); 425 425 ptr = ptr->next; 426 426 } … … 429 429 } 430 430 431 psList* ps VectorToList(psVector* arr)431 psList* psArrayToList(psArray* arr) 432 432 { 433 433 unsigned int n; … … 435 435 436 436 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.");442 437 return NULL; 443 438 } … … 446 441 n = arr->n; 447 442 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); 449 444 } 450 445 … … 455 450 psList* psListSort(psList* list, psComparePtrFcn compare) 456 451 { 457 ps Vector* vector;452 psArray* arr; 458 453 if (list == NULL) { 459 454 return NULL; … … 461 456 462 457 // convert to indexable vector for use by qsort. 463 vector = psListToVector(list);458 arr = psListToArray(list); 464 459 psFree(list); 465 460 466 qsort(vector->data.V, vector->n, sizeof(void*), 467 (int(*)(const void *, const void *))compare); 461 arr = psArraySort(arr,compare); 468 462 469 463 // convert back to linked list 470 list = ps VectorToList(vector);471 psFree( vector);464 list = psArrayToList(arr); 465 psFree(arr); 472 466 473 467 return list;
Note:
See TracChangeset
for help on using the changeset viewer.
