Studio/src/Data/MeshWorkQueue.h
Provides concurrent access to a list of shapes to work needing reconstruction.
Namespaces
Classes
Functions
Functions Documentation
Q_DECLARE_METATYPE(
shapeworks::MeshWorkItem
)
Source code
#pragma once
// stl
#include <list>
// qt
#include <QMutex>
#include <QMetaType>
// vnl
#include "vnl/vnl_vector.h"
#include <Eigen/Eigen>
namespace shapeworks {
class MeshWorkItem
{
public:
std::string filename;
Eigen::VectorXd points;
int domain{0};
size_t memory_size{0};
friend bool operator<(const MeshWorkItem &a, const MeshWorkItem &b);
friend bool operator==(const MeshWorkItem &a, const MeshWorkItem &b);
};
class MeshWorkQueue
{
public:
using WorkList = std::list<MeshWorkItem>;
MeshWorkQueue();
~MeshWorkQueue();
void push(const MeshWorkItem &item);
MeshWorkItem* get_next_work_item();
bool is_inside(const MeshWorkItem &item);
void remove(const MeshWorkItem &item);
bool is_empty();
int size();
private:
bool in_inside_list(const MeshWorkItem &item, const WorkList& list);
// for concurrent access
QMutex mutex_;
WorkList work_list_;
WorkList processing_list_;
};
}
Q_DECLARE_METATYPE(shapeworks::MeshWorkItem);
Updated on 2022-07-23 at 16:40:07 -0600