source: molecuilder/src/ActOnAlltest.hpp@ 4bc937

Last change on this file since 4bc937 was 4bc937, checked in by Frederik Heber <heber@…>, 16 years ago

Member functions of Vector class may be called while going over an iteration of a list containing Vectors, thanks to member function pointers.

  • Unit test ActOnAllTest is the basic class for showing, how we can use any member function of Vector:: and make it act globally over a list of vectors.
  • this is incorporated into the definition of class molecule for the vectors contained in the atoms chained list.
  • Property mode set to 100644
File size: 2.9 KB
Line 
1/*
2 * ActOnAlltest.hpp
3 *
4 * Created on: 04.10.2009
5 * Author: FrederikHeber
6 */
7
8#ifndef ACTONALLTEST_HPP_
9#define ACTONALLTEST_HPP_
10
11using namespace std;
12
13#include <list>
14#include <vector.hpp>
15
16#define ListOfVectors list<Vector *>
17
18class VectorList
19{
20public:
21 VectorList();
22 VectorList(VectorList &ref);
23 ~VectorList();
24
25 void AddVector(Vector *v);
26 void EmptyList();
27
28 template <typename res, typename T> void ActOnAllVectors( res (Vector::*f)(T), T t );
29 template <typename res, typename T, typename U> void ActOnAllVectors( res (Vector::*f)(T, U), T t, U u );
30 template <typename res, typename T, typename U, typename V> void ActOnAllVectors( res (Vector::*f)(T, U, V), T t, U u, V v);
31
32 bool operator == (VectorList &rhs);
33 VectorList& operator = (VectorList &ref);
34
35//private:
36 ListOfVectors Vectors;
37};
38
39
40VectorList::VectorList() { };
41VectorList::VectorList(VectorList &ref)
42{
43 ref.EmptyList();
44 for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++) {
45 ref.Vectors.push_back(new Vector (**Runner));
46 }
47};
48
49VectorList & VectorList::operator = (VectorList &ref)
50{
51 EmptyList();
52 for (ListOfVectors::iterator Runner = ref.Vectors.begin(); Runner != ref.Vectors.end(); Runner++) {
53 Vectors.push_back(new Vector (**Runner));
54 }
55 return *this;
56};
57
58bool VectorList::operator == (VectorList &rhs)
59{
60 bool status = true;
61 ListOfVectors::iterator lRunner = Vectors.begin();
62 ListOfVectors::iterator rRunner = rhs.Vectors.begin();
63 for (;(lRunner != Vectors.end()) && (rRunner != rhs.Vectors.end()); lRunner++, rRunner++) {
64 //cout << **lRunner << " == " << **rRunner << endl;
65 status = status && (**lRunner == **rRunner);
66 }
67 return status;
68};
69
70VectorList::~VectorList() { };
71
72template <typename res, typename T> void VectorList::ActOnAllVectors( res (Vector::*f)(T), T t )
73{
74 Vector *test = NULL;
75 for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++) {
76 test = *Runner;
77 (test->*f)(t);
78 }
79};
80
81template <typename res, typename T, typename U> void VectorList::ActOnAllVectors( res (Vector::*f)(T, U), T t, U u )
82{
83 Vector *test = NULL;
84 for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++) {
85 test = *Runner;
86 (test->*f)(t, u);
87 }
88};
89
90template <typename res, typename T, typename U, typename V> void VectorList::ActOnAllVectors( res (Vector::*f)(T, U, V), T t, U u, V v)
91{
92 Vector *test = NULL;
93 for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++) {
94 test = *Runner;
95 (test->*f)(t, u, v);
96 }
97};
98
99void VectorList::AddVector(Vector *v)
100{
101 Vectors.push_back(v);
102};
103
104void VectorList::EmptyList()
105{
106 for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++) {
107 delete(*Runner);
108 }
109 Vectors.clear();
110}
111
112#endif /* ACTONALLTEST_HPP_ */
Note: See TracBrowser for help on using the repository browser.