xmlsecurityengine/xmlsec/inc/xmlsec_nodeset.h
changeset 0 e35f40988205
child 20 889504eac4fb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xmlsecurityengine/xmlsec/inc/xmlsec_nodeset.h	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,140 @@
+/** 
+ * XML Security Library (http://www.aleksey.com/xmlsec).
+ *
+ * Enchanced nodes Set
+ *
+ * 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_NODESET_H__
+#define __XMLSEC_NODESET_H__    
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */ 
+
+#include <libxml2_tree.h>
+#include <libxml2_xpath.h>
+#include "xmlsec_config.h"
+#include "xmlsec_xmlsec.h"
+
+typedef struct _xmlSecNodeSet 	xmlSecNodeSet, *xmlSecNodeSetPtr;
+
+/** 
+ * xmlSecNodeSetType:
+ * @xmlSecNodeSetNormal: 	nodes set = nodes in the list.
+ * @xmlSecNodeSetInvert:  	nodes set = all document nodes minus nodes in the list.
+ * @xmlSecNodeSetTree: 		nodes set = nodes in the list and all their subtress.
+ * @xmlSecNodeSetTreeWithoutComments: 		nodes set = nodes in the list and 
+ *				all their subtress but no comment nodes.
+ * @xmlSecNodeSetTreeInvert: 	nodes set = all document nodes minus nodes in the 
+ * 				list and all their subtress.
+ * @xmlSecNodeSetTreeWithoutCommentsInvert: 	nodes set = all document nodes 
+ * 				minus (nodes in the list and all their subtress 
+ *				plus all comment nodes).
+ * @xmlSecNodeSetList: 		nodes set = all nodes in the chidren list of nodes sets.
+ * 
+ * The basic nodes sets types.
+ */
+typedef enum {
+    xmlSecNodeSetNormal = 0,
+    xmlSecNodeSetInvert,
+    xmlSecNodeSetTree,
+    xmlSecNodeSetTreeWithoutComments, 
+    xmlSecNodeSetTreeInvert,
+    xmlSecNodeSetTreeWithoutCommentsInvert,
+    xmlSecNodeSetList
+} xmlSecNodeSetType;
+
+/**
+ * xmlSecNodeSetOp:
+ * @xmlSecNodeSetIntersection: 	intersection.
+ * @xmlSecNodeSetSubtraction: 	subtraction.
+ * @xmlSecNodeSetUnion: 	union.
+ * 
+ * The simple nodes sets operations.
+ */
+typedef enum {
+    xmlSecNodeSetIntersection = 0,
+    xmlSecNodeSetSubtraction,
+    xmlSecNodeSetUnion
+} xmlSecNodeSetOp;
+
+/**
+ * xmlSecNodeSet:
+ * @nodes: 			the nodes list.
+ * @doc: 			the parent XML document.
+ * @destroyDoc:			the flag: if set to 1 then @doc will
+ *				be destroyed when node set is destroyed.
+ * @type: 			the nodes set type.
+ * @op: 			the operation type.
+ * @next: 			the next nodes set.
+ * @prev: 			the previous nodes set.
+ * @children: 			the children list (valid only if type 
+ *				equal to #xmlSecNodeSetList).
+ *
+ * The enchanced nodes set.
+ */
+struct _xmlSecNodeSet {
+    xmlNodeSetPtr	nodes;
+    xmlDocPtr		doc;
+    int			destroyDoc;
+    xmlSecNodeSetType	type;
+    xmlSecNodeSetOp	op;
+    xmlSecNodeSetPtr	next;
+    xmlSecNodeSetPtr	prev;
+    xmlSecNodeSetPtr	children;
+};
+
+/**
+ * xmlSecNodeSetWalkCallback:
+ * @nset: 			the pointer to #xmlSecNodeSet structure.
+ * @cur: 			the pointer current XML node.
+ * @parent: 			the pointer to the @cur parent node.
+ * @data: 			the pointer to application specific data.
+ *
+ * The callback function called once per each node in the nodes set.
+ *
+ * Returns 0 on success or a negative value if an error occurs
+ * an walk procedure should be interrupted.
+ */
+typedef int (*xmlSecNodeSetWalkCallback)		(xmlSecNodeSetPtr nset,
+							 xmlNodePtr cur,
+							 xmlNodePtr parent,
+							 void* data);
+
+XMLSEC_EXPORT xmlSecNodeSetPtr	xmlSecNodeSetCreate	(xmlDocPtr doc,
+							 xmlNodeSetPtr nodes,
+							 xmlSecNodeSetType type);
+XMLSEC_EXPORT void		xmlSecNodeSetDestroy	(xmlSecNodeSetPtr nset);
+XMLSEC_EXPORT void		xmlSecNodeSetDocDestroy	(xmlSecNodeSetPtr nset);
+XMLSEC_EXPORT int		xmlSecNodeSetContains	(xmlSecNodeSetPtr nset,
+							 xmlNodePtr node,
+							 xmlNodePtr parent);
+XMLSEC_EXPORT xmlSecNodeSetPtr	xmlSecNodeSetAdd	(xmlSecNodeSetPtr nset,
+							 xmlSecNodeSetPtr newNSet,
+							 xmlSecNodeSetOp op);
+XMLSEC_EXPORT xmlSecNodeSetPtr	xmlSecNodeSetAddList	(xmlSecNodeSetPtr nset,
+							 xmlSecNodeSetPtr newNSet,
+							 xmlSecNodeSetOp op);
+XMLSEC_EXPORT xmlSecNodeSetPtr	xmlSecNodeSetGetChildren(xmlDocPtr doc,
+							 const xmlNodePtr parent,
+							 int withComments,
+							 int invert);
+XMLSEC_EXPORT int		xmlSecNodeSetWalk	(xmlSecNodeSetPtr nset,
+							 xmlSecNodeSetWalkCallback walkFunc,
+							 void* data);
+XMLSEC_EXPORT int		xmlSecNodeSetDumpTextNodes(xmlSecNodeSetPtr nset,
+							xmlOutputBufferPtr out);
+XMLSEC_EXPORT void		xmlSecNodeSetDebugDump	(xmlSecNodeSetPtr nset,
+							 FILE *output);
+							 
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __XMLSEC_NODESET_H__ */
+