VideoTexture: use PyObjectPlus.h instead of Python.h for compatibility with Python2.3
[blender.git] / source / gameengine / VideoTexture / PyTypeList.cpp
1 /* $Id$
2 -----------------------------------------------------------------------------
3 This source file is part of blendTex library
4
5 Copyright (c) 2007 The Zdeno Ash Miklas
6
7 This program is free software; you can redistribute it and/or modify it under
8 the terms of the GNU Lesser General Public License as published by the Free Software
9 Foundation; either version 2 of the License, or (at your option) any later
10 version.
11
12 This program is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public License along with
17 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
19 http://www.gnu.org/copyleft/lesser.txt.
20 -----------------------------------------------------------------------------
21 */
22
23
24 #include "PyTypeList.h"
25
26 #include <memory>
27 #include <vector>
28
29 #include <PyObjectPlus.h>
30
31
32 /// check, if type is in list
33 bool PyTypeList::in (PyTypeObject * type)
34 {
35         // if list exists
36         if (m_list.get() != NULL)
37                 // iterate items in list
38                 for (PyTypeListType::iterator it = m_list->begin(); it != m_list->end(); ++it)
39                         // if item is found, return with success
40                         if ((*it)->getType() == type) return true;
41         // otherwise return not found
42         return false;
43 }
44
45 /// add type to list
46 void PyTypeList::add (PyTypeObject * type, const char * name)
47 {
48         PyTypeListItem * typeItem;
49         // if list doesn't exist, create it
50         if (m_list.get() == NULL) 
51                 m_list.reset(new PyTypeListType());
52         if (!in(type))
53                 // add new item to list
54                 m_list->push_back(new PyTypeListItem(type, name));
55 }
56
57 /// prepare types
58 bool PyTypeList::ready (void)
59 {
60         // if list exists
61         if (m_list.get() != NULL)
62                 // iterate items in list
63                 for (PyTypeListType::iterator it = m_list->begin(); it != m_list->end(); ++it)
64                         // if preparation failed, report it
65                         if (PyType_Ready((*it)->getType()) < 0) return false;
66         // success
67         return true;
68 }
69
70 /// register types to module
71 void PyTypeList::reg (PyObject * module)
72 {
73         // if list exists
74         if (m_list.get() != NULL)
75                 // iterate items in list
76                 for (PyTypeListType::iterator it = m_list->begin(); it != m_list->end(); ++it)
77                 {
78                         // increase ref count
79                         Py_INCREF((*it)->getType());
80                         // add type to module
81                         PyModule_AddObject(module, (*it)->getName(), (PyObject*)(*it)->getType());
82                 }
83 }