3 Python wrapper for librfxswf.
5 Part of the swftools package.
7 Copyright (c) 2003 Matthias Kramm <kramm@quiss.org>
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
36 //----------------------------------------------------------------------------
37 PyObject
* tagmap_new()
39 PyObject
* self
= (PyObject
*)PyObject_New(TagMapObject
, &TagMapClass
);
40 TagMapObject
*tagmap
= (TagMapObject
*)self
;
41 tagmap
->obj2id
= PyDict_New();
42 tagmap
->id2obj
= PyDict_New();
43 tagmap
->objlist
= PyList_New(0);
44 tagmap
->currentID
= 0; //IDs start at 1
45 /* mylog("+%08x(%d) tagmap_new %08x(%d) %08x(%d), %08x(%d)", (int)self, self->ob_refcnt,
46 tagmap->obj2id, tagmap->obj2id->ob_refcnt ,
47 tagmap->id2obj, tagmap->id2obj->ob_refcnt ,
48 tagmap->objlist, tagmap->objlist->ob_refcnt);*/
52 //----------------------------------------------------------------------------
53 int tagmap_obj2id(PyObject
* self
, PyObject
* obj
)
55 TagMapObject
*tagmap
= (TagMapObject
*)self
;
56 PyObject
*id
= PyDict_GetItem(tagmap
->obj2id
, obj
);
59 int _id
= PyLong_AsLong(id
);
63 //----------------------------------------------------------------------------
64 PyObject
* tagmap_id2obj(PyObject
* self
, int _id
)
66 TagMapObject
*tagmap
= (TagMapObject
*)self
;
67 PyObject
*id
= PyLong_FromLong(_id
);
68 PyObject
*obj
= PyDict_GetItem(tagmap
->id2obj
, id
);
72 //----------------------------------------------------------------------------
73 int tagmap_getFreeID(PyObject
*self
)
75 TagMapObject
*tagmap
= (TagMapObject
*)self
;
76 int last
= tagmap
->currentID
;
79 PyObject
*id
= PyLong_FromLong(tagmap
->currentID
);
80 PyObject
*test
= PyDict_GetItem(tagmap
->id2obj
,id
);
84 mylog(" %08x(%d) tagmap_getFreeID -> %d", (int)self
, self
->ob_refcnt
, tagmap
->currentID
);
85 return tagmap
->currentID
;
87 } while(last
!= tagmap
->currentID
);
88 mylog(" %08x(%d) tagmap_getFreeID -> -1", (int)self
, self
->ob_refcnt
);
91 //----------------------------------------------------------------------------
92 static void tagmap_add_mapping(PyObject
*self
, int id
, PyObject
* obj
)
94 TagMapObject
*tagmap
= (TagMapObject
*)self
;
95 PyList_Append(tagmap
->objlist
, obj
);//Py_INCREF(obj); done by PyList_Append
96 PyObject
*id_obj
= PyLong_FromLong(id
);
97 PyDict_SetItem(tagmap
->obj2id
, obj
, id_obj
);//Py_INCREF(id_obj);Py_INCREF(obj); done by PyDict_SetItem
98 PyDict_SetItem(tagmap
->id2obj
, id_obj
, obj
);//Py_INCREF(id_obj);Py_INCREF(obj); done by PyDict_SetItem
101 //----------------------------------------------------------------------------
102 void tagmap_addMapping(PyObject
*self
, int id
, PyObject
* obj
)
104 TagMapObject
*tagmap
= (TagMapObject
*)self
;
105 int id2
= tagmap_obj2id(self
, obj
);
110 tagmap_add_mapping(self
, id
, obj
);
112 //----------------------------------------------------------------------------
113 int tagmap_add(PyObject
* self
, PyObject
* obj
)
115 TagMapObject
*tagmap
= (TagMapObject
*)self
;
116 int id
= tagmap_obj2id(self
, obj
);
118 mylog(" %08x(%d) tagmap_add %08x->%d (again)", (int)self
, self
->ob_refcnt
, (int)obj
, id
);
121 id
= tagmap_getFreeID(self
);
123 tagmap_add_mapping(self
, id
, obj
);
125 mylog(" %08x(%d) tagmap_add %08x->%d", (int)self
, self
->ob_refcnt
, (int)obj
, id
);
129 //----------------------------------------------------------------------------
130 void tagmap_dealloc(PyObject
* self
)
132 TagMapObject
*tagmap
= (TagMapObject
*)self
;
133 mylog("-%08x(%d) tagmap_dealloc %08x(%d) %08x(%d), %08x(%d)", (int)self
, self
->ob_refcnt
,
134 tagmap
->obj2id
, tagmap
->obj2id
->ob_refcnt
,
135 tagmap
->id2obj
, tagmap
->id2obj
->ob_refcnt
,
136 tagmap
->objlist
, tagmap
->objlist
->ob_refcnt
);
138 Py_DECREF(tagmap
->obj2id
);
140 Py_DECREF(tagmap
->id2obj
);
142 Py_DECREF(tagmap
->objlist
);
146 //----------------------------------------------------------------------------
147 PyObject
* tagmap_getObjectList(PyObject
* self
)
149 mylog(" %08x(%d) tagmap_getObjectList", (int)self
, self
->ob_refcnt
);
150 TagMapObject
*tagmap
= (TagMapObject
*)self
;
151 return tagmap
->objlist
;
153 //----------------------------------------------------------------------------
154 PyTypeObject TagMapClass
=
156 PyObject_HEAD_INIT(NULL
)
159 tp_basicsize
: sizeof(TagMapObject
),
161 tp_dealloc
: tagmap_dealloc
,