This file is indexed.

/usr/include/odil/DataSet.h is in libodil-dev 0.8.0-4build1.

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
/*************************************************************************
 * odil - Copyright (C) Universite de Strasbourg
 * Distributed under the terms of the CeCILL-B license, as published by
 * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
 * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
 * for details.
 ************************************************************************/

#ifndef _8424446e_1153_4acc_9f57_e86faa7246e3
#define _8424446e_1153_4acc_9f57_e86faa7246e3

#include <cstddef>
#include <cstdint>
#include <initializer_list>
#include <map>
#include <string>
#include <vector>

#include "odil/Element.h"
#include "odil/odil.h"
#include "odil/Value.h"

namespace odil
{

/**
 * @brief DICOM Data set.
 */
class ODIL_API DataSet
{
public:
    /// @brief Create an empty data set.
    explicit DataSet(std::string const & transfer_syntax="");

    /** @addtogroup default_operations Default class operations
     * @{
     */
    ~DataSet() =default;
    DataSet(DataSet const &) =default;
    DataSet(DataSet &&) =default;
    DataSet & operator=(DataSet const &) =default;
    DataSet & operator=(DataSet &&) =default;
    /// @}

    /// @brief Add an element to the dataset.
    void add(Tag const & tag, Element const & element);

    /// @brief Add an element to the dataset.
    void add(Tag const & tag, Element && element);

    /// @brief Add an empty element to the dataset.
    void add(Tag const & tag, VR vr=VR::UNKNOWN);

#define ODIL_DATASET_ADD(type) \
    void add(\
        Tag const & tag, Value::type const & value, VR vr=VR::UNKNOWN);\
    void add(\
        Tag const & tag, Value::type && value, VR vr=VR::UNKNOWN); \
    void add(\
        Tag const & tag, \
        std::initializer_list<Value::type::value_type> const & value, \
        VR vr=VR::UNKNOWN);
    /*
     * No need for for a rvalue reference version of std::initializer_list:
     * copying a std::initializer_list does not copy the underlying objects.
     */

    ODIL_DATASET_ADD(Integers);
    ODIL_DATASET_ADD(Reals);
    ODIL_DATASET_ADD(Strings);
    ODIL_DATASET_ADD(DataSets);
    ODIL_DATASET_ADD(Binary);
#undef ODIL_DATASET_ADD

    /// @brief Add an element to the dataset.
    void add(
        Tag const & tag, std::initializer_list<int> const & value,
        VR vr=VR::UNKNOWN);

    /// @brief Add an element to the dataset.
    void add(
        Tag const & tag,
        std::initializer_list<std::initializer_list<uint8_t>> const & value,
        VR vr=VR::UNKNOWN);

    /**
     * @brief Remove an element from the data set.
     *
     * If the element is not in the data set, a odil::Exception is raised.
     */
    void remove(Tag const & tag);

    /// @brief Test whether the data set is empty.
    bool empty() const;

    /// @brief Return the number of elements in the data set.
    std::size_t size() const;

    /// @brief Test whether an element is in the data set.
    bool has(Tag const & tag) const;

    /**
     * @brief Return the VR of an element in the data set.
     *
     * If the element is not in the data set, a odil::Exception is raised.
     */
    VR get_vr(Tag const & tag) const;

    /**
     * @brief Test whether an element of the data set is empty.
     *
     * If the element is not in the data set, a odil::Exception is raised.
     */
    bool empty(Tag const & tag) const;

    /**
     * @brief Return the number of values in an element of the data set.
     *
     * If the element is not in the data set, a odil::Exception is raised.
     */
    std::size_t size(Tag const & tag) const;

    /**
     * @brief Access the given element.
     *
     * If the element is not in the data set, a odil::Exception is raised.
     */
    Element const & operator[](Tag const & tag) const;

    /**
     * @brief Access the given element.
     *
     * If the element is not in the data set, a odil::Exception is raised.
     */
    Element & operator[](Tag const & tag);

    /// @brief Test whether an existing element has integer type.
    bool is_int(Tag const & tag) const;

    /// @brief Return the integers contained in an existing element (read-only).
    Value::Integers const & as_int(Tag const & tag) const;

    /// @brief Return the integers contained in an existing element (read-write).
    Value::Integers & as_int(Tag const & tag);

    /// @brief Return an integer contained in an existing element (read-only).
    Value::Integer const & as_int(Tag const & tag, unsigned int position) const;

    /// @brief Test whether an existing element has real type.
    bool is_real(Tag const & tag) const;

    /// @brief Return the reals contained in an existing element (read-only).
    Value::Reals const & as_real(Tag const & tag) const;

    /// @brief Return the reals contained in an existing element (read-write).
    Value::Reals & as_real(Tag const & tag);

    /// @brief Return an real contained in an existing element (read-only).
    Value::Real const & as_real(Tag const & tag, unsigned int position) const;

    /// @brief Test whether an existing element has string type.
    bool is_string(Tag const & tag) const;

    /// @brief Return the strings contained in an existing element (read-only).
    Value::Strings const & as_string(Tag const & tag) const;

    /// @brief Return the strings contained in an existing element (read-write).
    Value::Strings & as_string(Tag const & tag);

    /// @brief Return a string contained in an existing element (read-only).
    Value::String const & as_string(Tag const & tag, unsigned int position) const;

    /// @brief Test whether an existing element has data set type.
    bool is_data_set(Tag const & tag) const;

    /// @brief Return the data sets contained in an existing element (read-only).
    Value::DataSets const & as_data_set(Tag const & tag) const;

    /// @brief Return the data sets contained in an existing element (read-write).
    Value::DataSets & as_data_set(Tag const & tag);

    /// @brief Return a data set contained in an existing element (read-only).
    DataSet const & as_data_set(Tag const & tag, unsigned int position) const;

    /// @brief Test whether an existing element has binary type.
    bool is_binary(Tag const & tag) const;

    /// @brief Return the binary items contained in an existing element (read-only).
    Value::Binary const & as_binary(Tag const & tag) const;

    /// @brief Return the binary items contained in an existing element (read-write).
    Value::Binary & as_binary(Tag const & tag);

    /// @brief Return a binary item contained in an existing element (read-only).
    Value::Binary::value_type const &
    as_binary(Tag const & tag, unsigned int position) const;

    /// @brief Iterator to the elements.
    typedef std::map<Tag, Element>::const_iterator const_iterator;

    /// @brief Return an iterator to the start of the elements.
    const_iterator begin() const;

    /// @brief Return an iterator to the end of the elements.
    const_iterator end() const;

    /// @brief Equality test.
    bool operator==(DataSet const & other) const;

    /// @brief Difference test.
    bool operator!=(DataSet const & other) const;

    /// @brief Clear the element (data_set.empty(tag) will be true).
    void clear(Tag const & tag);

    /// @brief Return the current transfer syntax.
    std::string const & get_transfer_syntax() const;

    /// @brief Set the current transfer syntax.
    void set_transfer_syntax(std::string const & transfer_syntax);

private:
    typedef std::map<Tag, Element> ElementMap;

    ElementMap _elements;

    /// @brief Current transfer syntax.
    std::string _transfer_syntax;
};

}

#endif // _8424446e_1153_4acc_9f57_e86faa7246e3