This file is indexed.

/usr/include/Attribute/attrlist.h is in ivtools-dev 1.2.11a1-8.

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
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
/*
 * Copyright (c) 2001 Scott E. Johnston
 * Copyright (c) 1996-1999 Vectaport Inc.
 *
 * Permission to use, copy, modify, distribute, and sell this software and
 * its documentation for any purpose is hereby granted without fee, provided
 * that the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the names of the copyright holders not be used in
 * advertising or publicity pertaining to distribution of the software
 * without specific, written prior permission.  The copyright holders make
 * no representations about the suitability of this software for any purpose.
 * It is provided "as is" without express or implied warranty.
 *
 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
 * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL,
 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 * 
 */

/*
 * AttributeList - a list of attributes
 */

#ifndef attr_list_h
#define attr_list_h

#include <leakchecker.h>

#include <OS/enter-scope.h>
#include <InterViews/resource.h>
#include <Attribute/classid.h>
#include <Attribute/aliterator.h>

#ifndef ALITERATOR
#define ALIterator _lib_iv(Iterator)
#define AList _lib_iv(UList)
#endif

class ALIterator;
class AList;

#include <iosfwd>

class Attribute;
class AttributeValue;
class ParamStruct;

//: list of Attribute objects, i.e. a property list.
// An AttributeList is derived from Resource, so it is a reference-counted
// object that can be freely shared between other objects.
//
// An AttributeList assumes responsibility for the memory of its member
// Attribute objects, which in turn assume responsibility for the memory
// of their member AttributeValue objects.
class AttributeList : public Resource {
public:
    AttributeList(AttributeList* = nil);
    // construct with optional AttributeList to copy.
    virtual ~AttributeList();
    // do not call directly.  Frees memory of associated Attribute objects.

    void add_attr(const char* name, AttributeValue& value); 
    // add attribute by making copy of an AttributeValue.
    void add_attr(const char* name, AttributeValue* value); 
    // add attribute by using pointer to AttributeValue, assuming responsibility
    void add_attr(int symid, AttributeValue& value); 
    // add attribute by making copy of an AttributeValue.
    void add_attr(int symid, AttributeValue* value); 
    // add attribute by using pointer to AttributeValue, assuming responsibility
    // for the memory.

    void add_attribute(Attribute* attr);
    // add complete Attribute object to the list, accepting responsibility
    // for the memory of the Attribute object. 

    void First(ALIterator&);
    // set iterator to point to first Attribute in list.
    void Last(ALIterator&);
    // set iterator to point to last Attribute in list.
    void Next(ALIterator&);
    // set iterator to point to next Attribute in list.
    void Prev(ALIterator&);
    // set iterator to point to previous Attribute in list.
    boolean Done(ALIterator);
    // return true if iterator is pointing off the end of the list.
    // works for forward and backward traversals.
    boolean IsEmpty();
    // true if no Attribute objects in list.
    int Number() const;
    // number of Attribute objects in list.

    Attribute* GetAttr(const char*);
    // get attribute by name.
    Attribute* GetAttr(int symid);
    // get attribute by symbol id.
    Attribute* GetAttr(ALIterator);
    // get attribute pointed to by iterator.
    void SetAttr(Attribute*, ALIterator&);
    // set attribute pointed to by iterator.
    boolean Includes(Attribute*);
    // check if list includes Attribute by pointer-comparison.
    void Remove(Attribute*);
    // remove Attribute from list, returning responsibility for freeing the
    // associated memory.

    AList* Elem(ALIterator);
    // return AList (UList) pointed to by ALIterator (Iterator).
    Attribute* Attr(AList*);
    // return attribute pointed to by AList (UList).

    AttributeList* merge(AttributeList*);
    // merge the contents of another AttributeList into this one,
    // replicating the AttributeValue as needed.

    static void print_attrlist(AttributeList* al);
    // print AttributeList to stdout

    static void print_attrlist(std::ostream& out, AttributeList* al);
    // print AttributeList to out

protected:
    void Append(Attribute*);
    // append Attribute to end of list.  Could cause duplicates.
    void Prepend(Attribute*);
    // append Attribute to front of list.  Could cause duplicates.
    void InsertAfter(ALIterator, Attribute*);
    // append Attribute after position pointed by iterator.  Could cause duplicates.
    void InsertBefore(ALIterator, Attribute*);
    // append Attribute before position pointed by iterator.  Could cause duplicates.
    void Remove(ALIterator&);
    // remove Attribute pointed to by iterator from the list, 
    // returning responsibility for freeing the associated memory.
    // This requires saving a pointer to the Attribute before calling this method.

    void clear(); 
    // empty AttributeList, deleting all Attributes.


public:
    friend ostream& operator << (ostream& s, const AttributeList&);
    // print list to ostream.

    void dump();
    // utility method to call ostream output method.

    AttributeValue* find(const char*);
    // find AttributeValue by symbol.
    AttributeValue* find(int symid);
    // find AttributeValue by symbol id.

protected:
    int add_attr(Attribute* attr);
    // add attribute, returning 0 if new, -1 if it already existed.
    // When -1 is returned you need to clear the valueptr of 'attr' before 
    // deleting it.  That's why this is protected.

    AList* _alist;
    unsigned int _count;

    CLASS_SYMID("AttributeList");
};

//: list of AttributeValue objects.
// An AttributeValueList is derived from Resource, so it is a reference-counted
// object that can be freely shared between other objects.
//
// An AttributeValueList assumes responsibility for the memory of its member
// AttributeValue objects.
class AttributeValueList : public Resource {
public:
    AttributeValueList(AttributeValueList* = nil);
    // construct with optional AttributeValueList to copy.
    virtual ~AttributeValueList();
    // do not call directly.  Frees memory of associated AttributeValue objects.

public:
    void First(ALIterator&);
    // set iterator to point to first AttributeValue in list.
    void Last(ALIterator&);
    // set iterator to point to last AttributeValue in list.
    void Next(ALIterator&);
    // set iterator to point to next AttributeValue in list.
    void Prev(ALIterator&);
    // set iterator to point to previous AttributeValue in list.
    boolean Done(ALIterator);
    // return true if iterator is pointing off the end of the list.
    // works for forward and backward traversals.
    boolean IsEmpty();
    // true if no AttributeValue objects in list.
    const int Number();
    // number of AttributeValue objects in list.

    void Append(AttributeValue*);
    // append AttributeValue to end of list.
    void Prepend(AttributeValue*);
    // append AttributeValue to front of list.
    void InsertAfter(ALIterator, AttributeValue*);
    // insert AttributeValue after position pointed to by iterator.
    void InsertBefore(ALIterator, AttributeValue*);
    // insert AttributeValue before position pointed to by iterator.
    void Remove(AttributeValue*);
    // remove AttributeValue from list, returning responsibility for freeing the
    // associated memory.
    void Remove(ALIterator&);
    // remove AttributeValue pointed to by iterator from the list, 
    // returning responsibility for freeing the associated memory.
    // This requires saving a pointer to the AttributeValue before calling this method.
    AttributeValue* Replace(ALIterator&, AttributeValue*);
    // remove AttributeValue pointed to by iterator from the list, 
    // returning responsibility for freeing the associated memory.
    // Then insert new AttributeValue in the same place.


    AttributeValue* GetAttrVal(ALIterator);
    // get AttributeValue pointed to by iterator.
    void SetAttrVal(AttributeValue*, ALIterator&);
    // set AttributeValue pointed to by iterator.
    boolean Includes(AttributeValue*);
    // check if list includes AttributeValue by pointer-comparison.

    AttributeValue* Get(unsigned int index);
    // retrieve value by index, return nil if not there
    AttributeValue* Set(unsigned int index, AttributeValue* av);
    // set value by index, increase list length if necessary with nil padding,
    // take responsibility for the memory (and return responsibility for old memory)
    void Insert(int index, AttributeValue* av);
    // insert value after index, use -1 to insert at beginning
    // take responsibility for the memory (and return responsibility for old memory)

    AList* Elem(ALIterator); 
    // return AList (UList) pointed to by ALIterator (Iterator).
    AttributeValue* AttrVal(AList*);
    // return AttributeValue pointed to by AList (UList).

    friend ostream& operator << (ostream& s, const AttributeValueList&);
    // print list to ostream.

    void clear(); 
    // empty AttributeValueList, deleting all AttributeValue's.

    void nested_insert(boolean flag) { _nested_insert = flag; }
    // set flag to insert in a nested fashion

    boolean nested_insert() { return _nested_insert; }
    // get flag to insert in a nested fashion

    int max_out() { return _max_out; }
    // get maximum to print 
    void max_out(int num) { _max_out = num; }
    // set maximum to print 

    boolean Equal(AttributeValueList* avl);

protected:
    AList* _alist;
    unsigned int _count;
    boolean _nested_insert;
    int _max_out;
    int _prevget_i;
    ALIterator _prevget_it;

#ifdef LEAKCHECK
 public:
    static LeakChecker* _leakchecker;
#endif
};

#endif