Index: trunk/psLib/src/types/psMetadataItemCompare.c
===================================================================
--- trunk/psLib/src/types/psMetadataItemCompare.c	(revision 20462)
+++ trunk/psLib/src/types/psMetadataItemCompare.c	(revision 20479)
@@ -66,24 +66,14 @@
 
 
-// Operations for comparison
-typedef enum {
-    COMPARE_OP_EQ,                      // Equality
-    COMPARE_OP_LT,                      // Less than
-    COMPARE_OP_LE,                      // Less than or equal
-    COMPARE_OP_GT,                      // Greater than
-    COMPARE_OP_GE,                      // Greater than or equal
-    COMPARE_OP_NE                       // Not equal
-} compareOp;
-
-/* determine boolean operator specified in comment: OP: XX (default is ==) */
-compareOp getCompareOp(const psMetadataItem *item) {
-
-    if (!item->comment) {
-        return COMPARE_OP_EQ;
+psMetadataItemCompareOp psMetadataItemCompareOperation(const psMetadataItem *item)
+{
+    // Default is equality
+    if (!item || !item->comment) {
+        return PS_METADATA_ITEM_COMPARE_OP_NONE;
     }
 
     char *p1 = strstr(item->comment, "OP:");
     if (!p1) {
-        return COMPARE_OP_EQ;
+        return PS_METADATA_ITEM_COMPARE_OP_NONE;
     }
     p1 += 3; // point to first char after @OP:
@@ -92,24 +82,18 @@
     }
 
-    // the string starting at p1 must contain one of the following:
-    // == or = COMPARE_OP_EQ,
-    // < COMPARE_OP_LT,
-    // <= COMPARE_OP_LE,
-    // > COMPARE_OP_GT,
-    // >= COMPARE_OP_GE,
-    // ! COMPARE_OP_NE
-
     // XXX a bit crude: does not catch the case of invalid chars after boolean op
-    if (!strncmp (p1, "==", 2)) return COMPARE_OP_EQ;
-    if (!strncmp (p1, "=",  1)) return COMPARE_OP_EQ;
-    if (!strncmp (p1, "<=", 2)) return COMPARE_OP_LE;
-    if (!strncmp (p1, "<",  1)) return COMPARE_OP_LT;
-    if (!strncmp (p1, ">=", 2)) return COMPARE_OP_GE;
-    if (!strncmp (p1, ">",  1)) return COMPARE_OP_GT;
-
-    return COMPARE_OP_EQ;
+    if (!strncmp(p1, "==", 2)) return PS_METADATA_ITEM_COMPARE_OP_EQ;
+    if (!strncmp(p1, "=",  1)) return PS_METADATA_ITEM_COMPARE_OP_EQ;
+    if (!strncmp(p1, "<=", 2)) return PS_METADATA_ITEM_COMPARE_OP_LE;
+    if (!strncmp(p1, "<",  1)) return PS_METADATA_ITEM_COMPARE_OP_LT;
+    if (!strncmp(p1, ">=", 2)) return PS_METADATA_ITEM_COMPARE_OP_GE;
+    if (!strncmp(p1, ">",  1)) return PS_METADATA_ITEM_COMPARE_OP_GT;
+    if (!strncmp(p1, "!",  1)) return PS_METADATA_ITEM_COMPARE_OP_NE;
+
+    return PS_METADATA_ITEM_COMPARE_OP_NONE;
 }
 
 // XXX better value for tolerance?
+// XXX Put tolerance in metadata comment?
 #define EQ_TOL 1e-6                     // Tolerance for equality
 
@@ -117,8 +101,9 @@
 #define COMPARE_VALUES(TEMPLATE, COMPARE, FLOATINGPOINT) { \
      /* does template specify a boolean operation in comment? */ \
-     compareOp op = getCompareOp(template);  \
+     psMetadataItemCompareOp op = psMetadataItemCompareOperation(template);  \
      psTrace("psLib.types", 10, "Comparing %f %x %f\n", (float)(COMPARE), op, (float)(TEMPLATE)); \
      switch (op) { \
-       case COMPARE_OP_EQ: \
+       case PS_METADATA_ITEM_COMPARE_OP_NONE: /* Default is equality */ \
+       case PS_METADATA_ITEM_COMPARE_OP_EQ: \
          if (FLOATINGPOINT) { \
              return fabs((TEMPLATE) - ((COMPARE))) < EQ_TOL; \
@@ -126,13 +111,13 @@
              return (TEMPLATE) == (COMPARE); \
          } \
-       case COMPARE_OP_LT: \
+       case PS_METADATA_ITEM_COMPARE_OP_LT: \
          return (COMPARE) < (TEMPLATE); \
-       case COMPARE_OP_LE: \
+       case PS_METADATA_ITEM_COMPARE_OP_LE: \
          return (COMPARE) <= (TEMPLATE); \
-       case COMPARE_OP_GT: \
+       case PS_METADATA_ITEM_COMPARE_OP_GT: \
          return (COMPARE) > (TEMPLATE); \
-       case COMPARE_OP_GE: \
+       case PS_METADATA_ITEM_COMPARE_OP_GE: \
          return (COMPARE) >= (TEMPLATE); \
-       case COMPARE_OP_NE: \
+       case PS_METADATA_ITEM_COMPARE_OP_NE: \
          return (COMPARE) != (TEMPLATE); \
        default: \
Index: trunk/psLib/src/types/psMetadataItemCompare.h
===================================================================
--- trunk/psLib/src/types/psMetadataItemCompare.h	(revision 20462)
+++ trunk/psLib/src/types/psMetadataItemCompare.h	(revision 20479)
@@ -7,6 +7,6 @@
  *  @author IFA
  *
- *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-01-23 22:47:23 $
+ *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2008-10-31 00:32:19 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -20,4 +20,20 @@
 /// @addtogroup DataContainer Data Containers
 /// @{
+
+/// Operations for comparing a metadata item
+typedef enum {
+    PS_METADATA_ITEM_COMPARE_OP_NONE,   // No operation specified
+    PS_METADATA_ITEM_COMPARE_OP_EQ,     // Equality
+    PS_METADATA_ITEM_COMPARE_OP_LT,     // Less than
+    PS_METADATA_ITEM_COMPARE_OP_LE,     // Less than or equal
+    PS_METADATA_ITEM_COMPARE_OP_GT,     // Greater than
+    PS_METADATA_ITEM_COMPARE_OP_GE,     // Greater than or equal
+    PS_METADATA_ITEM_COMPARE_OP_NE      // Not equal
+} psMetadataItemCompareOp;
+
+/// Get the comparison operation from a metadata item
+psMetadataItemCompareOp psMetadataItemCompareOperation(const psMetadataItem *item // Item of interest
+    );
+
 
 /** Compares two psMetadataItems.
