/usr/include/xbt/set.h is in libsimgrid-dev 3.11.1-9.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | /* xbt/set.h -- api to a generic dictionary */
/* Copyright (c) 2004-2007, 2009-2010, 2012-2014. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#ifndef _XBT_SET_H
#define _XBT_SET_H
#include "xbt/misc.h" /* SG_BEGIN_DECL */
#include "xbt/function_types.h"
SG_BEGIN_DECL()
/** @addtogroup XBT_set
* @brief A data container consisting in \ref XBT_dict and \ref XBT_dynar
*
* The elements stored in such a data structure can be retrieve both by
* name and by ID. For this to work, the first fields of the structures
* stored must begin with the following fields:
\verbatim
struct {
unsigned int ID;
char *name;
unsigned int name_len;
// my other fields, constituting the payload
} my_element_type_t;
\endverbatim
*
* Since we are casting elements around, no protection is ensured by the
* compiler. It is thus safer to define the headers using the macro
* defined to that extend:
*
\verbatim
struct {
XBT_SET_HEADERS;
// my other fields, constituting the payload
} my_element_type_t;
\endverbatim
*
* It is now possible to remove an element from such a data structure.
*
* @todo
* Such a datastructure was necessary/useful to store the GRAS type
* descriptions, but it should be reworked to become generic.
*
*/
/** @defgroup XBT_set_cons Set and set elements, constructor/destructor
* @ingroup XBT_set
*
* @{
*/
/** \brief Opaque type representing a set */
typedef struct xbt_set_ *xbt_set_t;
#define XBT_SET_HEADERS \
unsigned int ID; \
char *name; \
unsigned int name_len
/** \brief It must be possible to cast set elements to this type */
typedef struct xbt_set_elm_ {
unsigned int ID; /**< Identificator (system assigned) */
char *name; /**< Name (user assigned) */
unsigned int name_len;
/**< Length of the name */
} s_xbt_set_elm_t, *xbt_set_elm_t;
/*####[ Functions ]##########################################################*/
XBT_PUBLIC(xbt_set_t) xbt_set_new(void);
XBT_PUBLIC(void) xbt_set_free(xbt_set_t * set);
/** @} */
/** @defgroup XBT_set_basic Sets basic usage
* @ingroup XBT_set
*
* @{
*/
XBT_PUBLIC(void) xbt_set_add(xbt_set_t set, xbt_set_elm_t elm,
void_f_pvoid_t free_func);
XBT_PUBLIC(void) xbt_set_remove(xbt_set_t set, xbt_set_elm_t elm);
XBT_PUBLIC(void) xbt_set_remove_by_name(xbt_set_t set, const char *key);
XBT_PUBLIC(xbt_set_elm_t) xbt_set_get_by_name_or_null(xbt_set_t set,
const char *key);
XBT_PUBLIC(void) xbt_set_remove_by_name_ext(xbt_set_t set, const char *key,
int key_len);
XBT_PUBLIC(void) xbt_set_remove_by_id(xbt_set_t set, int id);
XBT_PUBLIC(xbt_set_elm_t) xbt_set_get_by_name(xbt_set_t set,
const char *key);
XBT_PUBLIC(xbt_set_elm_t) xbt_set_get_by_name_ext(xbt_set_t set,
const char *key,
int key_len);
XBT_PUBLIC(xbt_set_elm_t) xbt_set_get_by_id(xbt_set_t set, int id);
XBT_PUBLIC(unsigned long) xbt_set_length(const xbt_set_t set);
/** @} */
/** @defgroup XBT_set_curs Sets cursors
* @ingroup XBT_set
*
* \warning Don't add or remove entries to the cache while traversing
*
* @{
*/
/** @brief Cursor type */
typedef struct xbt_set_cursor_ *xbt_set_cursor_t;
XBT_PUBLIC(void) xbt_set_cursor_first(xbt_set_t set,
xbt_set_cursor_t * cursor);
XBT_PUBLIC(void) xbt_set_cursor_step(xbt_set_cursor_t cursor);
XBT_PUBLIC(int) xbt_set_cursor_get_or_free(xbt_set_cursor_t * cursor,
xbt_set_elm_t * elm);
/** @brief Iterates over the whole set
* @hideinitializer
*/
#define xbt_set_foreach(set,cursor,elm) \
for ((cursor) = NULL, xbt_set_cursor_first((set),&(cursor)) ; \
xbt_set_cursor_get_or_free(&(cursor),(xbt_set_elm_t*)&(elm)); \
xbt_set_cursor_step(cursor) )
/* @} */
SG_END_DECL()
#endif /* _XBT_SET_H */
|