| 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 |  | 
|---|
| 11 | using namespace std; | 
|---|
| 12 |  | 
|---|
| 13 | #include <list> | 
|---|
| 14 | #include "../vector.hpp" | 
|---|
| 15 |  | 
|---|
| 16 | #define ListOfVectors list<Vector *> | 
|---|
| 17 |  | 
|---|
| 18 | class VectorList | 
|---|
| 19 | { | 
|---|
| 20 | public: | 
|---|
| 21 | VectorList(); | 
|---|
| 22 | VectorList(VectorList &ref); | 
|---|
| 23 | ~VectorList(); | 
|---|
| 24 |  | 
|---|
| 25 | void AddVector(Vector *v); | 
|---|
| 26 | void EmptyList(); | 
|---|
| 27 |  | 
|---|
| 28 | template <typename klasse, typename res, typename T> void ActOnAll( res (klasse::*f)(T), T t ); | 
|---|
| 29 | template <typename klasse, typename res, typename T, typename U> void ActOnAll( res (klasse::*f)(T, U), T t, U u ); | 
|---|
| 30 | template <typename klasse, typename res, typename T, typename U, typename V> void ActOnAll( res (klasse::*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 |  | 
|---|
| 40 | VectorList::VectorList() { }; | 
|---|
| 41 | VectorList::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 |  | 
|---|
| 49 | VectorList & 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 |  | 
|---|
| 58 | bool 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 | //Log() << Verbose(0) << **lRunner << " == " << **rRunner << endl; | 
|---|
| 65 | status = status && (**lRunner == **rRunner); | 
|---|
| 66 | } | 
|---|
| 67 | return status; | 
|---|
| 68 | }; | 
|---|
| 69 |  | 
|---|
| 70 | VectorList::~VectorList() { }; | 
|---|
| 71 |  | 
|---|
| 72 | template <typename klasse, typename res, typename T> void VectorList::ActOnAll( res (klasse::*f)(T), T t ) | 
|---|
| 73 | { | 
|---|
| 74 | for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++) | 
|---|
| 75 | ((*Runner)->*f)(t); | 
|---|
| 76 | }; | 
|---|
| 77 |  | 
|---|
| 78 | template <typename klasse, typename res, typename T, typename U> void VectorList::ActOnAll( res (klasse::*f)(T, U), T t, U u ) | 
|---|
| 79 | { | 
|---|
| 80 | for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++) | 
|---|
| 81 | ((*Runner)->*f)(t, u); | 
|---|
| 82 | }; | 
|---|
| 83 |  | 
|---|
| 84 | template <typename klasse, typename res, typename T, typename U, typename V> void VectorList::ActOnAll( res (klasse::*f)(T, U, V), T t, U u, V v) | 
|---|
| 85 | { | 
|---|
| 86 | for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++) | 
|---|
| 87 | ((*Runner)->*f)(t, u, v); | 
|---|
| 88 | }; | 
|---|
| 89 |  | 
|---|
| 90 | void VectorList::AddVector(Vector *v) | 
|---|
| 91 | { | 
|---|
| 92 | Vectors.push_back(v); | 
|---|
| 93 | }; | 
|---|
| 94 |  | 
|---|
| 95 | void VectorList::EmptyList() | 
|---|
| 96 | { | 
|---|
| 97 | for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++) { | 
|---|
| 98 | delete(*Runner); | 
|---|
| 99 | } | 
|---|
| 100 | Vectors.clear(); | 
|---|
| 101 | } | 
|---|
| 102 |  | 
|---|
| 103 | #endif /* ACTONALLTEST_HPP_ */ | 
|---|