Index: trunk/psLib/src/xml/psXML.c
===================================================================
--- trunk/psLib/src/xml/psXML.c	(revision 3264)
+++ trunk/psLib/src/xml/psXML.c	(revision 3341)
@@ -9,6 +9,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.20 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-02-17 19:26:23 $
+*  @version $Revision: 1.21 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-02-28 23:34:10 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -101,8 +101,8 @@
 /*****************************************************************************/
 
-static void p_saxEndElement(void *ctx, const xmlChar *tagName);
-static void p_psInitVectorXml(void *ctx, char *tagName);
-static void p_psInitMetadataItemXml(void *ctx, char *tagName);
-static void p_saxStartElement(void *ctx, const xmlChar *tagName, const xmlChar **atts);
+static void saxEndElement(void *ctx, const xmlChar *tagName);
+static void initVectorXml(void *ctx, char *tagName);
+static void initMetadataItemXml(void *ctx, char *tagName);
+static void saxStartElement(void *ctx, const xmlChar *tagName, const xmlChar **atts);
 
 /** Determines if a line is blank (whitespace only) or a commentline. It returns true if so. The input string
@@ -307,5 +307,4 @@
 {
     psMetadataType type;
-    psElemType pType;
     psBool success = true;
 
@@ -315,25 +314,17 @@
 
     type = metadataItem->type;
-    pType = metadataItem->pType;
 
     switch(type) {
-    case PS_META_PRIMITIVE:
-        switch(pType) {
-        case PS_TYPE_BOOL:
-            fprintf(fd, format, metadataItem->data.B);
-            break;
-        case PS_TYPE_S32:
-            fprintf(fd,format, metadataItem->data.S32);
-            break;
-        case PS_TYPE_F32:
-            fprintf(fd, format, metadataItem->data.F32);
-            break;
-        case PS_TYPE_F64:
-            fprintf(fd, format, metadataItem->data.F64);
-            break;
-        default:
-            psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)pType);
-            success = false;
-        }
+    case PS_META_BOOL:
+        fprintf(fd, format, metadataItem->data.B);
+        break;
+    case PS_META_S32:
+        fprintf(fd,format, metadataItem->data.S32);
+        break;
+    case PS_META_F32:
+        fprintf(fd, format, metadataItem->data.F32);
+        break;
+    case PS_META_F64:
+        fprintf(fd, format, metadataItem->data.F64);
         break;
     case PS_META_STR:
@@ -419,19 +410,19 @@
         switch (keyType) {
         case 'I':
-            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_S32, PS_META_PRIMITIVE,
+            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_S32,
                                     keyComment, atoi(keyValue));
             break;
         case 'F':
-            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_F64, PS_META_PRIMITIVE,
+            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_F64,
                                     keyComment, atof(keyValue));
             break;
         case 'C':
-            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_PTR, PS_META_STR, keyComment,
-                                    keyValue);
+            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_STR,
+                                    keyComment, keyValue);
             break;
         case 'L':
             tempBool = (keyValue[0] == 'T') ? 1 : 0;
-            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_BOOL, PS_META_PRIMITIVE, keyComment,
-                                    tempBool);
+            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_BOOL,
+                                    keyComment, tempBool);
             break;
         case 'U':
@@ -460,4 +451,5 @@
     char *strComment = NULL;
     char *linePtr = NULL;
+    psElemType vecType = PS_TYPE_PTR;
     psS32 status = 0;
     psU32 lineCount = 0;
@@ -467,5 +459,4 @@
     psVector *tempVec = NULL;
     FILE *fp = NULL;
-    psElemType pType;
     psMetadataType mdType;
 
@@ -535,20 +526,14 @@
             } else if(!strncmp(strType, "*", 1)) {
                 mdType = PS_META_LIST;
-                pType = PS_TYPE_PTR;
             } else if(!strncmp(strType, "STR", 3)) {
                 mdType = PS_META_STR;
-                pType = PS_TYPE_PTR;
-            } else if(!strncmp(strType, "BOOL", 3)) {
-                mdType = PS_META_PRIMITIVE;
-                pType = PS_TYPE_BOOL;
+            } else if(!strncmp(strType, "BOOL", 4)) {
+                mdType = PS_META_BOOL;
             } else if(!strncmp(strType, "S32", 3)) {
-                mdType = PS_META_PRIMITIVE;
-                pType = PS_TYPE_S32;
+                mdType = PS_META_S32;
             } else if(!strncmp(strType, "F32", 3)) {
-                mdType = PS_META_PRIMITIVE;
-                pType = PS_TYPE_F32;
+                mdType = PS_META_F32;
             } else if(!strncmp(strType, "F64", 3)) {
-                mdType = PS_META_PRIMITIVE;
-                pType = PS_TYPE_F64;
+                mdType = PS_META_F64;
             } else {
                 (*nFail)++;
@@ -559,4 +544,5 @@
 
             if(*strName == '@') {
+                vecType = PS_META_PRIMITIVE_TYPE(mdType);
                 mdType = PS_META_VEC;
             }
@@ -604,13 +590,26 @@
             switch (mdType) {
             case PS_META_LIST:
-                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL);
+                psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL);
                 break;
             case PS_META_STR:
-                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, strValue);
+                psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, strValue);
                 break;
             case PS_META_VEC:
-                tempVec = parseVector(strValue, pType, &status);
+                tempVec = parseVector(strValue, vecType, &status);
                 if(!status) {
-                    psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, strComment, tempVec);
+                    psMetadataAdd(md, PS_LIST_TAIL, strName+1, mdType, strComment, tempVec);
+                } else {
+                    status = 0;
+                    (*nFail)++;
+                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName,
+                            strType, lineCount, fileName);
+                    continue;
+                }
+                psFree(tempVec);
+                break;
+            case PS_META_BOOL:
+                tempBool = parseBool(strValue, &status);
+                if(!status) {
+                    psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, tempBool);
                 } else {
                     status = 0;
@@ -621,50 +620,29 @@
                 }
                 break;
-            case PS_META_PRIMITIVE:
-                switch (pType) {
-                case PS_TYPE_BOOL:
-                    tempBool = parseBool(strValue, &status);
-                    if(!status) {
-                        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempBool);
-                    } else {
-                        status = 0;
-                        (*nFail)++;
-                        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName,
-                                strType, lineCount, fileName);
-                        continue;
-                    }
-                    break;
-                case PS_TYPE_S32:
-                    tempInt = (psS32)parseValue(strValue, &status);
-                    if(!status) {
-                        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempInt);
-                    } else {
-                        status = 0;
-                        (*nFail)++;
-                        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName,
-                                strType, lineCount, fileName);
-                        continue;
-                    }
-                    break;
-                case PS_TYPE_F32:
-                case PS_TYPE_F64:
-                    tempDbl = parseValue(strValue, &status);
-                    if(!status) {
-                        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempDbl);
-                    } else {
-                        status = 0;
-                        (*nFail)++;
-                        psError(PS_ERR_IO, true,
-                                PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, lineCount,
-                                fileName);
-                        continue;
-                    }
-                    break;
-                default:
+            case PS_META_S32:
+                tempInt = (psS32)parseValue(strValue, &status);
+                if(!status) {
+                    psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, tempInt);
+                } else {
+                    status = 0;
                     (*nFail)++;
-                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount,
+                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName,
+                            strType, lineCount, fileName);
+                    continue;
+                }
+                break;
+            case PS_META_F32:
+            case PS_META_F64:
+                tempDbl = parseValue(strValue, &status);
+                if(!status) {
+                    psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, tempDbl);
+                } else {
+                    status = 0;
+                    (*nFail)++;
+                    psError(PS_ERR_IO, true,
+                            PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, lineCount,
                             fileName);
                     continue;
-                } // switch
+                }
                 break;
             default:
@@ -682,5 +660,5 @@
 }
 
-static void p_saxStartElement(void *ctx, const xmlChar *tagName, const xmlChar **atts)
+static void saxStartElement(void *ctx, const xmlChar *tagName, const xmlChar **atts)
 {
     psU64 i = 0;
@@ -709,4 +687,5 @@
     // Metadata containter for housing element attributes used by other SAX events
     htAtts = psHashAlloc(10);
+
 
     // Get tag name
@@ -745,12 +724,14 @@
 
     // Add attributes to metadata
-    psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_TYPE_PTR, PS_META_HASH, NULL, htAtts);
+
+    psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_META_HASH, NULL, htAtts);
 
     psFree(psTagName);
+    psFree(htAtts);
 
     return;
 }
 
-static void p_psInitMetadataItemXml(void *ctx, char *tagName)
+static void initMetadataItemXml(void *ctx, char *tagName)
 {
     psBool overwrite = false;
@@ -760,6 +741,5 @@
     psF64 tempDbl = 0.0;
     psS32 tempInt = 0.0;
-    psElemType pType = PS_TYPE_PTR;
-    psMetadataType mdType = PS_META_PRIMITIVE;
+    psMetadataType mdType = PS_META_UNKNOWN;
     char *fileName = NULL;
     char *strName = NULL;
@@ -802,17 +782,12 @@
         if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) {
             mdType = PS_META_STR;
-            pType = PS_TYPE_PTR;
         } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) {
-            mdType = PS_META_PRIMITIVE;
-            pType = PS_TYPE_U8;
+            mdType = PS_META_BOOL;
         } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) {
-            mdType = PS_META_PRIMITIVE;
-            pType = PS_TYPE_S32;
+            mdType = PS_META_S32;
         } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) {
-            mdType = PS_META_PRIMITIVE;
-            pType = PS_TYPE_F32;
+            mdType = PS_META_F32;
         } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) {
-            mdType = PS_META_PRIMITIVE;
-            pType = PS_TYPE_F64;
+            mdType = PS_META_F64;
         } else {
             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strType, lineNumber,
@@ -853,45 +828,39 @@
     switch(mdType) {
     case PS_META_LIST:
-        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL);
+        psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL);
         break;
     case PS_META_STR:
-        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, strValue);
+        psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, strValue);
         break;
-    case PS_META_PRIMITIVE:
-        switch(pType) {
-        case PS_TYPE_BOOL:
-            tempBool = parseBool((char*)strValue, &status);
-            if(!status) {
-                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempBool);
-            } else {
-                status = 0;
-                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
-                        lineNumber, fileName);
-            }
-            break;
-        case PS_TYPE_S32:
-            tempInt = (psS32)parseValue((char*)strValue, &status);
-            if(!status) {
-                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempInt);
-            } else {
-                status = 0;
-                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
-                        lineNumber, fileName);
-            }
-            break;
-        case PS_TYPE_F32:
-        case PS_TYPE_F64:
-            tempDbl = parseValue((char*)strValue, &status);
-            if(!status) {
-                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempDbl);
-            } else {
-                status = 0;
-                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
-                        lineNumber, fileName);
-            }
-            break;
-        default:
-            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineNumber, fileName);
-        } // End switch
+    case PS_META_BOOL:
+        tempBool = parseBool((char*)strValue, &status);
+        if(!status) {
+            psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempBool);
+        } else {
+            status = 0;
+            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
+                    lineNumber, fileName);
+        }
+        break;
+    case PS_META_S32:
+        tempInt = (psS32)parseValue((char*)strValue, &status);
+        if(!status) {
+            psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempInt);
+        } else {
+            status = 0;
+            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
+                    lineNumber, fileName);
+        }
+        break;
+    case PS_META_F32:
+    case PS_META_F64:
+        tempDbl = parseValue((char*)strValue, &status);
+        if(!status) {
+            psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempDbl);
+        } else {
+            status = 0;
+            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
+                    lineNumber, fileName);
+        }
         break;
     default:
@@ -899,10 +868,9 @@
     } // End switch
 
-
     return;
 }
 
 
-static void p_psInitVectorXml(void *ctx, char *tagName)
+static void initVectorXml(void *ctx, char *tagName)
 {
     bool overwrite = false;
@@ -910,5 +878,4 @@
     psU32 lineNumber = 0;
     psElemType pType = PS_TYPE_PTR;
-    psMetadataType mdType = PS_META_PRIMITIVE;
     char *strName = NULL;
     char *strType = NULL;
@@ -952,18 +919,11 @@
     strType = psHashLookup(htAtts, "psType");
     if(strType!= NULL) {
-        if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) {
-            mdType = PS_META_STR;
-            pType = PS_TYPE_PTR;
-        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) {
-            mdType = PS_META_PRIMITIVE;
+        if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) {
             pType = PS_TYPE_U8;
         } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) {
-            mdType = PS_META_PRIMITIVE;
             pType = PS_TYPE_S32;
         } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) {
-            mdType = PS_META_PRIMITIVE;
             pType = PS_TYPE_F32;
         } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) {
-            mdType = PS_META_PRIMITIVE;
             pType = PS_TYPE_F64;
         } else {
@@ -1006,5 +966,5 @@
     vec = parseVector((char*)strValue, pType, &status);
     if(!status) {
-        psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, NULL, vec);
+        psMetadataAdd(md, PS_LIST_TAIL, strName+1, PS_META_VEC, NULL, vec);
     } else {
         psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
@@ -1014,5 +974,5 @@
 }
 
-static void p_saxEndElement(void *ctx, const xmlChar *tagName)
+static void saxEndElement(void *ctx, const xmlChar *tagName)
 {
     char *psStartTagName = NULL;
@@ -1052,7 +1012,7 @@
     // Initialize psLib structs
     if(!strcmp(psEndTagName, "psMetadataItem")) {
-        p_psInitMetadataItemXml(ctx, psEndTagName);
+        initMetadataItemXml(ctx, psEndTagName);
     } else if(!strcmp(psEndTagName, "psVector")) {
-        p_psInitVectorXml(ctx, psEndTagName);
+        initVectorXml(ctx, psEndTagName);
     } else if(strcmp(psEndTagName, "psRoot")) {
         psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TAG_UNKNOWN, psEndTagName);
@@ -1095,6 +1055,6 @@
     saxHandler.startDocument            = NULL;
     saxHandler.endDocument              = NULL;
-    saxHandler.startElement             = p_saxStartElement;
-    saxHandler.endElement               = p_saxEndElement;
+    saxHandler.startElement             = saxStartElement;
+    saxHandler.endElement               = saxEndElement;
     saxHandler.reference                = NULL;
     saxHandler.characters               = NULL;
