diff --git a/pyfastani/_atomic_vector.hpp b/pyfastani/_atomic_vector.hpp new file mode 100644 index 0000000000000000000000000000000000000000..a3ebcc01633a4baea733a716ef4ce950383fa052 --- /dev/null +++ b/pyfastani/_atomic_vector.hpp @@ -0,0 +1,21 @@ +#ifndef _SAFEVEC_HPP +#define _SAFEVEC_HPP + +#include <mutex> +#include <vector> + + +template <class T> +class atomic_vector: public std::vector<T> { +protected: + std::mutex mutex; +public: + atomic_vector(): std::vector<T>(), mutex() {} + void push_back(const T& val) { + mutex.lock(); + std::vector<T>::push_back(val); + mutex.unlock(); + } +}; + +#endif diff --git a/pyfastani/_atomic_vector.pxd b/pyfastani/_atomic_vector.pxd new file mode 100644 index 0000000000000000000000000000000000000000..1c0798699204238303b8b455968782287b5f973b --- /dev/null +++ b/pyfastani/_atomic_vector.pxd @@ -0,0 +1,5 @@ +from libcpp.vector cimport vector + +cdef extern from "_atomic_vector.hpp" nogil: + cdef cppclass atomic_vector[T](vector[T]): + pass