blob: cb28e1145d073b3f7e5bbb10fcc75bb9992c6515 [file] [log] [blame]
#pragma once
#include <Python.h>
template<class T>
class THPPointer {
public:
THPPointer(): ptr(nullptr) {};
explicit THPPointer(T *ptr): ptr(ptr) {};
THPPointer(THPPointer &&p) { free(); ptr = p.ptr; p.ptr = nullptr; };
~THPPointer() { free(); };
T * get() { return ptr; }
const T * get() const { return ptr; }
T * release() { T *tmp = ptr; ptr = NULL; return tmp; }
operator T*() { return ptr; }
THPPointer& operator =(T *new_ptr) { free(); ptr = new_ptr; return *this; }
THPPointer& operator =(THPPointer &&p) { free(); ptr = p.ptr; p.ptr = nullptr; return *this; }
T * operator ->() { return ptr; }
operator bool() { return ptr != nullptr; }
private:
void free();
T *ptr = nullptr;
};
typedef THPPointer<PyObject> THPObjectPtr;