This file is indexed.

/usr/include/xbt/set.h is in libsimgrid-dev 3.10-7.

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. 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 */