This file is indexed.

/usr/include/libinstpatch-1.0/libinstpatch/IpatchConverter.h is in libinstpatch-dev 1.0.0-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
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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
/*
 * libInstPatch
 * Copyright (C) 1999-2010 Joshua "Element" Green <jgreen@users.sourceforge.net>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; version 2.1
 * of the License only.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301, USA or on the web at http://www.gnu.org.
 */
/**
 * SECTION: IpatchConverter
 * @short_description: Base class for object conversion handlers
 * @see_also: 
 * @stability: Stable
 *
 * A base abstract type for object conversion handlers.
 */
#ifndef __IPATCH_CONVERTER_H__
#define __IPATCH_CONVERTER_H__

#include <stdarg.h>
#include <glib.h>
#include <glib-object.h>
#include <libinstpatch/IpatchList.h>

/* forward type declarations */

typedef struct _IpatchConverter IpatchConverter;
typedef struct _IpatchConverterClass IpatchConverterClass;

#define IPATCH_TYPE_CONVERTER   (ipatch_converter_get_type ())
#define IPATCH_CONVERTER(obj) \
  (G_TYPE_CHECK_INSTANCE_CAST ((obj), IPATCH_TYPE_CONVERTER, IpatchConverter))
#define IPATCH_CONVERTER_CLASS(klass) \
  (G_TYPE_CHECK_CLASS_CAST ((klass), IPATCH_TYPE_CONVERTER, \
   IpatchConverterClass))
#define IPATCH_IS_CONVERTER(obj) \
  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IPATCH_TYPE_CONVERTER))
#define IPATCH_IS_CONVERTER_CLASS(klass) \
  (G_TYPE_CHECK_CLASS_TYPE ((klass), IPATCH_TYPE_CONVERTER))
#define IPATCH_CONVERTER_GET_CLASS(obj) \
  (G_TYPE_INSTANCE_GET_CLASS ((obj), IPATCH_TYPE_CONVERTER, \
   IpatchConverterClass))

/**
 * IpatchConverterLinkLookupFunc:
 * @converter: Converter instance
 * @item: Converted item which has the link property that will be assigned to
 * @link: Original object being linked (before conversion)
 * @newtype: New type that link needs to be converted to
 * @user_data: User defined data supplied to the converter instance
 *
 * This function type allows for object link interception by the user of
 * an #IpatchConverter instance.  It is called by conversion processes which
 * create objects linking other external objects which need to be converted
 * also.  If this function returns %NULL then the @link will be converted
 * by the converter process and the user notified with the
 * #IpatchConverterLinkNotifyFunc.  An example usage of this feature is
 * the #IpatchPaste system, which does object conversions and substitutes
 * already converted objects (a conversion pool).
 *
 * Returns: Existing converted item satisfying @link and @newtype, or %NULL
 * otherwise.
 */
typedef GObject * (*IpatchConverterLinkLookupFunc)
  (IpatchConverter *converter, GObject *item, GObject *link, GType newtype,
   gpointer user_data);

/**
 * IpatchConverterLinkNotifyFunc:
 * @converter: Converter instance
 * @orig: Original link item which was converted
 * @conv: New converted link item
 * @newtype: New type that link was converted to (same as passed to
 *   #IpatchConverterLinkLookupFunc).
 * @user_data: User defined data supplied to the converter instance
 *
 * This function type allows for object link interception by the user of
 * an #IpatchConverter instance.  It is called by conversion processes which
 * create objects linking other external objects which need to be converted
 * also.  For each link object which needs to be converted
 * #IpatchConverterLinkLookupFunc is called first, if it returns %NULL then
 * this function will be called with the newly converted link object.
 */
typedef void (*IpatchConverterLinkNotifyFunc)
  (IpatchConverter *converter, GObject *orig, GObject *conv, GType newtype,
   gpointer user_data);

/* conversion instance */
struct _IpatchConverter
{
  GObject parent_instance;	/* derived from GObject */

  int flags;			/* IpatchConverterFlags */

  GList *inputs;	       /* list of input GObjects to convert */
  GList *outputs;	   /* list of new converted output GObjects */

  /* callbacks for object link interception */
  IpatchConverterLinkLookupFunc *link_lookup;
  IpatchConverterLinkNotifyFunc *link_notify;

  float progress;		/* 0.0 - 1.0 progress property */

  /* conversion ratings (0.0 - 1.0 = worst - best). For container objects
     ratings can be done individually on the children, then min_rate/max_rate
     will be useful */
  float min_rate;		/* minimum rating amongst all items */
  float max_rate;		/* maximum rating amongst all items */
  float avg_rate;		/* average rating for all items */
  float sum_rate;		/* sum of all ratings (to calculate avg) */
  int item_count;	     /* count of children items being rated */

  gboolean rate_items; /* set to TRUE to log a rating for each child item */

  /* conversion log */
  GList *log; /* LogEntry list (defined in IpatchConverter.c, prepended) */
};

/* conversion class */
struct _IpatchConverterClass
{
  GObjectClass parent_class;

  /* methods */
  gboolean (*verify)(IpatchConverter *converter, char **failmsg);
  void (*init)(IpatchConverter *converter);
  gboolean (*convert)(IpatchConverter *converter, GError **err);
  char * (*notes)(IpatchConverter *converter);
};

/* type for log entries */
typedef enum
{
  IPATCH_CONVERTER_LOG_RATING,	/* log a rating update */
  IPATCH_CONVERTER_LOG_INFO,	/* informational only */
  IPATCH_CONVERTER_LOG_WARN,	/* warning */
  IPATCH_CONVERTER_LOG_CRITICAL, /* critical (but non fatal) message */
  IPATCH_CONVERTER_LOG_FATAL	/* fatal error */
} IpatchConverterLogType;

/* mask for type field (IpatchConverterLogType) */
#define IPATCH_CONVERTER_LOG_TYPE_MASK   0x0F

/* flag for IpatchConverterLog->type to indicate allocated message string */
#define IPATCH_CONVERTER_LOG_MSG_ALLOC 0x80

#define IPATCH_CONVERTER_INPUT(converter) \
  (converter->inputs ? G_OBJECT (converter->inputs->data) : (GObject *)NULL)

#define IPATCH_CONVERTER_OUTPUT(converter) \
  (converter->outputs ? G_OBJECT (converter->outputs->data) : (GObject *)NULL)

/* enum used for src_count and dest_count fields in class */
typedef enum
{
  IPATCH_CONVERTER_COUNT_ONE_OR_MORE  = -1,	/* 1 or more objects */
  IPATCH_CONVERTER_COUNT_ZERO_OR_MORE = -2	/* 0 or more objects */
} IpatchConverterCount;

/* flags for ipatch_register_converter_map() */
typedef enum
{
  IPATCH_CONVERTER_FLAG_SRC_DERIVED = 1 << 8    /* match source derived types */
} IpatchConverterFlags;

/* priority levels for converter mappings */
typedef enum
{
  /* 0 value is an alias for IPATCH_CONVERTER_PRIORITY_DEFAULT */

  IPATCH_CONVERTER_PRIORITY_LOWEST  = 1,
  IPATCH_CONVERTER_PRIORITY_LOW     = 25,
  IPATCH_CONVERTER_PRIORITY_DEFAULT = 50,
  IPATCH_CONVERTER_PRIORITY_HIGH    = 75,
  IPATCH_CONVERTER_PRIORITY_HIGHEST = 100
} IpatchConverterPriority;

/* converter info structure */
typedef struct
{
  GType conv_type;	/* conversion handler type */
  GType src_type;	/* source type of conversion handler */
  GType src_match;  /* furthest source parent type to match (0 = exact match) */
  GType dest_type;		/* destination type of conversion handler */
  GType dest_match; /* furthest dest parent type to match (0 = exact match) */
  guint8 flags;		/* IpatchConverterFlags */
  gint8 priority;	/* priority (1-100) */
  gint8 src_count;  /* required source item count or IpatchConverterCount */
  gint8 dest_count; /* required destination item count or IpatchConverterCount */
} IpatchConverterInfo;

gboolean ipatch_convert_objects (GObject *input, GObject *output, GError **err);
GObject *ipatch_convert_object_to_type (GObject *object, GType type,
					GError **err);
IpatchList *ipatch_convert_object_to_type_multi (GObject *object, GType type,
                                                 GError **err);
IpatchList *ipatch_convert_object_to_type_multi_set (GObject *object, GType type,
                                                     GError **err,
                                                     const char *first_property_name, ...);
IpatchConverter *ipatch_create_converter (GType src_type, GType dest_type);

void ipatch_register_converter_map (GType conv_type, guint flags,
				    GType src_type, GType src_match,
				    gint8 src_count, GType dest_type,
				    GType dest_match, gint8 dest_count);
GType ipatch_find_converter (GType src_type, GType dest_type);
IpatchConverterInfo *
ipatch_lookup_converter_info (GType conv_type, GType src_type, GType dest_type);

GType ipatch_converter_get_type (void);

void ipatch_converter_add_input (IpatchConverter *converter, GObject *object);
void ipatch_converter_add_output (IpatchConverter *converter, GObject *object);
void ipatch_converter_add_inputs (IpatchConverter *converter, GList *objects);
void ipatch_converter_add_outputs (IpatchConverter *converter, GList *objects);
GObject *ipatch_converter_get_input (IpatchConverter *converter);
GObject *ipatch_converter_get_output (IpatchConverter *converter);
IpatchList *ipatch_converter_get_inputs (IpatchConverter *converter);
IpatchList *ipatch_converter_get_outputs (IpatchConverter *converter);

gboolean ipatch_converter_verify (IpatchConverter *converter, char **failmsg);
void ipatch_converter_init (IpatchConverter *converter);
gboolean ipatch_converter_convert (IpatchConverter *converter, GError **err);
void ipatch_converter_reset (IpatchConverter *converter);

char *ipatch_converter_get_notes (IpatchConverter *converter);

void ipatch_converter_log (IpatchConverter *converter, GObject *item,
			   int type, char *msg);
void ipatch_converter_log_printf (IpatchConverter *converter, GObject *item,
				  int type, const char *fmt, ...);
gboolean ipatch_converter_log_next (IpatchConverter *converter, gpointer *pos,
				    GObject **item, int *type, char **msg);

void ipatch_converter_set_link_funcs (IpatchConverter *converter,
				IpatchConverterLinkLookupFunc *link_lookup,
				IpatchConverterLinkNotifyFunc *link_notify);
#endif