File: pyListHelper.h

package info (click to toggle)
ball 1.5.0%2Bgit20180813.37fc53c-6
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 239,888 kB
  • sloc: cpp: 326,149; ansic: 4,208; python: 2,303; yacc: 1,778; lex: 1,099; xml: 958; sh: 322; makefile: 95
file content (62 lines) | stat: -rw-r--r-- 1,224 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//
// $Id: pyListHelper.h,v 1.1.2.2 2007/03/28 15:43:38 amoll Exp $
//
//
#ifndef BALL_PYTHON_PYLIST_HELPER
#define BALL_PYTHON_PYLIST_HELPER

#include <BALL/DATATYPE/regularData3D.h>

namespace BALL
{

typedef std::list<RegularData3D*> RegularData3DList;

// Convert the list.
#define BALL_CONVERT_LIST_FROM(TYPE)\
	PyObject *pl;\
	\
	if ((pl = PyList_New(0)) == NULL) return NULL;\
	\
	for (TYPE##List::const_iterator it = sipCpp->begin(); it != sipCpp->end(); ++it)\
	{\
		PyObject *inst = BALL_CONVERT_FROM_INSTANCE(*it, TYPE, 0);\
		\
		if (inst == NULL || PyList_Append(pl,inst) < 0)\
		{\
			Py_DECREF(pl);\
			return NULL;\
		}\
	}\
	\
	return pl;
 

// Convert a Python list of TYPE instances to a TYPEList object on the heap.
#define BALL_CONVERT_LIST_TO(TYPE)\
	if (sipIsErr == NULL) return PyList_Check(sipPy);\
	\
	TYPE##List* alist = new TYPE##List;\
 	\
	for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)\
	{\
		TYPE* a = reinterpret_cast<TYPE*>(BALL_FORCE_CONVERT_TO_TYPE(PyList_GET_ITEM(sipPy,i), TYPE));\
 		\
		if (*sipIsErr)\
		{\
			delete alist;\
			return 0;\
		}\
 		\
		alist->push_back(a);\
	}\
 	\
	*sipCppPtr = alist;\
	\
	return 1;

}

#endif