xmlsecurityengine/xmlsec/inc/xmlsec_list.h
changeset 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xmlsecurityengine/xmlsec/inc/xmlsec_list.h	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,195 @@
+/** 
+ * XML Security Library (http://www.aleksey.com/xmlsec).
+ *
+ * List of pointers.
+ *
+ * This is free software; see Copyright file in the source
+ * distribution for preciese wording.
+ * 
+ * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
+ * Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. 
+ */
+#ifndef __XMLSEC_LIST_H__
+#define __XMLSEC_LIST_H__    
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */ 
+
+#include "xmlsec_config.h"
+
+#include "xmlsec_xmlsec.h"
+#include "xmlsec_buffer.h"
+
+typedef const struct _xmlSecPtrListKlass			xmlSecPtrListKlass, 
+								*xmlSecPtrListId;
+typedef struct _xmlSecPtrList 					xmlSecPtrList, 
+								*xmlSecPtrListPtr;
+
+/**
+ * xmlSecPtrList:
+ * @id:				the list items description.
+ * @data:			the list data.
+ * @use:			the current list size.
+ * @max:			the max (allocated) list size.
+ * @allocMode:			the memory allocation mode.
+ * 
+ * The pointers list.
+ */
+struct _xmlSecPtrList {
+    xmlSecPtrListId		id;        
+
+    xmlSecPtr*			data;
+    xmlSecSize			use;
+    xmlSecSize			max;
+    xmlSecAllocMode 		allocMode;
+};
+
+XMLSEC_EXPORT void		xmlSecPtrListSetDefaultAllocMode(xmlSecAllocMode defAllocMode,
+								 xmlSecSize defInitialSize);
+
+
+XMLSEC_EXPORT int		xmlSecPtrListInitialize		(xmlSecPtrListPtr list,
+								 xmlSecPtrListId id);
+XMLSEC_EXPORT void		xmlSecPtrListFinalize		(xmlSecPtrListPtr list);
+XMLSEC_EXPORT xmlSecPtrListPtr	xmlSecPtrListCreate		(xmlSecPtrListId id);
+XMLSEC_EXPORT void		xmlSecPtrListDestroy		(xmlSecPtrListPtr list);
+XMLSEC_EXPORT void		xmlSecPtrListEmpty		(xmlSecPtrListPtr list);
+
+XMLSEC_EXPORT int		xmlSecPtrListCopy		(xmlSecPtrListPtr dst,
+								 xmlSecPtrListPtr src);
+XMLSEC_EXPORT xmlSecPtrListPtr	xmlSecPtrListDuplicate		(xmlSecPtrListPtr list);
+
+XMLSEC_EXPORT xmlSecSize	xmlSecPtrListGetSize		(xmlSecPtrListPtr list);
+XMLSEC_EXPORT xmlSecPtr		xmlSecPtrListGetItem		(xmlSecPtrListPtr list,
+							         xmlSecSize pos);
+XMLSEC_EXPORT int		xmlSecPtrListAdd		(xmlSecPtrListPtr list,
+								 xmlSecPtr item);
+XMLSEC_EXPORT int		xmlSecPtrListSet		(xmlSecPtrListPtr list,
+								 xmlSecPtr item,
+								 xmlSecSize pos);
+XMLSEC_EXPORT int		xmlSecPtrListRemove		(xmlSecPtrListPtr list,
+							    	 xmlSecSize pos);
+XMLSEC_EXPORT void		xmlSecPtrListDebugDump		(xmlSecPtrListPtr list,
+    								 FILE* output);
+XMLSEC_EXPORT void		xmlSecPtrListDebugXmlDump	(xmlSecPtrListPtr list,
+ 								 FILE* output);
+
+/**
+ * xmlSecPtrListGetName:
+ * @list: 		the ponter to list.
+ * 
+ * Macro. Returns lists's name.
+ */
+#define xmlSecPtrListGetName(list) \
+	(((list) != NULL) ? xmlSecPtrListKlassGetName((list)->id) : NULL)
+
+/**
+ * xmlSecPtrListIsValid:
+ * @list: 		the pointer to list.
+ *
+ * Macro. Returns 1 if @list is not NULL and @list->id is not NULL
+ * or 0 otherwise.
+ */ 
+#define xmlSecPtrListIsValid(list) \
+	((( list ) != NULL) && ((( list )->id) != NULL))
+/**
+ * xmlSecPtrListCheckId:
+ * @list: 		the pointer to list.
+ * @dataId: 		the list Id.
+ *
+ * Macro. Returns 1 if @list is valid and @list's id is equal to @dataId.
+ */
+#define xmlSecPtrListCheckId(list, dataId) \
+ 	(xmlSecPtrListIsValid(( list )) && \
+	((( list )->id) == ( dataId )))
+
+
+/**************************************************************************
+ *
+ * List klass
+ *
+ *************************************************************************/
+/**
+ * xmlSecPtrListIdUnknown:
+ *
+ * The "unknown" id.
+ */
+#define xmlSecPtrListIdUnknown 			NULL
+
+/**
+ * xmlSecPtrDuplicateItemMethod:
+ * @ptr:		the poinetr to list item.
+ *
+ * Duplicates item @ptr.
+ *
+ * Returns pointer to new item copy or NULL if an error occurs.
+ */
+typedef xmlSecPtr		(*xmlSecPtrDuplicateItemMethod)	(xmlSecPtr ptr);
+
+/**
+ * xmlSecPtrDestroyItemMethod:
+ * @ptr:		the poinetr to list item.
+ *
+ * Destroys list item @ptr.
+ */
+typedef void			(*xmlSecPtrDestroyItemMethod)	(xmlSecPtr ptr);
+
+/**
+ * xmlSecPtrDebugDumpItemMethod:
+ * @ptr:		the poinetr to list item.
+ * @output:		the output FILE.
+ *
+ * Prints debug information about @item to @output.
+ */
+typedef void			(*xmlSecPtrDebugDumpItemMethod)	(xmlSecPtr ptr,
+								 FILE* output);
+
+/**
+ * xmlSecPtrListKlass: 
+ * @name:		the list klass name.
+ * @duplicateItem:	the duplciate item method.
+ * @destroyItem:	the destroy item method.
+ * @debugDumpItem:	the debug dump item method.
+ * @debugXmlDumpItem:	the debug dump item in xml format method.
+ *
+ * List klass.
+ */
+struct _xmlSecPtrListKlass {
+    const xmlChar*			name;
+    xmlSecPtrDuplicateItemMethod	duplicateItem;
+    xmlSecPtrDestroyItemMethod		destroyItem;
+    xmlSecPtrDebugDumpItemMethod	debugDumpItem;
+    xmlSecPtrDebugDumpItemMethod	debugXmlDumpItem;
+};
+
+/**
+ * xmlSecPtrListKlassGetName: 
+ * @klass:		the list klass.
+ *2
+ 
+ * Macro. Returns the list klass name.
+ */
+#define xmlSecPtrListKlassGetName(klass) \
+	(((klass) != NULL) ? ((klass)->name) : NULL)
+
+/**************************************************************************
+ *
+ * xmlSecStringListKlass
+ *
+ *************************************************************************/
+/**
+ * xmlSecStringListId:
+ *
+ * Strings list klass.
+ */
+#define xmlSecStringListId \
+	xmlSecStringListGetKlass()
+XMLSEC_EXPORT xmlSecPtrListId	xmlSecStringListGetKlass	(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __XMLSEC_LIST_H__ */
+