mirror of https://github.com/H-uru/korman.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.6 KiB
60 lines
1.6 KiB
/* This file is part of Korman. |
|
* |
|
* Korman is free software: you can redistribute it and/or modify |
|
* it under the terms of the GNU General Public License as published by |
|
* the Free Software Foundation, either version 3 of the License, or |
|
* (at your option) any later version. |
|
* |
|
* Korman is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public License |
|
* along with Korman. If not, see <http://www.gnu.org/licenses/>. |
|
*/ |
|
|
|
#ifndef _KORLIB_H |
|
#define _KORLIB_H |
|
|
|
#define NOMINMAX |
|
|
|
#include <cstdint> |
|
#include <Python.h> |
|
#include <utility> |
|
|
|
#define _pycs(x) const_cast<char*>(x) |
|
#define arrsize(a) (sizeof(a) / sizeof((a)[0])) |
|
|
|
class PyObjectRef { |
|
PyObject* m_object; |
|
|
|
public: |
|
PyObjectRef() : m_object() { } |
|
PyObjectRef(PyObject* o) : m_object(o) { } |
|
PyObjectRef(const PyObjectRef& copy) = delete; |
|
PyObjectRef(PyObjectRef&& move) { |
|
m_object = move.m_object; |
|
move.m_object = NULL; |
|
} |
|
|
|
~PyObjectRef() { Py_XDECREF(m_object); } |
|
|
|
operator PyObject*() const { return m_object; } |
|
|
|
PyObjectRef& operator =(PyObject* rhs) { |
|
Py_XDECREF(m_object); |
|
m_object = rhs; |
|
return *this; |
|
} |
|
|
|
PyObjectRef& operator =(PyObjectRef&& move) { |
|
m_object = move.m_object; |
|
move.m_object = NULL; |
|
return *this; |
|
} |
|
|
|
PyObjectRef& operator =(const PyObjectRef& copy) = delete; |
|
}; |
|
|
|
#endif // _KORLIB_H
|
|
|