Version: 8.3.0
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
AutoGIL.hxx
Go to the documentation of this file.
1
// Copyright (C) 2006-2016 CEA/DEN, EDF R&D
2
//
3
// This library is free software; you can redistribute it and/or
4
// modify it under the terms of the GNU Lesser General Public
5
// License as published by the Free Software Foundation; either
6
// version 2.1 of the License, or (at your option) any later version.
7
//
8
// This library is distributed in the hope that it will be useful,
9
// but WITHOUT ANY WARRANTY; without even the implied warranty of
10
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
// Lesser General Public License for more details.
12
//
13
// You should have received a copy of the GNU Lesser General Public
14
// License along with this library; if not, write to the Free Software
15
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
//
17
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18
//
19
20
#ifndef __AUTOGIL_HXX__
21
#define __AUTOGIL_HXX__
22
23
#include "
Exception.hxx
"
24
#include <Python.h>
25
26
namespace
YACS
27
{
28
namespace
ENGINE
29
{
30
class
AutoGIL
31
{
32
public
:
33
AutoGIL
():
_gstate
(PyGILState_Ensure()) { }
34
~AutoGIL
() { PyGILState_Release(
_gstate
); }
35
private
:
36
PyGILState_STATE
_gstate
;
37
};
38
39
class
AutoPyRef
40
{
41
public
:
42
AutoPyRef
(PyObject *pyobj=0):
_pyobj
(pyobj) { }
43
~AutoPyRef
() {
release
(); }
44
AutoPyRef
(
const
AutoPyRef
& other):
_pyobj
(other.
_pyobj
) {
if
(
_pyobj
) Py_XINCREF(
_pyobj
); }
45
AutoPyRef
&
operator=
(
const
AutoPyRef
& other) {
if
(
_pyobj
==other.
_pyobj
)
return
*
this
;
release
();
_pyobj
=other.
_pyobj
; Py_XINCREF(
_pyobj
);
return
*
this
; }
46
operator
PyObject *() {
return
_pyobj
; }
47
void
set
(PyObject *pyobj) {
if
(pyobj==
_pyobj
) return ;
release
();
_pyobj
=pyobj; }
48
PyObject *
get
() {
return
_pyobj
; }
49
bool
isNull
()
const
{
return
_pyobj
==0; }
50
PyObject *
retn
() {
if
(
_pyobj
) Py_XINCREF(
_pyobj
);
return
_pyobj
; }
51
private
:
52
void
release
() {
if
(
_pyobj
) Py_XDECREF(
_pyobj
);
_pyobj
=0; }
53
private
:
54
PyObject *
_pyobj
;
55
};
56
}
57
}
58
59
#endif
src
runtime
AutoGIL.hxx
Copyright © 2006-2017 CEA/DEN, EDF R&D