1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 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-2022 Aleksey Sanin <aleksey@aleksey.com>. All Rights Reserved.
*/
#ifndef __XMLSEC_LIST_H__
#define __XMLSEC_LIST_H__
#include <xmlsec/exports.h>
#include <xmlsec/xmlsec.h>
#include <xmlsec/buffer.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
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 xmlSecPtr xmlSecPtrListRemoveAndReturn (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 duplicate 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__ */
|