This file is indexed.

/usr/include/gdcm-2.6/gdcmBaseRootQuery.h is in libgdcm2-dev 2.6.3-3ubuntu3.

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
/*=========================================================================
 *
 *  Copyright Insight Software Consortium
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/
#ifndef GDCMBASEROOTQUERY_H
#define GDCMBASEROOTQUERY_H

#include "gdcmDataSet.h"
#include "gdcmUIDs.h"
#include "gdcmBaseQuery.h"
#include "gdcmQueryPatient.h"
#include "gdcmQueryStudy.h"
#include "gdcmQuerySeries.h"
#include "gdcmQueryImage.h"

namespace gdcm
{
  class QueryFactory;
  class DictEntry;

  enum EQueryLevel
    {
    // -1 is reserved do not use
    ePatient = 0,
    eStudy   = 1,
    eSeries  = 2,
    eImage   = 3
    };
  enum EQueryType
    {
    eFind= 0,
    eMove,
    eWLMFind
    };

/**
 * \brief BaseRootQuery
 * contains: a baseclass which will produce a dataset for c-find and c-move
 * with patient/study root
 *
 * This class contains the functionality used in patient c-find and c-move
 * queries.  PatientRootQuery and StudyRootQuery derive from this class.
 *
 * Namely:
 * 1) list all tags associated with a particular query type
 * 2) produce a query dataset via tag association
 *
 * Eventually, it can be used to validate a particular dataset type.
 *
 * The dataset held by this object (or, really, one of its derivates) should be
 * passed to a c-find or c-move query.
 */
class GDCM_EXPORT BaseRootQuery : public BaseQuery
{
  //these four classes contain the required, unique, and optional tags from the standard.
  //used both to list the tags as well as to validate a dataset, if ever we were to do so.
protected:
  QueryPatient mPatient;
  QueryStudy mStudy;
  QuerySeries mSeries;
  QueryImage mImage;

  friend class QueryFactory;
  BaseRootQuery();

  ERootType mRootType; //set in construction, and it's something else in the study root type
  std::string mHelpDescription; //used when generating the help output

public:
  virtual ~BaseRootQuery();

  ///this function will return all tags at a given query level, so that
  ///they maybe selected for searching.  The boolean forFind is true
  ///if the query is a find query, or false for a move query.
  virtual std::vector<Tag> GetTagListByLevel(const EQueryLevel& inQueryLevel) = 0;

  /// this function sets tag 8,52 to the appropriate value based on query level
  /// also fills in the right unique tags, as per the standard's requirements
  /// should allow for connection with dcmtk
  virtual void InitializeDataSet(const EQueryLevel& inQueryLevel) = 0;

  ///have to be able to ensure that
  ///0x8,0x52 is set (which will be true if InitializeDataSet is called...)
  ///that the level is appropriate (ie, not setting PATIENT for a study query
  ///that the tags in the query match the right level (either required, unique, optional)
  ///by default, this function checks to see if the query is for finding, which is more
  ///permissive than for moving.  For moving, only the unique tags are allowed.
  ///10 Jan 2011: adding in the 'strict' mode.
  ///according to the standard (at least, how I've read it), only tags for a particular
  ///level should be allowed in a particular query (ie, just series level tags in a series
  ///level query).  However, it seems that dcm4chee doesn't share that interpretation.
  ///So, if 'inStrict' is false, then tags from the current level and all higher levels
  ///are now considered valid.  So, if you're doing a non-strict series-level query,
  ///tags from the patient and study level can be passed along as well.
  virtual bool ValidateQuery( bool inStrict = true ) const = 0;

  static const char *GetQueryLevelString( EQueryLevel ql );
  static int GetQueryLevelFromString( const char * str );

  static QueryBase * Construct(ERootType inRootType, EQueryLevel qlevel);
  EQueryLevel GetQueryLevelFromQueryRoot( ERootType roottype );
};

} // end namespace gdcm

#endif //GDCMBASEROOTQUERY_H