/usr/include/dcmtk/dcmrt/drmsrch.h is in libdcmtk-dev 3.6.2-3build3.
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 | /*
*
* Copyright (C) 2012, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmrt
*
* Author: Uli Schlachter
*
* Purpose: Template helper functions for searching through sequences
*
*/
#ifndef DRMSRCH_H
#define DRMSRCH_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
namespace DRTSearch {
/**
* Given a function predicate, this iterates over an IOD and finds the
* first item for which the predicate returns true. The result will be the
* IOD's currentItem(). If nothing is found, currentItem() will return the
* EmptyDefaultItem.
* @tparam IOD the type of the IOD that should be checked
* @tparam Predicate the type of the search predicate
* @param iod the IOD to search through
* @param pred the predicate to check
* @return EC_IllegalCall if search failed, else EC_Normal
*/
template<typename IOD, typename Predicate>
static inline OFCondition findItem(IOD& iod, Predicate& pred)
{
OFCondition cond = iod.gotoFirstItem();
while (cond.good()) {
if (pred(iod.getCurrentItem()))
break;
cond = iod.gotoNextItem();
}
return cond;
}
/**
* This implements a search predicate for findItem which looks for some
* object attribute via the equality operator.
* @tparam IOD the type of the IOD that should be checked
* @tparam Item this should always be IOD::Item. Sadly, MSC6 can't figure
* that out by itself and so we must explicitly tell it about this type.
* @tparam type the type that is being searched for
* @tparam arg2 the type of the second argument to the getter function
* @tparam argument2 the value of the second argument to the getter function
*/
template<typename IOD, typename Item, typename type, typename arg2, arg2 argument2>
class searchPropertyEqual {
public:
/// Type of the getter-function that is used for getting the value.
typedef OFCondition (Item::*funcType)(type&, arg2) const;
/**
* Constructor
* @param expected the expected value that we are searching for
* @param func member function that gets us the value from the object
*/
searchPropertyEqual(const type& expected, funcType func) : m_expected(expected), m_func(func) { }
/// @return true if the given item has the wanted property
OFBool operator()(const Item& item) {
type value;
OFCondition cond = (item.*m_func)(value, argument2);
return cond.good() && value == m_expected;
}
private:
/// The expected value of an item
type m_expected;
/// Getter function which gets the actual value from an item
funcType m_func;
};
/**
* Helper class which wraps searchPropertyEqual and findItem to make it
* easier to search through an IOD.
* @tparam IOD the type of the IOD that should be checked
* @tparam Item this should always be IOD::Item. Sadly, MSC6 can't figure
* that out by itself and so we must explicitly tell it about this type.
* @tparam type the type that is being searched for
* @tparam arg2 the type of the second argument to the getter function
* @tparam argument2 the value of the second argument to the getter function
*/
template<typename IOD, typename Item, typename type, typename arg2, arg2 argument2>
class searchPropertyEqualHelper {
public:
/// Typedef for simplifying usage of searchPropertyEqual
typedef searchPropertyEqual<IOD, Item, type, arg2, argument2> searchType;
/**
* Find an item in a sequence
* @param seq the sequence to search through
* @param wanted the value that should be found
* @param func function that gets a value from a sequence item
* @return Reference to the first item that matches or to the empty
* default item.
*/
static typename IOD::Item& search(IOD& seq, const type& wanted, typename searchType::funcType func)
{
searchType s(wanted, func);
findItem<IOD, searchType>(seq, s);
// If the search failed, this will be the empty default item
return seq.getCurrentItem();
}
};
}
#endif
|