IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 20479


Ignore:
Timestamp:
Oct 30, 2008, 2:32:19 PM (18 years ago)
Author:
Paul Price
Message:

Making the comparison operation buried in a metadata comment accessible outside of psLib.

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

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/types/psMetadataItemCompare.c

    r19984 r20479  
    6666
    6767
    68 // Operations for comparison
    69 typedef enum {
    70     COMPARE_OP_EQ,                      // Equality
    71     COMPARE_OP_LT,                      // Less than
    72     COMPARE_OP_LE,                      // Less than or equal
    73     COMPARE_OP_GT,                      // Greater than
    74     COMPARE_OP_GE,                      // Greater than or equal
    75     COMPARE_OP_NE                       // Not equal
    76 } compareOp;
    77 
    78 /* determine boolean operator specified in comment: OP: XX (default is ==) */
    79 compareOp getCompareOp(const psMetadataItem *item) {
    80 
    81     if (!item->comment) {
    82         return COMPARE_OP_EQ;
     68psMetadataItemCompareOp psMetadataItemCompareOperation(const psMetadataItem *item)
     69{
     70    // Default is equality
     71    if (!item || !item->comment) {
     72        return PS_METADATA_ITEM_COMPARE_OP_NONE;
    8373    }
    8474
    8575    char *p1 = strstr(item->comment, "OP:");
    8676    if (!p1) {
    87         return COMPARE_OP_EQ;
     77        return PS_METADATA_ITEM_COMPARE_OP_NONE;
    8878    }
    8979    p1 += 3; // point to first char after @OP:
     
    9282    }
    9383
    94     // the string starting at p1 must contain one of the following:
    95     // == or = COMPARE_OP_EQ,
    96     // < COMPARE_OP_LT,
    97     // <= COMPARE_OP_LE,
    98     // > COMPARE_OP_GT,
    99     // >= COMPARE_OP_GE,
    100     // ! COMPARE_OP_NE
    101 
    10284    // XXX a bit crude: does not catch the case of invalid chars after boolean op
    103     if (!strncmp (p1, "==", 2)) return COMPARE_OP_EQ;
    104     if (!strncmp (p1, "=",  1)) return COMPARE_OP_EQ;
    105     if (!strncmp (p1, "<=", 2)) return COMPARE_OP_LE;
    106     if (!strncmp (p1, "<",  1)) return COMPARE_OP_LT;
    107     if (!strncmp (p1, ">=", 2)) return COMPARE_OP_GE;
    108     if (!strncmp (p1, ">",  1)) return COMPARE_OP_GT;
    109 
    110     return COMPARE_OP_EQ;
     85    if (!strncmp(p1, "==", 2)) return PS_METADATA_ITEM_COMPARE_OP_EQ;
     86    if (!strncmp(p1, "=",  1)) return PS_METADATA_ITEM_COMPARE_OP_EQ;
     87    if (!strncmp(p1, "<=", 2)) return PS_METADATA_ITEM_COMPARE_OP_LE;
     88    if (!strncmp(p1, "<",  1)) return PS_METADATA_ITEM_COMPARE_OP_LT;
     89    if (!strncmp(p1, ">=", 2)) return PS_METADATA_ITEM_COMPARE_OP_GE;
     90    if (!strncmp(p1, ">",  1)) return PS_METADATA_ITEM_COMPARE_OP_GT;
     91    if (!strncmp(p1, "!",  1)) return PS_METADATA_ITEM_COMPARE_OP_NE;
     92
     93    return PS_METADATA_ITEM_COMPARE_OP_NONE;
    11194}
    11295
    11396// XXX better value for tolerance?
     97// XXX Put tolerance in metadata comment?
    11498#define EQ_TOL 1e-6                     // Tolerance for equality
    11599
     
    117101#define COMPARE_VALUES(TEMPLATE, COMPARE, FLOATINGPOINT) { \
    118102     /* does template specify a boolean operation in comment? */ \
    119      compareOp op = getCompareOp(template);  \
     103     psMetadataItemCompareOp op = psMetadataItemCompareOperation(template);  \
    120104     psTrace("psLib.types", 10, "Comparing %f %x %f\n", (float)(COMPARE), op, (float)(TEMPLATE)); \
    121105     switch (op) { \
    122        case COMPARE_OP_EQ: \
     106       case PS_METADATA_ITEM_COMPARE_OP_NONE: /* Default is equality */ \
     107       case PS_METADATA_ITEM_COMPARE_OP_EQ: \
    123108         if (FLOATINGPOINT) { \
    124109             return fabs((TEMPLATE) - ((COMPARE))) < EQ_TOL; \
     
    126111             return (TEMPLATE) == (COMPARE); \
    127112         } \
    128        case COMPARE_OP_LT: \
     113       case PS_METADATA_ITEM_COMPARE_OP_LT: \
    129114         return (COMPARE) < (TEMPLATE); \
    130        case COMPARE_OP_LE: \
     115       case PS_METADATA_ITEM_COMPARE_OP_LE: \
    131116         return (COMPARE) <= (TEMPLATE); \
    132        case COMPARE_OP_GT: \
     117       case PS_METADATA_ITEM_COMPARE_OP_GT: \
    133118         return (COMPARE) > (TEMPLATE); \
    134        case COMPARE_OP_GE: \
     119       case PS_METADATA_ITEM_COMPARE_OP_GE: \
    135120         return (COMPARE) >= (TEMPLATE); \
    136        case COMPARE_OP_NE: \
     121       case PS_METADATA_ITEM_COMPARE_OP_NE: \
    137122         return (COMPARE) != (TEMPLATE); \
    138123       default: \
  • trunk/psLib/src/types/psMetadataItemCompare.h

    r11248 r20479  
    77 *  @author IFA
    88 *
    9  *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2007-01-23 22:47:23 $
     9 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2008-10-31 00:32:19 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    2020/// @addtogroup DataContainer Data Containers
    2121/// @{
     22
     23/// Operations for comparing a metadata item
     24typedef enum {
     25    PS_METADATA_ITEM_COMPARE_OP_NONE,   // No operation specified
     26    PS_METADATA_ITEM_COMPARE_OP_EQ,     // Equality
     27    PS_METADATA_ITEM_COMPARE_OP_LT,     // Less than
     28    PS_METADATA_ITEM_COMPARE_OP_LE,     // Less than or equal
     29    PS_METADATA_ITEM_COMPARE_OP_GT,     // Greater than
     30    PS_METADATA_ITEM_COMPARE_OP_GE,     // Greater than or equal
     31    PS_METADATA_ITEM_COMPARE_OP_NE      // Not equal
     32} psMetadataItemCompareOp;
     33
     34/// Get the comparison operation from a metadata item
     35psMetadataItemCompareOp psMetadataItemCompareOperation(const psMetadataItem *item // Item of interest
     36    );
     37
    2238
    2339/** Compares two psMetadataItems.
Note: See TracChangeset for help on using the changeset viewer.