Select Git revision
Particle.hpp

BATON Theau authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Particle.hpp 1.80 KiB
#pragma once
#include <chrono>
#include <vector>
#include <CurveTools/CPU/CurveGenerator.hpp>
namespace pg::particle
{
class Particle
{
private:
size_t m_born;
ct::Point m_position;
public:
Particle(const ct::Point& position = ct::Point());
Particle(size_t born, const ct::Point& position = ct::Point());
virtual ~Particle() = default;
inline size_t getBorn() const {return this->m_born;}
inline ct::Point getPosition() const {return this->m_position;}
inline bool isDead(size_t current_time, size_t max_time) const {return (current_time - this->m_born) > max_time;}
inline void setBorn(size_t born) {this->m_born = born;}
inline void setPosition(const ct::Point& position) {this->m_position = position;}
inline void translate(const ct::Point& position) {this->m_position += position;}
virtual void update(double = 0.0) = 0;
inline friend bool operator==(const Particle & p1, const Particle & p2) {return p1.m_position == p2.m_position && p1.m_born == p2.m_born;}
inline friend bool operator!=(const Particle & p1, const Particle & p2) {return !(p1 == p2);}
inline friend bool operator>(const Particle & p1, const Particle & p2) {return p1.m_born > p2.m_born;}
inline friend bool operator>=(const Particle & p1, const Particle & p2) {return p1 > p2 || p1 == p2;}
inline friend bool operator<(const Particle & p1, const Particle & p2) {return !(p1 >= p2);}
inline friend bool operator<=(const Particle & p1, const Particle & p2) {return !(p1 > p2);}
template <typename T>
static void purge(std::vector<T> & container, size_t current_time, size_t max_time) {
for (auto it = container.begin(); it != container.end();) {
if ((*it)->isDead(current_time, max_time)) {
it = container.erase(it);
}
if (it != container.end()) {
++it;
}
}
}
};
}