IMP
2.1.0
The Integrative Modeling Platform
IMP Mainpage
All IMP Modules
Related Pages
Modules
Namespaces
Classes
Files
Examples
Indexes
File List
File Members
kernel/input_output_macros.h
Go to the documentation of this file.
1
/**
2
* \file IMP/kernel/input_output_macros.h
3
* \brief macros for inputs and outputs.
4
*
5
* Copyright 2007-2013 IMP Inventors. All rights reserved.
6
*
7
*/
8
9
#ifndef IMPKERNEL_INPUT_OUTPUT_MACROS_H
10
#define IMPKERNEL_INPUT_OUTPUT_MACROS_H
11
#include <IMP/kernel/kernel_config.h>
12
#include <
IMP/base/deprecation_macros.h
>
13
#include "
particle_index.h
"
14
#include "
input_output.h
"
15
16
#define IMP_BACKWARDS_MACRO_INPUTS \
17
public: \
18
/** \deprecated_at{2.1} Use get_inputs() instead. */
\
19
ParticlesTemp get_input_particles(Particle *) const; \
20
/** \deprecated_at{2.1} Use get_inputs() instead. */
\
21
ContainersTemp get_input_containers(Particle *) const; \
22
ModelObjectsTemp do_get_inputs(kernel::Model *m, \
23
const ParticleIndexes &pis) const { \
24
ModelObjectsTemp ret; \
25
for (unsigned int i = 0; i < pis.size(); ++i) { \
26
ret += get_input_particles(m->get_particle(pis[i])); \
27
ret += get_input_containers(m->get_particle(pis[i])); \
28
} \
29
return ret; \
30
}
31
32
#define IMP_BACKWARDS_MACRO_OUTPUTS \
33
public: \
34
/** \deprecated_at{2.1} Use get_inputs() instead. */
\
35
ParticlesTemp get_output_particles(Particle *) const; \
36
/** \deprecated_at{2.1} Use get_inputs() instead. */
\
37
ContainersTemp get_output_containers(Particle *) const; \
38
ModelObjectsTemp do_get_outputs(kernel::Model *m, \
39
const ParticleIndexes &pis) const { \
40
ModelObjectsTemp ret; \
41
for (unsigned int i = 0; i < pis.size(); ++i) { \
42
ret += get_output_particles(m->get_particle(pis[i])); \
43
ret += get_output_containers(m->get_particle(pis[i])); \
44
} \
45
return ret; \
46
}
47
48
#define IMP_MODEL_OBJECT_BACKWARDS_MACRO_INPUTS \
49
public: \
50
ParticlesTemp get_input_particles() const; \
51
ContainersTemp get_input_containers() const; \
52
ModelObjectsTemp do_get_inputs() const { \
53
ModelObjectsTemp ret; \
54
ret += get_input_containers(); \
55
ret += get_input_particles(); \
56
return ret; \
57
}
58
59
#define IMP_MODEL_OBJECT_BACKWARDS_MACRO_OUTPUTS \
60
public: \
61
/** \deprecated_at{2.1} Use get_outputs() instead. */
\
62
IMPKERNEL_DEPRECATED_METHOD_DECL( \
63
2.1) ParticlesTemp get_output_particles() const; \
64
/** \deprecated_at{2.1} Use get_outputs() instead. */
\
65
IMPKERNEL_DEPRECATED_METHOD_DECL( \
66
2.1) ContainersTemp get_output_containers() const; \
67
IMP_COMPILER_DISABLE_WARNINGS \
68
ModelObjectsTemp do_get_outputs() const { \
69
ModelObjectsTemp ret; \
70
ret += get_output_containers(); \
71
ret += get_output_particles(); \
72
return ret; \
73
} \
74
IMP_COMPILER_ENABLE_WARNINGS
75
76
#define IMP_INPUTS_DECL_BACKWARDS(Name) \
77
public: \
78
/** Get the set of particles read when applied to \
79
the \
80
arguments. \
81
\deprecated_at{2.1} use \
82
get_inputs() \
83
instead.*/
IMPKERNEL_DEPRECATED_METHOD_DECL( \
84
2.1) ParticlesTemp get_input_particles(Particle *p) const; \
85
/** Get the set of input containers when this modifier is \
86
applied \
87
to \
88
the arguments. \
89
\deprecated_at{2.1} use \
90
get_outputs() \
91
instead.*/
IMPKERNEL_DEPRECATED_METHOD_DECL( \
92
2.0) ContainersTemp get_input_containers(Particle *p) const
93
94
#define IMP_INPUTS_DEF_BACKWARDS(Name) \
95
ParticlesTemp Name::get_input_particles(Particle *p) const { \
96
IMPKERNEL_DEPRECATED_METHOD_DEF(2.1, "Use get_inputs() instead."); \
97
return IMP::kernel::get_input_particles( \
98
get_inputs(p->get_model(), ParticleIndexes(1, p->get_index()))); \
99
} \
100
ContainersTemp Name::get_input_containers(Particle *p) const { \
101
IMPKERNEL_DEPRECATED_METHOD_DEF(2.1, "Use get_inputs() instead."); \
102
return IMP::kernel::get_input_containers( \
103
get_inputs(p->get_model(), ParticleIndexes(1, p->get_index()))); \
104
}
105
106
#define IMP_OUTPUTS_DECL_BACKWARDS(Name) \
107
public: \
108
/** Get the set of particles read when applied to \
109
the \
110
arguments. \
111
\deprecated_at{2.1} use \
112
get_outputs() \
113
instead.*/
IMPKERNEL_DEPRECATED_METHOD_DECL( \
114
2.0) ParticlesTemp get_output_particles(Particle *p) \
115
const;
/** Get the set of output containers when this modifier is
116
applied to the arguments. \deprecated_at{2.1} use
117
get_outputs() instead.*/
\
118
IMPKERNEL_DEPRECATED_METHOD_DECL(2.0) ContainersTemp get_output_containers( \
119
Particle *p) const
120
121
#define IMP_OUTPUTS_DEF_BACKWARDS(Name) \
122
ParticlesTemp Name::get_output_particles(Particle *p) const { \
123
IMPKERNEL_DEPRECATED_METHOD_DEF(2.1, "Use get_outputs() instead."); \
124
return IMP::kernel::get_output_particles( \
125
get_outputs(p->get_model(), ParticleIndexes(1, p->get_index()))); \
126
} \
127
IMPKERNEL_DEPRECATED_METHOD_DECL( \
128
2.1) ContainersTemp Name::get_output_containers(Particle *p) const { \
129
IMPKERNEL_DEPRECATED_METHOD_DEF(2.1, "Use get_outputs() instead."); \
130
return IMP::kernel::get_output_containers( \
131
get_outputs(p->get_model(), ParticleIndexes(1, p->get_index()))); \
132
}
133
134
/** \deprecated_at{2.1} Just declare the methods yourself.*/
135
#define IMP_INPUTS_DECL(Name) \
136
IMPKERNEL_DEPRECATED_MACRO(2.1, \
137
"Inherit from IMP::kernel::ParticleInputs."); \
138
IMP_INPUTS_DECL_BACKWARDS(Name); \
139
\
140
public:
/** Get all the ModelObject objects that are read when the \
141
referenced \
142
particles are passed in.*/
\
143
ModelObjectsTemp get_inputs(kernel::Model *m, \
144
const ParticleIndexes &pis) const; \
145
\
146
protected:
/** Override if this reads other objects during evaluate.*/
\
147
virtual ModelObjectsTemp do_get_inputs(kernel::Model *m, \
148
const ParticleIndexes &pis) const = 0
149
150
/** Define standard input methods for things that take particles as arguments
151
such as IMP::SingletonModifier and IMP::PairScore.*/
152
#define IMP_INPUTS_DEF(Name) \
153
IMP_INPUTS_DEF_BACKWARDS(Name) IMPKERNEL_DEPRECATED_MACRO( \
154
2.1, "Inherit from IMP::kernel::ParticleInputs."); \
155
ModelObjectsTemp Name::get_inputs(kernel::Model *m, \
156
const ParticleIndexes &pis) const { \
157
return do_get_inputs(m, pis); \
158
}
159
160
/** \deprecated_at{2.1} Declare the methods yourself. */
161
#define IMP_OUTPUTS_DECL(Name) \
162
IMPKERNEL_DEPRECATED_MACRO(2.1, \
163
"Inherit from IMP::kernel::ParticleOutputs."); \
164
IMP_OUTPUTS_DECL_BACKWARDS(Name); \
165
\
166
public:
/** Get all the ModelObject objects that are read when the referenced \
167
particles are passed in.*/
\
168
ModelObjectsTemp get_outputs(kernel::Model *m, \
169
const ParticleIndexes &pis) const; \
170
\
171
protected:
/** Override if this reads other objects during evaluate.*/
\
172
virtual ModelObjectsTemp do_get_outputs( \
173
Model *m, const ParticleIndexes &pis) const = 0
174
175
/** \deprecated_at{2.1} Declare the methods yourself*/
176
#define IMP_OUTPUTS_DEF(Name) \
177
IMPKERNEL_DEPRECATED_MACRO(2.1, \
178
"Inherit from IMP::kernel::ParticleOutputs."); \
179
IMP_OUTPUTS_DEF_BACKWARDS(Name) ModelObjectsTemp Name::get_outputs( \
180
Model *m, const ParticleIndexes &pis) const { \
181
return do_get_outputs(m, pis); \
182
}
183
184
#endif
/* IMPKERNEL_INPUT_OUTPUT_MACROS_H */
particle_index.h
Various general useful functions for IMP.
deprecation_macros.h
Control display of deprecation information.
input_output.h
Single variable function.