source: src/molecule_template.hpp@ f66195

Action_Thermostats Add_AtomRandomPerturbation Add_FitFragmentPartialChargesAction Add_RotateAroundBondAction Add_SelectAtomByNameAction Added_ParseSaveFragmentResults AddingActions_SaveParseParticleParameters Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_ParticleName_to_Atom Adding_StructOpt_integration_tests AtomFragments Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.5.4 Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator CombiningParticlePotentialParsing Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_BoundInBox_CenterInBox_MoleculeActions Fix_ChargeSampling_PBC Fix_ChronosMutex Fix_FitPartialCharges Fix_FitPotential_needs_atomicnumbers Fix_ForceAnnealing Fix_IndependentFragmentGrids Fix_ParseParticles Fix_ParseParticles_split_forward_backward_Actions Fix_PopActions Fix_QtFragmentList_sorted_selection Fix_Restrictedkeyset_FragmentMolecule Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns Fix_fitting_potentials Fixes ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion FragmentAction_writes_AtomFragments FragmentMolecule_checks_bonddegrees GeometryObjects Gui_Fixes Gui_displays_atomic_force_velocity ImplicitCharges IndependentFragmentGrids IndependentFragmentGrids_IndividualZeroInstances IndependentFragmentGrids_IntegrationTest IndependentFragmentGrids_Sole_NN_Calculation JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix MoreRobust_FragmentAutomation ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PdbParser_setsAtomName PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks Rewrite_FitPartialCharges RotateToPrincipalAxisSystem_UndoRedo SaturateAtoms_findBestMatching SaturateAtoms_singleDegree StoppableMakroAction Subpackage_CodePatterns Subpackage_JobMarket Subpackage_LinearAlgebra Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg Switchable_LogView ThirdParty_MPQC_rebuilt_buildsystem TrajectoryDependenant_MaxOrder TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps TremoloParser_setsAtomName Ubuntu_1604_changes stable
Last change on this file since f66195 was f66195, checked in by Frederik Heber <heber@…>, 16 years ago

forward declarations used to untangle interdependet classes.

  • basically, everywhere in header files we removed '#include' lines were only pointer to the respective classes were used and the include line was moved to the implementation file.
  • as a sidenote, lots of funny errors happened because headers were included via a nesting over three other includes. Now, all should be declared directly as needed, as only very little include lines remain in header files.
  • Property mode set to 100644
File size: 10.9 KB
RevLine 
[e9f8f9]1/*
2 * molecule_template.hpp
3 *
4 * Created on: Oct 6, 2009
5 * Author: heber
6 */
7
8#ifndef MOLECULE_TEMPLATE_HPP_
9#define MOLECULE_TEMPLATE_HPP_
10
[f66195]11/*********************************************** includes ***********************************/
12
13// include config.h
14#ifdef HAVE_CONFIG_H
15#include <config.h>
16#endif
17
18/********************************************** declarations *******************************/
19
[e9f8f9]20// ================== Acting on all Vectors ========================== //
21
22// zero arguments
23template <typename res> void molecule::ActOnAllVectors( res (Vector::*f)() )
24{
25 atom *Walker = start;
26 while (Walker->next != end) {
27 Walker = Walker->next;
28 ((Walker->node)->*f)();
29 }
30};
31template <typename res> void molecule::ActOnAllVectors( res (Vector::*f)() const )
32{
33 atom *Walker = start;
34 while (Walker->next != end) {
35 Walker = Walker->next;
36 ((Walker->node)->*f)();
37 }
38};
39template <typename res> void molecule::ActOnAllVectors( res (Vector::*f)() ) const
40 {
41 atom *Walker = start;
42 while (Walker->next != end) {
43 Walker = Walker->next;
44 ((Walker->node)->*f)();
45 }
46};
47// one argument
48template <typename res, typename T> void molecule::ActOnAllVectors( res (Vector::*f)(T), T t )
49{
50 atom *Walker = start;
51 while (Walker->next != end) {
52 Walker = Walker->next;
53 ((Walker->node)->*f)(t);
54 }
55};
56template <typename res, typename T> void molecule::ActOnAllVectors( res (Vector::*f)(T) const, T t )
57{
58 atom *Walker = start;
59 while (Walker->next != end) {
60 Walker = Walker->next;
61 ((Walker->node)->*f)(t);
62 }
63};
64template <typename res, typename T> void molecule::ActOnAllVectors( res (Vector::*f)(T), T t ) const
65{
66 atom *Walker = start;
67 while (Walker->next != end) {
68 Walker = Walker->next;
69 ((Walker->node)->*f)(t);
70 }
71};
72// two arguments
73template <typename res, typename T, typename U> void molecule::ActOnAllVectors( res (Vector::*f)(T, U), T t, U u )
74{
75 atom *Walker = start;
76 while (Walker->next != end) {
77 Walker = Walker->next;
78 ((Walker->node)->*f)(t, u);
79 }
80};
81template <typename res, typename T, typename U> void molecule::ActOnAllVectors( res (Vector::*f)(T, U) const, T t, U u )
82{
83 atom *Walker = start;
84 while (Walker->next != end) {
85 Walker = Walker->next;
86 ((Walker->node)->*f)(t, u);
87 }
88};
89template <typename res, typename T, typename U> void molecule::ActOnAllVectors( res (Vector::*f)(T, U), T t, U u ) const
90{
91 atom *Walker = start;
92 while (Walker->next != end) {
93 Walker = Walker->next;
94 ((Walker->node)->*f)(t, u);
95 }
96};
97// three arguments
98template <typename res, typename T, typename U, typename V> void molecule::ActOnAllVectors( res (Vector::*f)(T, U, V), T t, U u, V v)
99{
100 atom *Walker = start;
101 while (Walker->next != end) {
102 Walker = Walker->next;
103 ((Walker->node)->*f)(t, u, v);
104 }
105};
106template <typename res, typename T, typename U, typename V> void molecule::ActOnAllVectors( res (Vector::*f)(T, U, V) const, T t, U u, V v)
107{
108 atom *Walker = start;
109 while (Walker->next != end) {
110 Walker = Walker->next;
111 ((Walker->node)->*f)(t, u, v);
112 }
113};
114template <typename res, typename T, typename U, typename V> void molecule::ActOnAllVectors( res (Vector::*f)(T, U, V), T t, U u, V v) const
115{
116 atom *Walker = start;
117 while (Walker->next != end) {
118 Walker = Walker->next;
119 ((Walker->node)->*f)(t, u, v);
120 }
121};
122
123// ================== Acting with each Atoms on same molecule ========================== //
124
125// zero arguments
126template <typename res> void molecule::ActWithEachAtom( res (molecule::*f)(atom *))
127{
128 atom *Walker = start;
129 while (Walker->next != end) {
130 Walker = Walker->next;
131 (*f)(Walker);
132 }
133};
134template <typename res> void molecule::ActWithEachAtom( res (molecule::*f)(atom *) const)
135{
136 atom *Walker = start;
137 while (Walker->next != end) {
138 Walker = Walker->next;
139 (*f)(Walker);
140 }
141};
142template <typename res> void molecule::ActWithEachAtom( res (molecule::*f)(atom *)) const
143{
144 atom *Walker = start;
145 while (Walker->next != end) {
146 Walker = Walker->next;
147 (*f)(Walker);
148 }
149};
150
151// ================== Acting with each Atoms on copy molecule ========================== //
152
153// zero arguments
154template <typename res> void molecule::ActOnCopyWithEachAtom( res (molecule::*f)(atom *) , molecule *copy)
155{
156 atom *Walker = start;
157 while (Walker->next != end) {
158 Walker = Walker->next;
159 (copy->*f)(Walker);
160 }
161};
162template <typename res> void molecule::ActOnCopyWithEachAtom( res (molecule::*f)(atom *) const , molecule *copy)
163{
164 atom *Walker = start;
165 while (Walker->next != end) {
166 Walker = Walker->next;
167 (copy->*f)(Walker);
168 }
169};
170template <typename res> void molecule::ActOnCopyWithEachAtom( res (molecule::*f)(atom *) , molecule *copy) const
171{
172 atom *Walker = start;
173 while (Walker->next != end) {
174 Walker = Walker->next;
175 (copy->*f)(Walker);
176 }
177};
178
179// ================== Acting with each Atoms on copy molecule if true ========================== //
180
181// zero arguments
182template <typename res> void molecule::ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) () )
183{
184 atom *Walker = start;
185 while (Walker->next != end) {
186 Walker = Walker->next;
187 if ((Walker->*condition)())
188 (copy->*f)(Walker);
189 }
190};
191// one argument
192template <typename res, typename T> void molecule::ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) (T), T t )
193{
194 atom *Walker = start;
195 while (Walker->next != end) {
196 Walker = Walker->next;
197 if ((Walker->*condition)(t))
198 (copy->*f)(Walker);
199 }
200};
201// two arguments
202template <typename res, typename T, typename U> void molecule::ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) (T, U), T t, U u )
203{
204 atom *Walker = start;
205 while (Walker->next != end) {
206 Walker = Walker->next;
207 if ((Walker->*condition)(t,u))
208 (copy->*f)(Walker);
209 }
210};
211// three arguments
212template <typename res, typename T, typename U, typename V> void molecule::ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) (T, U, V), T t, U u, V v )
213{
214 atom *Walker = start;
215 while (Walker->next != end) {
216 Walker = Walker->next;
217 if ((Walker->*condition)(t,u,v))
218 (copy->*f)(Walker);
219 }
220};
221
222// ================== Acting on all Atoms ========================== //
223
224// zero arguments
225template <typename res> void molecule::ActOnAllAtoms( res (atom::*f)())
226{
227 atom *Walker = start;
228 while (Walker->next != end) {
229 Walker = Walker->next;
230 (Walker->*f)();
231 }
232};
233template <typename res> void molecule::ActOnAllAtoms( res (atom::*f)() const)
234{
235 atom *Walker = start;
236 while (Walker->next != end) {
237 Walker = Walker->next;
238 (Walker->*f)();
239 }
240};
241template <typename res> void molecule::ActOnAllAtoms( res (atom::*f)()) const
242{
243 atom *Walker = start;
244 while (Walker->next != end) {
245 Walker = Walker->next;
246 (Walker->*f)();
247 }
248};
249// one argument
250template <typename res, typename T> void molecule::ActOnAllAtoms( res (atom::*f)(T), T t )
251{
252 atom *Walker = start;
253 while (Walker->next != end) {
254 Walker = Walker->next;
255 (Walker->*f)(t);
256 }
257};
258template <typename res, typename T> void molecule::ActOnAllAtoms( res (atom::*f)(T) const, T t )
259{
260 atom *Walker = start;
261 while (Walker->next != end) {
262 Walker = Walker->next;
263 (Walker->*f)(t);
264 }
265};
266template <typename res, typename T> void molecule::ActOnAllAtoms( res (atom::*f)(T) const, T t ) const
267{
268 atom *Walker = start;
269 while (Walker->next != end) {
270 Walker = Walker->next;
271 (Walker->*f)(t);
272 }
273};
274// two argument
275template <typename res, typename T, typename U> void molecule::ActOnAllAtoms( res (atom::*f)(T, U), T t, U u )
276{
277 atom *Walker = start;
278 while (Walker->next != end) {
279 Walker = Walker->next;
280 (Walker->*f)(t, u);
281 }
282};
283template <typename res, typename T, typename U> void molecule::ActOnAllAtoms( res (atom::*f)(T, U) const, T t, U u )
284{
285 atom *Walker = start;
286 while (Walker->next != end) {
287 Walker = Walker->next;
288 (Walker->*f)(t, u);
289 }
290};
291template <typename res, typename T, typename U> void molecule::ActOnAllAtoms( res (atom::*f)(T, U), T t, U u ) const
292{
293 atom *Walker = start;
294 while (Walker->next != end) {
295 Walker = Walker->next;
296 (Walker->*f)(t, u);
297 }
298};
299// three argument
300template <typename res, typename T, typename U, typename V> void molecule::ActOnAllAtoms( res (atom::*f)(T, U, V), T t, U u, V v)
301{
302 atom *Walker = start;
303 while (Walker->next != end) {
304 Walker = Walker->next;
305 (Walker->*f)(t, u, v);
306 }
307};
308template <typename res, typename T, typename U, typename V> void molecule::ActOnAllAtoms( res (atom::*f)(T, U, V) const, T t, U u, V v)
309{
310 atom *Walker = start;
311 while (Walker->next != end) {
312 Walker = Walker->next;
313 (Walker->*f)(t, u, v);
314 }
315};
316template <typename res, typename T, typename U, typename V> void molecule::ActOnAllAtoms( res (atom::*f)(T, U, V), T t, U u, V v) const
317{
318 atom *Walker = start;
319 while (Walker->next != end) {
320 Walker = Walker->next;
321 (Walker->*f)(t, u, v);
322 }
323};
324// four arguments
325template <typename res, typename T, typename U, typename V, typename W> void molecule::ActOnAllAtoms( res (atom::*f)(T, U, V, W), T t, U u, V v, W w)
326{
327 atom *Walker = start;
328 while (Walker->next != end) {
329 Walker = Walker->next;
330 (Walker->*f)(t, u, v, w);
331 }
332};
333template <typename res, typename T, typename U, typename V, typename W> void molecule::ActOnAllAtoms( res (atom::*f)(T, U, V, W) const, T t, U u, V v, W w)
334{
335 atom *Walker = start;
336 while (Walker->next != end) {
337 Walker = Walker->next;
338 (Walker->*f)(t, u, v, w);
339 }
340};
341template <typename res, typename T, typename U, typename V, typename W> void molecule::ActOnAllAtoms( res (atom::*f)(T, U, V, W), T t, U u, V v, W w) const
342{
343 atom *Walker = start;
344 while (Walker->next != end) {
345 Walker = Walker->next;
346 (Walker->*f)(t, u, v, w);
347 }
348};
349
350// ===================== Accesssing arrays indexed by some integer for each atom ======================
351
352// for atom ints
353template <typename T> void molecule::SetIndexedArrayForEachAtomTo ( T *array, int atom::*index, void (*Setor)(T *, T) )
354{
355 atom *Walker = start;
356 while (Walker->next != end) {
357 Walker = Walker->next;
358 (*Setor) (&array[(Walker->*index)], 1);
359 }
360};
361template <typename T> void molecule::SetIndexedArrayForEachAtomTo ( T *array, int atom::*index, void (*Setor)(T *, T), T value )
362{
363 atom *Walker = start;
364 while (Walker->next != end) {
365 Walker = Walker->next;
366 (*Setor) (&array[(Walker->*index)], value);
367 }
368};
369// for element ints inside atom class
370template <typename T> void molecule::SetIndexedArrayForEachAtomTo ( T *array, int element::*index, void (*Setor)(T *, T) )
371{
372 atom *Walker = start;
373 while (Walker->next != end) {
374 Walker = Walker->next;
375 (*Setor) (&array[(Walker->type->*index)], 1);
376 }
377};
378template <typename T> void molecule::SetIndexedArrayForEachAtomTo ( T *array, int element::*index, void (*Setor)(T *, T), T value )
379{
380 atom *Walker = start;
381 while (Walker->next != end) {
382 Walker = Walker->next;
383 (*Setor) (&array[(Walker->type->*index)], value);
384 }
385};
386
387#endif /* MOLECULE_TEMPLATE_HPP_ */
Note: See TracBrowser for help on using the repository browser.