41 #ifndef REDUCEABLEDATASOURCE_H_
42 #define REDUCEABLEDATASOURCE_H_
45 #include <boost/mpi.hpp>
47 #include "TDataSource.h"
48 #include "SVDataSource.h"
50 #include "RepastProcess.h"
58 template <
typename Op,
typename T>
74 virtual void record();
76 virtual SVDataSource::DataType type()
const {
81 template<
typename Op,
typename T>
83 _dataSource(dataSource) {
87 template<
typename Op,
typename T>
88 ReducibleDataSource<Op, T>::~ReducibleDataSource() {
92 template<
typename Op,
typename T>
93 void ReducibleDataSource<Op, T>::record() {
94 data.push_back(_dataSource->getData());
97 template<
typename Op,
typename T>
98 void ReducibleDataSource<Op, T>::write(Variable* var) {
101 size_t size = data.size();
102 T* results =
new T[size];
103 reduce(*comm, &data[0], size, results, _op, 0);
104 var->insert(results, size);
107 reduce(*comm, &data[0], data.size(), _op, 0);