/usr/include/ThePEG/Persistency/InputDescription.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 | // -*- C++ -*-
//
// InputDescription.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_InputDescription_H
#define ThePEG_InputDescription_H
// This is the declaration of the InputDescription class.
#include "ThePEG/Config/ThePEG.h"
#include "ThePEG/Utilities/ClassDescription.h"
namespace ThePEG {
/** @ingroup Persistency
* InputDescription objects are used by the PersistentIStream class to
* keep track of all classes it has read from a stream. It keeps a
* pointer to the corresponding ClassDescription in case the class
* read in was actually present in the current program, a version
* number of the read class which may be different from the class
* present in the current program and a list of base class
* <code>InputDescription</code>s.
*
* @see PersistentIStream
* @see Named
* @see ClassDescription
*/
class InputDescription: public Named {
public:
/** A vector of pointers to InputDescription objects. */
typedef vector<const InputDescription *> DescriptionVector;
ThePEG_DECLARE_POINTERS(PersistentBase,BPtr);
public:
/**
* The standard constructor.
* @param newName the name of the class being read.
* @param newVersion the version number of the class when written.
*/
InputDescription(string newName, int newVersion)
: Named(newName), theDescription(0), theVersion(newVersion) {}
/**
* Set the ClassDescriptionBase object of the class being read.
*/
void setDescription(const ClassDescriptionBase * cd) {
theDescription = cd;
}
/**
* Add a base class description.
*/
void addBaseClass(const InputDescription * newBase) {
theBaseClasses.push_back(newBase);
}
/**
* Return the list of base class descriptions.
*/
const DescriptionVector & descriptions() const {
return theBaseClasses;
}
/**
* Create an object of the corresponding class.
*/
BPtr create() const {
if ( theDescription ) return theDescription->create();
DescriptionVector::const_iterator dit = theBaseClasses.begin();
while ( dit != theBaseClasses.end() ) {
BPtr obj = (*dit++)->create();
if ( obj ) return obj;
}
return BPtr();
}
/**
* Read an object part of the corresponding class from a stream.
* Will only read the part of the object corresponding to the
* members of the class represented by this object.
*/
void input(tBPtr b, PersistentIStream & is) const {
if ( theDescription ) theDescription->input(b, is, theVersion);
}
private:
/**
* The list of base class descriptions.
*/
DescriptionVector theBaseClasses;
/**
* The description of the corresponding class in the current
* program.
*/
const ClassDescriptionBase * theDescription;
/**
* The version of the class to be read.
*/
int theVersion;
};
}
#endif /* ThePEG_InputDescription_H */
|