This file is indexed.

/usr/include/ThePEG/Utilities/Rebinder.h is in libthepeg-dev 1.8.0-1.

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
// -*- C++ -*-
//
// Rebinder.h is a part of ThePEG - Toolkit for HEP Event Generation
// Copyright (C) 1999-2011 Leif Lonnblad
//
// ThePEG is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
#ifndef ThePEG_Rebinder_H
#define ThePEG_Rebinder_H

#include "ThePEG/Config/ThePEG.h"
#include "Rebinder.fh"
#include <stdexcept>

namespace ThePEG {

/**
 * Rebinder is a class associating pairs of pointers to objects. It is
 * typically used when cloning a set of objects which have pointers to
 * eachother. The Rebinder is then set up so that a cloned object can
 * easily be retrieved given a pointer to the original one. The cloned
 * objects can then use the Rebinder to change their pointers so that
 * they henceforth points to the cloned copies.
 */
template <typename T>
class Rebinder {

public:
  
  /** Default constructor. */
  Rebinder() {}

public:

  ThePEG_DECLARE_TEMPLATE_POINTERS(T,TPtr);

  /** Map associating pairs of objects. */
  typedef std::map<cTPtr,TPtr> MapType;

  /** The iterator of the underlying map. */
  typedef typename MapType::const_iterator const_iterator;

public:

  /**
   * Return a pointer to the object associated with the argument.
   */
  TPtr & operator[](tcTPtr t) { return theMap[t]; }

  /**
   * Return a pointer to the object associated with the argument. If
   * no corresponding object is found a null pointer given by R() is
   * returned.
   * @param r a pointer to an object of a type which is derived from T.
   */
  template <typename R>
  R translate(const R & r) const {
    const_iterator it = theMap.find(r);
    return it == theMap.end()? R(): dynamic_ptr_cast<R>(it->second);
  }

  /**
   * Insert pointers to objects into the output iterator, pointers to
   * objects corresponding to the ones given by the range of input
   * iterators. If a given object in the input iterator range does not
   * exists, a null pointer will be inserted in the output iterator.
   */
  template <typename OutputIterator, typename InputIterator>
  void translate(OutputIterator r,
		 InputIterator first, InputIterator last) const {
    while ( first != last ) *r++ = translate(*first++);
  }

  /**
   * Return a pointer to the object associated with the argument. If
   * no corresponding object is found an exception is thrown.
   * @param r a pointer to an object of a type which is derived from T.
   */
  template <typename R>
  R alwaysTranslate(const R & r) const throw(std::runtime_error) {
    R ret;
    if ( !r ) return ret;
    const_iterator it = theMap.find(r);
    ret = (it == theMap.end()? R(): dynamic_ptr_cast<R>(it->second));
    if ( !ret ) throw std::runtime_error("Rebinder exception");
    return ret;
  }

  /**
   * Insert pointers to objects into the output iterator, pointers to
   * objects corresponding to the ones given by the range of input
   * iterators. If a given object in the input iterator range does not
   * exists, an exception will be thrown.
   */
  template <typename OutputIterator, typename InputIterator>
  void alwaysTranslate(OutputIterator r, InputIterator first, InputIterator last)
    const throw(std::runtime_error) {
    while ( first != last ) *r++ = alwaysTranslate(*first++);
  }

  /**
   * Acces the underlying map representation.
   */
  const MapType & map() const { return theMap; }

private:


  /**
   * The underlying map representation.
   */
  MapType theMap;

private:

  /** The copy constructor is private and not implemented */
  Rebinder(const Rebinder &);

  /** The assignment operator is private and not implemented */
  Rebinder & operator=(const Rebinder &);

};


}

#endif /* ThePEG_Rebinder_H */