Changeset 20479
- Timestamp:
- Oct 30, 2008, 2:32:19 PM (18 years ago)
- Location:
- trunk/psLib/src/types
- Files:
-
- 2 edited
-
psMetadataItemCompare.c (modified) (4 diffs)
-
psMetadataItemCompare.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/types/psMetadataItemCompare.c
r19984 r20479 66 66 67 67 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; 68 psMetadataItemCompareOp psMetadataItemCompareOperation(const psMetadataItem *item) 69 { 70 // Default is equality 71 if (!item || !item->comment) { 72 return PS_METADATA_ITEM_COMPARE_OP_NONE; 83 73 } 84 74 85 75 char *p1 = strstr(item->comment, "OP:"); 86 76 if (!p1) { 87 return COMPARE_OP_EQ;77 return PS_METADATA_ITEM_COMPARE_OP_NONE; 88 78 } 89 79 p1 += 3; // point to first char after @OP: … … 92 82 } 93 83 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_NE101 102 84 // 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; 111 94 } 112 95 113 96 // XXX better value for tolerance? 97 // XXX Put tolerance in metadata comment? 114 98 #define EQ_TOL 1e-6 // Tolerance for equality 115 99 … … 117 101 #define COMPARE_VALUES(TEMPLATE, COMPARE, FLOATINGPOINT) { \ 118 102 /* does template specify a boolean operation in comment? */ \ 119 compareOp op = getCompareOp(template); \103 psMetadataItemCompareOp op = psMetadataItemCompareOperation(template); \ 120 104 psTrace("psLib.types", 10, "Comparing %f %x %f\n", (float)(COMPARE), op, (float)(TEMPLATE)); \ 121 105 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: \ 123 108 if (FLOATINGPOINT) { \ 124 109 return fabs((TEMPLATE) - ((COMPARE))) < EQ_TOL; \ … … 126 111 return (TEMPLATE) == (COMPARE); \ 127 112 } \ 128 case COMPARE_OP_LT: \113 case PS_METADATA_ITEM_COMPARE_OP_LT: \ 129 114 return (COMPARE) < (TEMPLATE); \ 130 case COMPARE_OP_LE: \115 case PS_METADATA_ITEM_COMPARE_OP_LE: \ 131 116 return (COMPARE) <= (TEMPLATE); \ 132 case COMPARE_OP_GT: \117 case PS_METADATA_ITEM_COMPARE_OP_GT: \ 133 118 return (COMPARE) > (TEMPLATE); \ 134 case COMPARE_OP_GE: \119 case PS_METADATA_ITEM_COMPARE_OP_GE: \ 135 120 return (COMPARE) >= (TEMPLATE); \ 136 case COMPARE_OP_NE: \121 case PS_METADATA_ITEM_COMPARE_OP_NE: \ 137 122 return (COMPARE) != (TEMPLATE); \ 138 123 default: \ -
trunk/psLib/src/types/psMetadataItemCompare.h
r11248 r20479 7 7 * @author IFA 8 8 * 9 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $10 * @date $Date: 200 7-01-23 22:47:23$9 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2008-10-31 00:32:19 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 20 20 /// @addtogroup DataContainer Data Containers 21 21 /// @{ 22 23 /// Operations for comparing a metadata item 24 typedef 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 35 psMetadataItemCompareOp psMetadataItemCompareOperation(const psMetadataItem *item // Item of interest 36 ); 37 22 38 23 39 /** Compares two psMetadataItems.
Note:
See TracChangeset
for help on using the changeset viewer.
