Index: trunk/psLib/src/collections/psMetadata.h
===================================================================
--- trunk/psLib/src/collections/psMetadata.h	(revision 2521)
+++ trunk/psLib/src/collections/psMetadata.h	(revision 2607)
@@ -11,6 +11,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.26 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2004-11-30 00:27:14 $
+*  @version $Revision: 1.27 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2004-12-03 23:14:34 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -33,42 +33,17 @@
  */
 typedef enum {
-    PS_META_ITEM_SET = 0,              ///< Null. Metadata is in psMetadataItem.items
-    PS_META_BOOL,                      ///< Boolean data.
-    PS_META_S32,                       ///< Signed 32-bit integer data.
-    PS_META_F32,                       ///< Single-precision float data.
-    PS_META_F64,                       ///< Double-precision float data.
-    PS_META_STR,                       ///< String data (Stored in as psPtr ).
-    PS_META_VEC,                       ///< Vector data (Stored in as psPtr ).
-    PS_META_HASH,                      ///< Hash data (Stored in as psPtr ).
-    PS_META_IMG,                       ///< Image data (Stored in as psPtr ).
-    PS_META_LOOKUPTABLE,               ///< Lookup table data (Stored as void *).
-    PS_META_JPEG,                      ///< JPEG data (Stored in as psPtr ).
-    PS_META_PNG,                       ///< PNG data (Stored in as psPtr ).
-    PS_META_ASTROM,                    ///< Astrometric coefficients (Stored in as psPtr ).
-    PS_META_UNKNOWN,                   ///< Other data (Stored in as psPtr ).
+    PS_META_PRIMITIVE,                 ///< Primitive data.
+    PS_META_LIST,                      ///< List data (Stored as item.data.list).
+    PS_META_STR,                       ///< String data (Stored as item.data.V).
+    PS_META_VEC,                       ///< Vector data (Stored as item.data.V).
+    PS_META_IMG,                       ///< Image data (Stored as item.data.V).
+    PS_META_HASH,                      ///< Hash data (Stored as item.data.V).
+    PS_META_LOOKUPTABLE,               ///< Lookup table data (Stored as item.data.V).
+    PS_META_JPEG,                      ///< JPEG data (Stored as item.data.V).
+    PS_META_PNG,                       ///< PNG data (Stored as item.data.V).
+    PS_META_ASTROM,                    ///< Astrometric coefficients (Stored as item.data.V).
+    PS_META_UNKNOWN,                   ///< Other data (Stored as item.data.V).
     PS_META_NTYPE                      ///< Number of types. Must be last.
 } psMetadataType;
-
-/** Metadata item data structure.
- *
- * Struct for maintaining metadata items of varying types. It also contains
- * information about the item name, flags, comments, and other items with the same name.
- */
-typedef struct psMetadataItem
-{
-    const psS32 id;                      ///< Unique ID for metadata item.
-    char *restrict name;               ///< Name of metadata item.
-    psMetadataType type;               ///< Type of metadata item.
-    union {
-        psBool B;                        ///< boolean data
-        psS32 S32;                     ///< Signed 32-bit integer data.
-        psF32 F32;                     ///< Single-precision float data.
-        psF64 F64;                     ///< Double-precision float data.
-        psPtr V;                       ///< Pointer to other type of data.
-    } data;                            ///< Union for data types.
-    char *comment;                     ///< Optional comment ("", not NULL).
-    psList* restrict items;            ///< List of psMetadataItems with same name.
-}
-psMetadataItem;
 
 /** Metadata data structure.
@@ -85,4 +60,28 @@
 }
 psMetadata;
+
+/** Metadata item data structure.
+ *
+ * Struct for maintaining metadata items of varying types. It also contains
+ * information about the item name, flags, comments, and other items with the same name.
+ */
+typedef struct psMetadataItem
+{
+    const psS32 id;                    ///< Unique ID for metadata item.
+    char *name;                        ///< Name of metadata item.
+    psMetadataType type;               ///< Type of metadata item.
+    psElemType pType;                  ///< Primitive data type
+    union {
+        psBool B;                      ///< boolean data
+        psS32 S32;                     ///< Signed 32-bit integer data.
+        psF32 F32;                     ///< Single-precision float data.
+        psF64 F64;                     ///< Double-precision float data.
+        psList *list;                  ///< List data.
+        psMetadata *md;                ///< Metadata data.
+        psPtr V;                       ///< Pointer to other type of data.
+    } data;                            ///< Union for data types.
+    char *comment;                     ///< Optional comment ("", not NULL).
+}
+psMetadataItem;
 
 /** Create a metadata item.
@@ -103,4 +102,5 @@
 psMetadataItem* psMetadataItemAlloc(
     const char *name,                  ///< Name of metadata item.
+    psElemType pType,                  ///< Primitive type.
     psMetadataType type,               ///< Type of metadata item.
     const char *comment,               ///< Comment for metadata item.
@@ -125,4 +125,5 @@
 psMetadataItem* psMetadataItemAllocV(
     const char *name,                  ///< Name of metadata item.
+    psElemType pType,                  ///< Primitive type.
     psMetadataType type,               ///< Type of metadata item.
     const char *comment,               ///< Comment for metadata item.
@@ -149,5 +150,5 @@
     psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
     psMetadataItem* restrict item,     ///< Metadata item to be added.
-    psS32 location                       ///< Location to be added.
+    psS32 location                     ///< Location to be added.
 );
 
@@ -160,6 +161,7 @@
 psBool psMetadataAdd(
     psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
-    psS32 where,                         ///< Location to be added.
+    psS32 where,                       ///< Location to be added.
     const char *name,                  ///< Name of metadata item.
+    psElemType pType,                  ///< Primitive type.
     psMetadataType type,               ///< Type of metadata item.
     const char *comment,               ///< Comment for metadata item.
@@ -179,5 +181,5 @@
 psBool psMetadataRemove(
     psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
-    psS32 where,                         ///< Location to be removed.
+    psS32 where,                       ///< Location to be removed.
     const char *restrict key           ///< Name of metadata key.
 );
@@ -205,5 +207,5 @@
 psMetadataItem* psMetadataGet(
     psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
-    psS32 where                          ///< Location to be retrieved.
+    psS32 where                        ///< Location to be retrieved.
 );
 
@@ -217,5 +219,5 @@
 psBool psMetadataSetIterator(
     psMetadata* restrict md,           ///< Metadata collection to iterate.
-    psS32 where                          ///< Location of iterator.
+    psS32 where                        ///< Location of iterator.
 );
 
@@ -229,5 +231,5 @@
     psMetadata* restrict md,           ///< Metadata collection to iterate.
     const char *restrict match,        ///< Beginning of key name.
-    psS32 which                          ///< Iterator to be used.
+    psS32 which                        ///< Iterator to be used.
 );
 
@@ -241,5 +243,5 @@
     psMetadata* restrict md,           ///< Metadata collection to iterate.
     const char *restrict match,        ///< Beginning of key name.
-    psS32 which                          ///< Iterator to be used.
+    psS32 which                        ///< Iterator to be used.
 );
 
