IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 14267


Ignore:
Timestamp:
Jul 17, 2007, 10:32:02 AM (19 years ago)
Author:
Paul Price
Message:

Adding function to sort vectors in-place.

Location:
trunk/psLib/src/mathtypes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/mathtypes/psVector.c

    r12431 r14267  
    1010*  @author Joshua Hoblitt, University of Hawaii
    1111*
    12 *  @version $Revision: 1.96 $ $Name: not supported by cvs2svn $
    13 *  @date $Date: 2007-03-14 00:39:51 $
     12*  @version $Revision: 1.97 $ $Name: not supported by cvs2svn $
     13*  @date $Date: 2007-07-17 20:32:02 $
    1414*
    1515*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    347347case PS_TYPE_##NAME: { \
    348348    ps##NAME temp; \
    349     ps##NAME *value = outVector->data.NAME; \
     349    ps##NAME *value = vector->data.NAME; \
    350350    for (;;) { \
    351351        if (l > 0) { \
     
    356356            if (--ir == 0) { \
    357357                value[0] = temp; \
    358                 return outVector; \
     358                return true; \
    359359            } \
    360360        } \
     
    376376break;
    377377
    378 psVector* psVectorSort(psVector* outVector,
    379                        const psVector* inVector)
    380 {
    381     if (!inVector) {
    382         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    383                 _("psVectorSort can not sort a NULL psVector."));
    384         psFree(outVector);
    385         return NULL;
    386     }
    387 
    388     outVector = psVectorCopy(outVector, inVector, inVector->type.type);
    389     if (outVector == NULL) {
    390         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    391                 "Error in psVectorSort:  psVectorCopy returned NULL vector!\n");
    392         return NULL;
    393     }
    394     long N = outVector->n;                    // Number of elements
     378bool psVectorSortInPlace(const psVector *vector)
     379{
     380    PS_ASSERT_VECTOR_NON_NULL(vector, false);
     381
     382    long N = vector->n;                    // Number of elements
    395383    if (N < 2) {
    396         return outVector;
     384        return true;
    397385    }
    398386    long l = N >> 1;
    399387    long ir = N - 1;
    400     switch (outVector->type.type) {
     388    switch (vector->type.type) {
    401389        PSVECTOR_SORT_CASE(U8);
    402390        PSVECTOR_SORT_CASE(U16);
     
    412400        psError(PS_ERR_BAD_PARAMETER_TYPE, true,
    413401                _("Input psVector is an unsupported type (0x%x)."),
    414                 inVector->type.type);
     402                vector->type.type);
     403        return false;
     404    }
     405    return true;
     406}
     407
     408psVector* psVectorSort(psVector* outVector,
     409                       const psVector* inVector)
     410{
     411    if (!inVector) {
     412        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     413                _("psVectorSort can not sort a NULL psVector."));
    415414        psFree(outVector);
    416415        return NULL;
    417416    }
     417
     418    if (outVector != inVector) {
     419        outVector = psVectorCopy(outVector, inVector, inVector->type.type);
     420        if (!outVector) {
     421            psError(PS_ERR_BAD_PARAMETER_NULL, true,
     422                    "Error in psVectorSort:  psVectorCopy returned NULL vector!\n");
     423            return NULL;
     424        }
     425    }
     426
     427    if (!psVectorSortInPlace(outVector)) {
     428        psFree(outVector);
     429        return NULL;
     430    }
     431
    418432    return outVector;
    419433}
  • trunk/psLib/src/mathtypes/psVector.h

    r12431 r14267  
    1010 * @author Joshua Hoblitt, University of Hawaii
    1111 *
    12  * @version $Revision: 1.67 $ $Name: not supported by cvs2svn $
    13  * @date $Date: 2007-03-14 00:39:51 $
     12 * @version $Revision: 1.68 $ $Name: not supported by cvs2svn $
     13 * @date $Date: 2007-07-17 20:32:02 $
    1414 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
    1515 */
     
    222222#endif // ifdef DOXYGEN
    223223
     224/** Sort a vector in-place
     225 *
     226 * Sorts in ascending order
     227 *
     228 * @return  bool           Success or failure
     229 */
     230bool psVectorSortInPlace(const psVector *vector ///< Vector to sort
     231    );
    224232
    225233/** Sort an array of floats.
Note: See TracChangeset for help on using the changeset viewer.