-/* Attribute flags */
-enum AttrFlags {
- afNone,
- afInt, /* Integer number */
-};
-typedef enum AttrFlags AttrFlags;
-
-/* */
+/* Attribute structure */
typedef struct Attr Attr;
struct Attr {
- AttrFlags Flags; /* Attribute flags */
- char* Name; /* Attribute name */
- char Value[1]; /* Attribute value */
+ char* Name; /* Attribute name - points into Value */
+ char Value[1]; /* Attribute value followed by Name */
};
Attr* NewAttr (const char* Name, const char* Value);
/* Create a new attribute */
+void FreeAttr (Attr* A);
+/* Free an attribute structure */
+
void DumpAttrColl (const Collection* C);
/* Dump a collection of attribute/value pairs for debugging */
* will contain the insert position.
*/
+const Attr* GetAttr (const Collection* C, const char* Name);
+/* Search for an attribute with the given name and return it. The function
+ * returns NULL if the attribute wasn't found.
+ */
+
+const Attr* NeedAttr (const Collection* C, const char* Name, const char* Op);
+/* Search for an attribute with the given name and return it. If the attribute
+ * is not found, the function terminates with an error using Op as additional
+ * context in the error message.
+ */
+
+const char* GetAttrVal (const Collection* C, const char* Name);
+/* Search for an attribute with the given name and return its value. The
+ * function returns NULL if the attribute wasn't found.
+ */
+
+const char* NeedAttrVal (const Collection* C, const char* Name, const char* Op);
+/* Search for an attribute with the given name and return its value. If the
+ * attribute wasn't not found, the function terminates with an error using
+ * Op as additional context in the error message.
+ */
+
void AddAttr (Collection* C, const char* Name, const char* Value);
/* Add an attribute to an alphabetically sorted attribute collection */
* Name is NULL, terminate with an error.
*/
+Collection* ParseAttrList (const char* List, const char** NameList, unsigned NameCount);
+/* Parse a list containing name/value pairs into a sorted collection. Some
+ * attributes may not need a name, so NameList contains these names. If there
+ * were no errors, the function returns a alphabetically sorted collection
+ * containing Attr entries.
+ */
+
+void FreeAttrList (Collection* C);
+/* Free a list of attributes */
+
/* End of attr.h */