1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-09-28 19:05:55 +08:00
ULib/examples/XAdES/xpath.h
2015-01-23 17:24:36 +01:00

122 lines
2.9 KiB
C++

// ============================================================================
//
// = LIBRARY
// ulib - c++ library
//
// = FILENAME
// xpath.h - xml Digital SIGnature with libxml2
//
// = AUTHOR
// Stefano Casazza
//
// ============================================================================
#ifndef ULIB_DSIG_XPATH_H
#define ULIB_DSIG_XPATH_H 1
#include "transforms.h"
#include <libxml/xpointer.h>
class UTranformXPointer;
// Enchanced nodes Set
class U_EXPORT UNodeSet {
public:
// Check for memory error
U_MEMORY_TEST
// Allocator e Deallocator
U_MEMORY_ALLOCATOR
U_MEMORY_DEALLOCATOR
// The basic nodes sets types
enum NodeSetType {
NORMAL, // nodes in the list.
INVERT, // all document nodes minus nodes in the list.
TREE, // nodes in the list and all their subtrees.
TREE_WITHOUT_COMMENTS, // nodes in the list and all their subtrees but no comment nodes.
TREE_INVERT, // all document nodes minus nodes in the list and all their subtrees.
TREE_WITHOUT_COMMENTS_INVERT, // all document nodes minus (nodes in the list and all their subtress plus all comment nodes).
LIST // all nodes in the chidren list of nodes sets.
};
// The simple nodes sets operations
enum NodeSetOp {
INTERSECTION,
SUBTRACTION,
UNION
};
// COSTRUTTORI
UNodeSet(xmlDocPtr doc, xmlNodeSetPtr nodes, int type);
~UNodeSet();
#ifdef DEBUG
const char* dump(bool reset) const;
#endif
protected:
int op; // the operation type
int type; // the nodes set type
xmlDocPtr doc; // the parent XML document
UNodeSet* next; // the next nodes set
UNodeSet* prev; // the previous nodes set
UNodeSet* children; // the children list (valid only if type equal to #xmlSecNodeSetList)
xmlNodeSetPtr nodes; // the nodes list.
bool destroyDoc; // the flag: if set to true then @doc will be destroyed when node set is destroyed
static void destroy(UNodeSet* nset);
private:
UNodeSet(const UNodeSet&) {}
UNodeSet& operator=(const UNodeSet&) { return *this; }
};
class U_EXPORT UXPathData {
public:
// Check for memory error
U_MEMORY_TEST
// Allocator e Deallocator
U_MEMORY_ALLOCATOR
U_MEMORY_DEALLOCATOR
enum DataType {
XPATH,
XPATH2,
XPOINTER
};
// COSTRUTTORI
UXPathData(int data_type, int nodeSetType, const char* expr);
~UXPathData();
#ifdef DEBUG
const char* dump(bool reset) const;
#endif
protected:
int type;
int nodeSetOp;
int nodeSetType;
const char* expr;
xmlXPathContextPtr ctx;
bool registerNamespaces(xmlNodePtr node); /* register namespaces */
private:
UXPathData& operator=(const UXPathData&) { return *this; }
friend class UTranformXPointer;
};
#endif