Program Listing for File ThreadedInterpolation.h¶
↰ Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/StellarEvolution/ThreadedInterpolation.h)
#include "../Core/SharedLibraryExportMacros.h"
#include "InterpolationQuantities.h"
#include "../Core/InterpolatingFunctionALGLIB.h"
#ifndef TOOLCHAIN_MSVC
#include <pthread.h>
#endif
#include <vector>
#include <list>
namespace StellarEvolution {
class LIB_LOCAL InterpolationQueue {
private:
std::list<const double *> __x;
std::list<const double *> __y;
std::list<size_t> __npoints;
std::list<int> __nodes;
std::list<double> __smoothing;
std::list<int> __quantity_id;
std::list<int> __grid_index;
std::vector<Core::InterpolatingFunctionALGLIB*> __result;
#ifndef TOOLCHAIN_MSVC
pthread_mutex_t __sync_mutex;
#endif
#ifndef NDEBUG
std::list<int>::const_iterator __quantity_id_iter;
#endif
void interpolate_thread();
public:
InterpolationQueue()
{
#ifndef TOOLCHAIN_MSVC
pthread_mutex_init(&__sync_mutex, NULL);
#endif
}
void push_back(const double *x,
const double *y,
size_t npoints,
int nodes,
double smoothing,
int quantity_id,
int grid_index);
void calculate(unsigned num_threads);
int quantity_id() const {return __quantity_id.front();}
int grid_index() const {return __grid_index.front();}
Core::InterpolatingFunctionALGLIB* result() const
{return __result[__result.size() - __quantity_id.size()];}
void pop_front();
operator bool() const {return __quantity_id.size();}
friend void *do_interpolation(void *);
};//End InterpolationQueue class.
} //End StellarEvolution namespace.