xmlsecurityengine/xmlsec/inc/xmlsec_nodeset.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 17:02:56 +0300
branchRCL_3
changeset 20 889504eac4fb
parent 0 e35f40988205
child 21 604ca70b6235
permissions -rw-r--r--
Revision: 201014 Kit: 201035

/** 
 * 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 <stdapis/libxml2/libxml2_tree.h>
#include <stdapis/libxml2/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__ */