This file is indexed.

/usr/include/opencollada/COLLADAStreamWriter/COLLADASWAnnotation.h is in opencollada-dev 0.1.0~20160714.0ec5063+dfsg1-2.

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
/*
    Copyright (c) 2008-2009 NetAllied Systems GmbH

    This file is part of COLLADAStreamWriter.

    Licensed under the MIT Open Source License, 
    for details please see LICENSE file or the website
    http://www.opensource.org/licenses/mit-license.php
*/

#ifndef __COLLADASTREAMWRITER_ANNOTATION_H__
#define __COLLADASTREAMWRITER_ANNOTATION_H__

#include "COLLADASWPrerequisites.h"
#include "COLLADASWElementWriter.h"
#include "COLLADASWValueType.h"

namespace COLLADASW
{
    
    /** Adds a strongly typed annotation remark to the parent object into 
    the collada document. 
    Concepts: Annotations represent objects of the form SYMBOL = VALUE, 
    where SYMBOL is a user-defined identifier and VALUE is a strongly 
    typed value. Annotations communicate metainformation from the Effect 
    Runtime to the application only and are not interpreted by the COLLADASW 
    document. 
    Parent elements:
    effect, technique (FX) (in profile_CG, profile_GLES, profile_GLSL), pass,
    newparam (in profile_CG, profile_GLES, profile_GLSL, and effect),
    technique/newparam (in profile_CG, profile_GLES, profile_GLSL),
    technique/setparam (in profile_GLSL and profile_GLES), generator,
    generator/setparam, shader
    */
    class Annotation : public ElementWriter
    {

    private:

        enum UnionType
        {
            UNION_TYPE_FLOAT,
            UNION_TYPE_BOOL,
            UNION_TYPE_INT,
            UNION_TYPE_STRING,
            UNION_TYPE_UNKNOWN,
        };

    private:

        /** The name of the current annotation. */
        String mName;

        /** Consists of a COLLADASW type element that contains a 
        value of that type. Valid type elements are:
        bool, bool2, bool3, bool4, int, int2, int3, int4, float,
        float2, float3, float4, float2x2, float3x3, float4x4, string */
        ValueType::ColladaType mValueType;

        /**
         * The union stores the value, in depend on the type.
         */
        union AnnotationValues {
            const char* strVal;
            const int* intVal;
            const bool* boolVal;
            const float* floatVal;
        } mValue;

        /** Number of values to insert (for arrays and pointer) */
        int mNumValues;

		/** The value type of the used union value. */
        UnionType mUnionType;

        /** Tag closer for the annotation. */
        TagCloser mAnnoCloser;

    public:
        
        /** Constructor. */
        Annotation ( StreamWriter *sw ) : ElementWriter ( sw ), mUnionType ( UNION_TYPE_UNKNOWN ) {}

        /** Constructor. */
        Annotation ( 
            StreamWriter *sw, 
            const String &name, 
            const ValueType::ColladaType &valueType, 
            const float* val, 
            int nVal=-1 ) 
        : ElementWriter ( sw ) 
        , mName ( name ) 
        , mValueType ( valueType )
        , mNumValues ( nVal )
        , mUnionType ( UNION_TYPE_FLOAT )
        {
            mValue.floatVal = val; 
        }

        /** Constructor. */
        Annotation ( 
            StreamWriter *sw, 
            const String &name, 
            const ValueType::ColladaType &valueType, 
            const bool* val, 
            int nVal=-1 ) 
            : ElementWriter ( sw ) 
            , mName ( name ) 
            , mValueType ( valueType )
            , mNumValues ( nVal )
            , mUnionType ( UNION_TYPE_BOOL )
        {
            mValue.boolVal = val;
        }

        /** Constructor. */
        Annotation ( 
            StreamWriter *sw, 
            const String &name, 
            const ValueType::ColladaType &valueType, 
            const int* val, 
            int nVal=-1 ) 
            : ElementWriter ( sw ) 
            , mName ( name ) 
            , mValueType ( valueType )
            , mNumValues ( nVal )
            , mUnionType ( UNION_TYPE_INT )
        {
            mValue.intVal = val;
        }

        /** Constructor. */
        Annotation ( 
            StreamWriter *sw, 
            const String &name, 
            const ValueType::ColladaType &valueType, 
            const char* val, 
            int nVal=-1 ) 
            : ElementWriter ( sw ) 
            , mName ( name ) 
            , mValueType ( valueType )
            , mNumValues ( nVal )
            , mUnionType ( UNION_TYPE_STRING )
        {
            mValue.strVal = val;
        }

        /** Destructor. */
        virtual ~Annotation () {}

//         const float* getFloatValues ( int& numValues ) const { numValues = mNumValues; return mValue.floatVal; }
//         void setFloatValues ( float* val, const int numValues ) { mNumValues = numValues; mValue.floatVal = val; }
// 
//         const int* getIntValues ( int& numValues ) const { numValues = mNumValues; return mValue.intVal; }
//         void setIntValues ( int* val, const int numValues ) { mNumValues = numValues; mValue.intVal = val; }
// 
//         const bool* getBoolValues ( int& numValues ) const { numValues = mNumValues; return mValue.boolVal; }
//         void setBoolValues ( bool* val, const int numValues ) { mNumValues = numValues; mValue.boolVal = val; }
// 
//         const String getStringValue () const { return String(mValue.strVal); }
//         void setStringValue ( char* val ) { mNumValues = 1; mValue.strVal = val; }

        /** Write the annotation manual. */
        void openAnnotation ( const String &name ) 
        {
            mAnnoCloser = mSW->openElement ( CSWC::CSW_ELEMENT_ANNOTATE );

            mSW->appendAttribute ( CSWC::CSW_ATTRIBUTE_NAME, name );
        }

        /** Write the annotation manual. */
        void closeAnnotation () 
        {
            mAnnoCloser.close ();
        }

        /** Write the annotation manual. */
        void openValuesElement ( const ValueType::ColladaType &valueType ) 
        {
            mSW->openElement ( ValueType::getColladaTypeString ( valueType ) );
        }

        /** Write the annotation manual. */
        void closeValuesElement () 
        {
            mSW->closeElement ();
        }

        /** Write the annotation manual. */
        template <class T> 
        void appendValues ( const T values )
        {
            mSW->appendValues ( values );
        }

        /** Write the annotation manual. */
        template <class T> 
        void appendValues ( const T* values, int nval )
        {
            if ( nval > 0 )
            {
                for ( int i=0; i<nval; ++i )
                {
                    mSW->appendValues ( values[i] );
                }
            }
        }

        /** Adds a strongly typed annotation remark to the parent object into 
         the collada document. 
         @param name The name of the current annotation.
         @param dataTypeName Consists of a COLLADASW type element that contains a 
                    value of that type. Valid type elements are:
                    bool, bool2, bool3, bool4, int, int2, int3, int4, float,
                    float2, float3, float4, float2x2, float3x3, float4x4, string
         @param val The value for the element.
        */
        template <class T>
        void add ( 
            const String &name, 
            const ValueType::ColladaType &type, 
            const T val )
        {
            openAnnotation ( name );
            openValuesElement ( type );
            appendValues ( val );
            closeValuesElement ();
            closeAnnotation ();
        }

        /**
         * Adds a strongly typed annotation remark to the parent object into the collada document.
         */
        void add () 
        {
            openAnnotation ( mName );
            openValuesElement ( mValueType );

            switch ( mUnionType )
            {
            case UNION_TYPE_FLOAT:
                appendValues ( mValue.floatVal, mNumValues );
                break;
            case UNION_TYPE_INT:
                appendValues ( mValue.intVal, mNumValues );
                break;
            case UNION_TYPE_STRING:
                appendValues ( String (mValue.strVal) );
                break;
            case UNION_TYPE_BOOL:
                appendValues ( mValue.boolVal, mNumValues );
                break;
            default:
                break;
            }
            closeValuesElement ();
            closeAnnotation ();
        }
    };

}

#endif // __COLLADASTREAMWRITER_ANNOTATION_H__