本文整理汇总了C++中PyTuple_New函数的典型用法代码示例。如果您正苦于以下问题:C++ PyTuple_New函数的具体用法?C++ PyTuple_New怎么用?C++ PyTuple_New使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PyTuple_New函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: subprocess_fork_exec
static PyObject *
subprocess_fork_exec(PyObject* self, PyObject *args)
{
PyObject *gc_module = NULL;
PyObject *executable_list, *py_fds_to_keep;
PyObject *env_list, *preexec_fn;
PyObject *process_args, *converted_args = NULL, *fast_args = NULL;
PyObject *preexec_fn_args_tuple = NULL;
int p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite;
int errpipe_read, errpipe_write, close_fds, restore_signals;
int call_setsid;
PyObject *cwd_obj, *cwd_obj2;
const char *cwd;
pid_t pid;
int need_to_reenable_gc = 0;
char *const *exec_array, *const *argv = NULL, *const *envp = NULL;
Py_ssize_t arg_num;
#ifdef WITH_THREAD
int import_lock_held = 0;
#endif
if (!PyArg_ParseTuple(
args, "OOpOOOiiiiiiiiiiO:fork_exec",
&process_args, &executable_list, &close_fds, &py_fds_to_keep,
&cwd_obj, &env_list,
&p2cread, &p2cwrite, &c2pread, &c2pwrite,
&errread, &errwrite, &errpipe_read, &errpipe_write,
&restore_signals, &call_setsid, &preexec_fn))
return NULL;
if (close_fds && errpipe_write < 3) { /* precondition */
PyErr_SetString(PyExc_ValueError, "errpipe_write must be >= 3");
return NULL;
}
if (PySequence_Length(py_fds_to_keep) < 0) {
PyErr_SetString(PyExc_ValueError, "cannot get length of fds_to_keep");
return NULL;
}
if (_sanity_check_python_fd_sequence(py_fds_to_keep)) {
PyErr_SetString(PyExc_ValueError, "bad value(s) in fds_to_keep");
return NULL;
}
/* We need to call gc.disable() when we'll be calling preexec_fn */
if (preexec_fn != Py_None) {
PyObject *result;
_Py_IDENTIFIER(isenabled);
_Py_IDENTIFIER(disable);
gc_module = PyImport_ImportModule("gc");
if (gc_module == NULL)
return NULL;
result = _PyObject_CallMethodId(gc_module, &PyId_isenabled, NULL);
if (result == NULL) {
Py_DECREF(gc_module);
return NULL;
}
need_to_reenable_gc = PyObject_IsTrue(result);
Py_DECREF(result);
if (need_to_reenable_gc == -1) {
Py_DECREF(gc_module);
return NULL;
}
result = _PyObject_CallMethodId(gc_module, &PyId_disable, NULL);
if (result == NULL) {
Py_DECREF(gc_module);
return NULL;
}
Py_DECREF(result);
}
exec_array = _PySequence_BytesToCharpArray(executable_list);
if (!exec_array)
goto cleanup;
/* Convert args and env into appropriate arguments for exec() */
/* These conversions are done in the parent process to avoid allocating
or freeing memory in the child process. */
if (process_args != Py_None) {
Py_ssize_t num_args;
/* Equivalent to: */
/* tuple(PyUnicode_FSConverter(arg) for arg in process_args) */
fast_args = PySequence_Fast(process_args, "argv must be a tuple");
if (fast_args == NULL)
goto cleanup;
num_args = PySequence_Fast_GET_SIZE(fast_args);
converted_args = PyTuple_New(num_args);
if (converted_args == NULL)
goto cleanup;
for (arg_num = 0; arg_num < num_args; ++arg_num) {
PyObject *borrowed_arg, *converted_arg;
borrowed_arg = PySequence_Fast_GET_ITEM(fast_args, arg_num);
if (PyUnicode_FSConverter(borrowed_arg, &converted_arg) == 0)
goto cleanup;
PyTuple_SET_ITEM(converted_args, arg_num, converted_arg);
}
argv = _PySequence_BytesToCharpArray(converted_args);
Py_CLEAR(converted_args);
Py_CLEAR(fast_args);
//.........这里部分代码省略.........
示例2: libxml_xmlXPathObjectPtrWrap
PyObject *
libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
{
PyObject *ret;
#ifdef DEBUG
printf("libxml_xmlXPathObjectPtrWrap: ctxt = %p\n", obj);
#endif
if (obj == NULL) {
Py_INCREF(Py_None);
return (Py_None);
}
switch (obj->type) {
case XPATH_XSLT_TREE: {
if ((obj->nodesetval == NULL) ||
(obj->nodesetval->nodeNr == 0) ||
(obj->nodesetval->nodeTab == NULL)) {
ret = PyList_New(0);
} else {
int i, len = 0;
xmlNodePtr node;
node = obj->nodesetval->nodeTab[0]->children;
while (node != NULL) {
len++;
node = node->next;
}
ret = PyList_New(len);
node = obj->nodesetval->nodeTab[0]->children;
for (i = 0;i < len;i++) {
PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));
node = node->next;
}
}
/*
* Return now, do not free the object passed down
*/
return (ret);
}
case XPATH_NODESET:
if ((obj->nodesetval == NULL)
|| (obj->nodesetval->nodeNr == 0)) {
ret = PyList_New(0);
} else {
int i;
xmlNodePtr node;
ret = PyList_New(obj->nodesetval->nodeNr);
for (i = 0; i < obj->nodesetval->nodeNr; i++) {
node = obj->nodesetval->nodeTab[i];
/* TODO: try to cast directly to the proper node type */
PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));
}
}
break;
case XPATH_BOOLEAN:
ret = PyInt_FromLong((long) obj->boolval);
break;
case XPATH_NUMBER:
ret = PyFloat_FromDouble(obj->floatval);
break;
case XPATH_STRING:
ret = PyString_FromString((char *) obj->stringval);
break;
case XPATH_POINT:
{
PyObject *node;
PyObject *indexIntoNode;
PyObject *tuple;
node = libxml_xmlNodePtrWrap(obj->user);
indexIntoNode = PyInt_FromLong((long) obj->index);
tuple = PyTuple_New(2);
PyTuple_SetItem(tuple, 0, node);
PyTuple_SetItem(tuple, 1, indexIntoNode);
ret = tuple;
break;
}
case XPATH_RANGE:
{
unsigned short bCollapsedRange;
bCollapsedRange = ( (obj->user2 == NULL) ||
((obj->user2 == obj->user) && (obj->index == obj->index2)) );
if ( bCollapsedRange ) {
PyObject *node;
PyObject *indexIntoNode;
PyObject *tuple;
PyObject *list;
list = PyList_New(1);
node = libxml_xmlNodePtrWrap(obj->user);
indexIntoNode = PyInt_FromLong((long) obj->index);
tuple = PyTuple_New(2);
PyTuple_SetItem(tuple, 0, node);
PyTuple_SetItem(tuple, 1, indexIntoNode);
//.........这里部分代码省略.........
示例3: char
static PyObject *__pyx_f_6ssdeep_6ssdeep_hash_bytes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_buf = 0;
char (*__pyx_v_utext);
PyObject *__pyx_v_res;
PyObject *__pyx_r;
char (*__pyx_1);
PyObject *__pyx_2 = 0;
PyObject *__pyx_3 = 0;
PyObject *__pyx_4 = 0;
int __pyx_5;
PyObject *__pyx_6 = 0;
static char *__pyx_argnames[] = {"buf",0};
if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_buf)) return 0;
Py_INCREF(__pyx_v_self);
Py_INCREF(__pyx_v_buf);
__pyx_v_res = Py_None; Py_INCREF(__pyx_v_res);
/* "/home/jose/tmp/ssdeep-2.2/pyssdeep-read-only/ssdeep.pyx":42 */
__pyx_1 = PyString_AsString(__pyx_v_buf); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; goto __pyx_L1;}
__pyx_v_utext = __pyx_1;
/* "/home/jose/tmp/ssdeep-2.2/pyssdeep-read-only/ssdeep.pyx":43 */
__pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; goto __pyx_L1;}
__pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; goto __pyx_L1;}
Py_INCREF(__pyx_v_buf);
PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_buf);
__pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; goto __pyx_L1;}
Py_DECREF(__pyx_2); __pyx_2 = 0;
Py_DECREF(__pyx_3); __pyx_3 = 0;
__pyx_5 = PyInt_AsLong(__pyx_4); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; goto __pyx_L1;}
Py_DECREF(__pyx_4); __pyx_4 = 0;
__pyx_2 = PyString_FromString(fuzzy_hash_data(__pyx_v_utext,__pyx_5)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; goto __pyx_L1;}
Py_DECREF(__pyx_v_res);
__pyx_v_res = __pyx_2;
__pyx_2 = 0;
/* "/home/jose/tmp/ssdeep-2.2/pyssdeep-read-only/ssdeep.pyx":44 */
__pyx_5 = PySequence_Contains(__pyx_v_res, __pyx_k5p); if (__pyx_5 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; goto __pyx_L1;}
if (__pyx_5) {
/* "/home/jose/tmp/ssdeep-2.2/pyssdeep-read-only/ssdeep.pyx":45 */
__pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n_SsdeepException); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; goto __pyx_L1;}
__pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_replace); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; goto __pyx_L1;}
__pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; goto __pyx_L1;}
Py_INCREF(__pyx_k6p);
PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k6p);
Py_INCREF(__pyx_k7p);
PyTuple_SET_ITEM(__pyx_2, 1, __pyx_k7p);
__pyx_6 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; goto __pyx_L1;}
Py_DECREF(__pyx_4); __pyx_4 = 0;
Py_DECREF(__pyx_2); __pyx_2 = 0;
__Pyx_Raise(__pyx_3, __pyx_v_res, __pyx_6);
Py_DECREF(__pyx_3); __pyx_3 = 0;
Py_DECREF(__pyx_6); __pyx_6 = 0;
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; goto __pyx_L1;}
goto __pyx_L2;
}
/*else*/ {
Py_INCREF(__pyx_v_res);
__pyx_r = __pyx_v_res;
goto __pyx_L0;
}
__pyx_L2:;
__pyx_r = Py_None; Py_INCREF(__pyx_r);
goto __pyx_L0;
__pyx_L1:;
Py_XDECREF(__pyx_2);
Py_XDECREF(__pyx_3);
Py_XDECREF(__pyx_4);
Py_XDECREF(__pyx_6);
__Pyx_AddTraceback("ssdeep.ssdeep.hash_bytes");
__pyx_r = 0;
__pyx_L0:;
Py_DECREF(__pyx_v_res);
Py_DECREF(__pyx_v_self);
Py_DECREF(__pyx_v_buf);
return __pyx_r;
}
示例4: AerospikeClient_Info_each
/**
*******************************************************************************************************
* Callback for as_info_foreach().
*
* @param err The as_error to be populated by the function
* with the encountered error if any.
* @param node The current as_node object for which the
* callback is fired by c client.
* @param req The info request string.
* @param res The info response string for current node.
* @pram udata The callback udata containing the host_lookup
* array and the return zval to be populated with
* an entry for current node's info response with
* the node's ID as the key.
*
* Returns true if callback is successful, Otherwise false.
*******************************************************************************************************
*/
static bool AerospikeClient_Info_each(as_error * err, const as_node * node, const char * req, char * res, void * udata)
{
PyObject * py_err = NULL;
PyObject * py_ustr = NULL;
PyObject * py_out = NULL;
foreach_callback_info_udata* udata_ptr = (foreach_callback_info_udata *) udata;
struct sockaddr_in* addr = NULL;
if ( err && err->code != AEROSPIKE_OK ) {
as_error_update(err, err->code, NULL);
goto CLEANUP;
}
else if ( res != NULL ) {
char * out = strchr(res,'\t');
if ( out != NULL ) {
out++;
py_out = PyStr_FromString(out);
}
else {
py_out = PyStr_FromString(res);
}
}
if ( py_err == NULL ) {
Py_INCREF(Py_None);
py_err = Py_None;
}
if ( py_out == NULL ) {
Py_INCREF(Py_None);
py_out = Py_None;
}
PyObject * py_res = PyTuple_New(2);
PyTuple_SetItem(py_res, 0, py_err);
PyTuple_SetItem(py_res, 1, py_out);
if(udata_ptr->host_lookup_p) {
PyObject * py_hosts = (PyObject *)udata_ptr->host_lookup_p;
if ( py_hosts && PyList_Check(py_hosts) ) {
addr = as_node_get_address((as_node *)node);
int size = (int) PyList_Size(py_hosts);
for ( int i = 0; i < size && i < AS_CONFIG_HOSTS_SIZE; i++ ) {
char * host_addr = NULL;
int port = -1;
PyObject * py_host = PyList_GetItem(py_hosts, i);
if ( PyTuple_Check(py_host) && PyTuple_Size(py_host) == 2 ) {
PyObject * py_addr = PyTuple_GetItem(py_host,0);
PyObject * py_port = PyTuple_GetItem(py_host,1);
if (PyUnicode_Check(py_addr)) {
py_ustr = PyUnicode_AsUTF8String(py_addr);
host_addr = PyStr_AsString(py_ustr);
} else if ( PyStr_Check(py_addr) ) {
host_addr = PyStr_AsString(py_addr);
} else {
as_error_update(&udata_ptr->error, AEROSPIKE_ERR_PARAM, "Host address is of type incorrect");
if (py_res) {
Py_DECREF(py_res);
}
return false;
}
if ( PyInt_Check(py_port) ) {
port = (uint16_t) PyInt_AsLong(py_port);
}
else if ( PyLong_Check(py_port) ) {
port = (uint16_t) PyLong_AsLong(py_port);
} else {
break;
}
char ip_port[IP_PORT_MAX_LEN];
inet_ntop(addr->sin_family, &(addr->sin_addr), ip_port, INET_ADDRSTRLEN);
if( (!strcmp(host_addr,ip_port)) && (port
== ntohs(addr->sin_port))) {
PyObject * py_nodes = (PyObject *) udata_ptr->udata_p;
PyDict_SetItemString(py_nodes, node->name, py_res);
}
}
}
} else if ( !PyList_Check( py_hosts )){
as_error_update(&udata_ptr->error, AEROSPIKE_ERR_PARAM, "Hosts should be specified in a list.");
goto CLEANUP;
//.........这里部分代码省略.........
示例5: if
static PyObject *PythonQtInstanceWrapper_richcompare(PythonQtInstanceWrapper* wrapper, PyObject* other, int code)
{
bool validPtrs = false;
bool areSamePtrs = false;
if (PyObject_TypeCheck((PyObject*)wrapper, &PythonQtInstanceWrapper_Type)) {
if (PyObject_TypeCheck(other, &PythonQtInstanceWrapper_Type)) {
validPtrs = true;
PythonQtInstanceWrapper* w1 = wrapper;
PythonQtInstanceWrapper* w2 = (PythonQtInstanceWrapper*)other;
// check pointers directly
if (w1->_wrappedPtr != NULL) {
if (w1->_wrappedPtr == w2->_wrappedPtr) {
areSamePtrs = true;
}
} else if (w1->_obj == w2->_obj) {
areSamePtrs = true;
}
} else if (other == Py_None) {
validPtrs = true;
if (wrapper->_obj || wrapper->_wrappedPtr) {
areSamePtrs = false;
} else {
areSamePtrs = true;
}
}
}
if ((wrapper->classInfo()->typeSlots() & PythonQt::Type_RichCompare) == 0) {
// shortcut if richcompare is not supported:
if (validPtrs && code == Py_EQ) {
return PythonQtConv::GetPyBool(areSamePtrs);
} else if (validPtrs && code == Py_NE) {
return PythonQtConv::GetPyBool(!areSamePtrs);
}
Py_INCREF(Py_NotImplemented);
return Py_NotImplemented;
}
QByteArray memberName;
switch (code) {
case Py_LT:
{
static QByteArray name = "__lt__";
memberName = name;
}
break;
case Py_LE:
{
static QByteArray name = "__le__";
memberName = name;
}
break;
case Py_EQ:
{
static QByteArray name = "__eq__";
memberName = name;
}
break;
case Py_NE:
{
static QByteArray name = "__ne__";
memberName = name;
}
break;
case Py_GT:
{
static QByteArray name = "__gt__";
memberName = name;
}
break;
case Py_GE:
{
static QByteArray name = "__ge__";
memberName = name;
}
break;
}
PythonQtMemberInfo opSlot = wrapper->classInfo()->member(memberName);
if (opSlot._type == PythonQtMemberInfo::Slot) {
// TODO get rid of tuple
PyObject* args = PyTuple_New(1);
Py_INCREF(other);
PyTuple_SET_ITEM(args, 0, other);
PyObject* result = PythonQtSlotFunction_CallImpl(wrapper->classInfo(), wrapper->_obj, opSlot._slot, args, NULL, wrapper->_wrappedPtr);
Py_DECREF(args);
if (result == NULL) {
// special handling of EQ and NE, if call fails we just return EQ == false / NE == true.
if (code == Py_EQ) {
PyErr_Clear();
Py_INCREF(Py_False);
return Py_False;
} else if (code == Py_NE) {
PyErr_Clear();
Py_INCREF(Py_True);
//.........这里部分代码省略.........
示例6: __Pyx_RefNannySetupContext
static PyObject *__pyx_pf_5hello_say_hello_to(PyObject *__pyx_self, PyObject *__pyx_v_name) {
int __pyx_v_n;
int __pyx_v_m;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
PyObject *__pyx_t_1 = NULL;
PyObject *__pyx_t_2 = NULL;
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
__Pyx_RefNannySetupContext("say_hello_to");
__pyx_self = __pyx_self;
/* "hello.pyx":2
* def say_hello_to(name):
* cdef int n = 18932808299 # <<<<<<<<<<<<<<
* cdef int m = n*n
* print("Hello %s! %s" % (name,m))
*/
__pyx_v_n = 18932808299;
/* "hello.pyx":3
* def say_hello_to(name):
* cdef int n = 18932808299
* cdef int m = n*n # <<<<<<<<<<<<<<
* print("Hello %s! %s" % (name,m))
*/
__pyx_v_m = (__pyx_v_n * __pyx_v_n);
/* "hello.pyx":4
* cdef int n = 18932808299
* cdef int m = n*n
* print("Hello %s! %s" % (name,m)) # <<<<<<<<<<<<<<
*/
__pyx_t_1 = PyInt_FromLong(__pyx_v_m); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__Pyx_GOTREF(((PyObject *)__pyx_t_2));
__Pyx_INCREF(__pyx_v_name);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_name);
__Pyx_GIVEREF(__pyx_v_name);
PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__pyx_t_1 = 0;
__pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_1), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__Pyx_GOTREF(((PyObject *)__pyx_t_1));
__Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
__Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("hello.say_hello_to", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
示例7: c_function
int c_function(int *n, float **mat)
{
PyObject *pModule = NULL;
PyObject *pFunc = NULL;
PyObject *pArg = NULL;
PyObject *pRet = NULL;
PyObject *pName = NULL;
size_t size = *n;
npy_intp *dim;
int i, j;
dim = (npy_intp *) malloc(sizeof(npy_intp)*(size));
for (i=0; i < size; i++) dim[i] = size;
Py_Initialize();
if (!Py_IsInitialized())
{
fprintf(stderr, "nao foi possivel inicializar o python!\n");
return -1;
}
init_numpy();
PyObject* pMat = PyArray_NewFromDescr(
&PyArray_Type, PyArray_DescrFromType(NPY_FLOAT),
2, dim, NULL, (void *) *mat, NPY_ARRAY_INOUT_FARRAY, NULL);
Py_INCREF(pMat);
pName = PyString_FromString("function");
pModule = PyImport_Import(pName);
pFunc = PyObject_GetAttrString(pModule, "py_function");
if(!PyCallable_Check(pFunc))
{
printf("func not callable!\n");
return -1;
}
pArg = PyTuple_New (2);
PyTuple_SetItem(pArg, 0, (PyObject *) PyInt_FromLong(size));
PyTuple_SetItem(pArg, 1, pMat);
pRet = PyObject_CallObject(pFunc, pArg);
printf("py ret: %s\n", PyString_AsString(pRet));
Py_DECREF (pMat);
Py_DECREF (pName);
Py_DECREF (pModule);
Py_DECREF (pFunc);
Py_DECREF (pArg);
Py_DECREF (pRet);
Py_Finalize();
return 0;
}
示例8: PyLoggedAssert
void plPythonSDLModifier::SetItemIdx(const char* key, int idx, PyObject* value, hsBool sendImmediate)
{
if (!value)
{
PyLoggedAssert(0, "[SDL] Trying to set a value to nil");
return;
}
SDLMap::iterator it = fMap.find(key);
if (it == fMap.end())
{
PyLoggedAssert(0, "[SDL] Tried to set a nonexistent SDL value");
return;
}
PyObject* pyTuple = it->second.obj;
int size = it->second.size;
if (size != 0 && idx >= size)
{
PyLoggedAssert(0, "[SDL] Trying to resize a SDL value that can't be");
return;
}
if (pyTuple && pyTuple->ob_refcnt != 1)
{
// others already have references to the tuple and expect it to be immutable, must make a copy
int n = PyTuple_Size(pyTuple);
PyObject* newTuple = PyTuple_New(n);
for (int j = 0; j < n; j++)
{
PyObject* item = PyTuple_GetItem(pyTuple, j);
Py_INCREF(item);
PyTuple_SetItem(newTuple, j, item);
}
Py_DECREF(pyTuple);
pyTuple = newTuple;
it->second.obj = newTuple;
}
if (pyTuple)
{
if (PyTuple_Size(pyTuple) <= idx)
{
int oldsize = PyTuple_Size(pyTuple);
_PyTuple_Resize(&pyTuple, idx+1);
// initialize the tuple elements to None, because Python don't like NULLs
int j;
for ( j=oldsize; j<idx+1; j++ )
{
Py_INCREF(Py_None);
PyTuple_SetItem(pyTuple, j, Py_None);
}
// _PyTuple_Resize may have changed pyTuple
it->second.obj = pyTuple;
}
}
else
{
int newSize = (size == 0) ? idx+1 : size;
pyTuple = PyTuple_New(newSize);
// initialize the tuple elements to None, because Python don't like NULLs
int j;
for ( j=0; j<newSize; j++ )
{
Py_INCREF(Py_None);
PyTuple_SetItem(pyTuple, j, Py_None);
}
it->second.obj = pyTuple;
}
Py_XINCREF(value); // PyTuple_SetItem doesn't increment the ref count
PyTuple_SetItem(pyTuple, idx, value);
IDirtySynchState(key, sendImmediate);
}
示例9: _pygi_argument_to_object
//.........这里部分代码省略.........
/* Special case variant and none to force loading from py module. */
if (g_type == G_TYPE_VARIANT || g_type == G_TYPE_NONE) {
py_type = _pygi_type_import_by_gi_info (info);
} else {
py_type = _pygi_type_get_from_g_type (g_type);
}
object = pygi_arg_struct_to_py_marshal (arg,
info, /*interface_info*/
g_type,
py_type,
transfer,
FALSE, /*is_allocated*/
is_foreign);
Py_XDECREF (py_type);
break;
}
case GI_INFO_TYPE_ENUM:
case GI_INFO_TYPE_FLAGS:
{
GType type;
type = g_registered_type_info_get_g_type ( (GIRegisteredTypeInfo *) info);
if (type == G_TYPE_NONE) {
/* An enum with a GType of None is an enum without GType */
PyObject *py_type = _pygi_type_import_by_gi_info (info);
PyObject *py_args = NULL;
if (!py_type)
return NULL;
py_args = PyTuple_New (1);
if (PyTuple_SetItem (py_args, 0, PyLong_FromLong (arg->v_int)) != 0) {
Py_DECREF (py_args);
Py_DECREF (py_type);
return NULL;
}
object = PyObject_CallFunction (py_type, "i", arg->v_int);
Py_DECREF (py_args);
Py_DECREF (py_type);
} else if (info_type == GI_INFO_TYPE_ENUM) {
object = pyg_enum_from_gtype (type, arg->v_int);
} else {
object = pyg_flags_from_gtype (type, arg->v_uint);
}
break;
}
case GI_INFO_TYPE_INTERFACE:
case GI_INFO_TYPE_OBJECT:
object = pygi_arg_gobject_to_py_called_from_c (arg, transfer);
break;
default:
g_assert_not_reached();
}
g_base_info_unref (info);
break;
}
case GI_TYPE_TAG_GLIST:
示例10: Py_INCREF
static PyObject *__pyx_f_11closestpair_closest_pair(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyListObject *__pyx_v_points = 0;
float __pyx_v_min_d;
PyObject *__pyx_v_min_p1;
PyObject *__pyx_v_min_p2;
PyObject *__pyx_v_i;
PyObject *__pyx_v_point;
PyObject *__pyx_v_point2;
PyObject *__pyx_v_d;
PyObject *__pyx_v_split;
PyObject *__pyx_v_d1;
PyObject *__pyx_v_p11;
PyObject *__pyx_v_p12;
PyObject *__pyx_v_d2;
PyObject *__pyx_v_p21;
PyObject *__pyx_v_p22;
PyObject *__pyx_v_points_in_strip;
PyObject *__pyx_v_split_at;
PyObject *__pyx_v_max_i;
PyObject *__pyx_v_sd;
PyObject *__pyx_r;
Py_ssize_t __pyx_1;
int __pyx_2;
PyObject *__pyx_3 = 0;
PyObject *__pyx_4 = 0;
PyObject *__pyx_5 = 0;
PyObject *__pyx_6 = 0;
PyObject *__pyx_7 = 0;
PyObject *__pyx_8 = 0;
PyObject *__pyx_9 = 0;
PyObject *__pyx_10 = 0;
float __pyx_11;
int __pyx_12;
Py_ssize_t __pyx_13;
static char *__pyx_argnames[] = {"points",0};
if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_points)) return 0;
Py_INCREF(__pyx_v_points);
__pyx_v_min_p1 = Py_None; Py_INCREF(Py_None);
__pyx_v_min_p2 = Py_None; Py_INCREF(Py_None);
__pyx_v_i = Py_None; Py_INCREF(Py_None);
__pyx_v_point = Py_None; Py_INCREF(Py_None);
__pyx_v_point2 = Py_None; Py_INCREF(Py_None);
__pyx_v_d = Py_None; Py_INCREF(Py_None);
__pyx_v_split = Py_None; Py_INCREF(Py_None);
__pyx_v_d1 = Py_None; Py_INCREF(Py_None);
__pyx_v_p11 = Py_None; Py_INCREF(Py_None);
__pyx_v_p12 = Py_None; Py_INCREF(Py_None);
__pyx_v_d2 = Py_None; Py_INCREF(Py_None);
__pyx_v_p21 = Py_None; Py_INCREF(Py_None);
__pyx_v_p22 = Py_None; Py_INCREF(Py_None);
__pyx_v_points_in_strip = Py_None; Py_INCREF(Py_None);
__pyx_v_split_at = Py_None; Py_INCREF(Py_None);
__pyx_v_max_i = Py_None; Py_INCREF(Py_None);
__pyx_v_sd = Py_None; Py_INCREF(Py_None);
if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyList_Type), 1, "points")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; goto __pyx_L1;}
/* "/home/andrew/Programs/cluster/clusterer/closestpair.pyx":15 */
__pyx_1 = PyObject_Length(((PyObject *)__pyx_v_points)); if (__pyx_1 == -1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;}
__pyx_2 = (__pyx_1 < 2);
if (__pyx_2) {
__pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;}
Py_INCREF(__pyx_k1p);
PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k1p);
__pyx_4 = PyObject_CallObject(PyExc_ValueError, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;}
Py_DECREF(__pyx_3); __pyx_3 = 0;
__Pyx_Raise(__pyx_4, 0, 0);
Py_DECREF(__pyx_4); __pyx_4 = 0;
{__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;}
goto __pyx_L2;
}
__pyx_1 = PyObject_Length(((PyObject *)__pyx_v_points)); if (__pyx_1 == -1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; goto __pyx_L1;}
__pyx_2 = 2 <= __pyx_1;
if (__pyx_2) {
__pyx_2 = __pyx_1 <= 6;
}
if (__pyx_2) {
/* "/home/andrew/Programs/cluster/clusterer/closestpair.pyx":18 */
__pyx_v_min_d = 0;
/* "/home/andrew/Programs/cluster/clusterer/closestpair.pyx":19 */
Py_INCREF(Py_None);
Py_DECREF(__pyx_v_min_p1);
__pyx_v_min_p1 = Py_None;
/* "/home/andrew/Programs/cluster/clusterer/closestpair.pyx":20 */
Py_INCREF(Py_None);
Py_DECREF(__pyx_v_min_p2);
__pyx_v_min_p2 = Py_None;
/* "/home/andrew/Programs/cluster/clusterer/closestpair.pyx":21 */
__pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; goto __pyx_L1;}
Py_INCREF(((PyObject *)__pyx_v_points));
PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_v_points));
__pyx_4 = PyObject_CallObject(((PyObject *)(&PyEnum_Type)), __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; goto __pyx_L1;}
Py_DECREF(__pyx_3); __pyx_3 = 0;
__pyx_3 = PyObject_GetIter(__pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; goto __pyx_L1;}
Py_DECREF(__pyx_4); __pyx_4 = 0;
for (;;) {
__pyx_4 = PyIter_Next(__pyx_3);
//.........这里部分代码省略.........
示例11: lookup
static krb5_error_code
lookup(void *blob, enum locate_service_type svc, const char *realm,
int socktype, int family,
int (*cbfunc)(void *, int, struct sockaddr *), void *cbdata)
{
PyObject *py_result, *svcarg, *realmarg, *arglist;
int listsize, i, x;
struct addrinfo aihints, *airesult;
int thissocktype;
// fprintf(stderr, "%s:%d: lookup(%d,%s,%d,%d)\n", F, __LINE__,
// svc, realm, socktype, family);
sctx = blob; /* XXX: Not thread safe! */
i = CALL_INIT_FUNCTION (my_init);
if (i) {
#if 0
fprintf(stderr, "%s:%d: module initialization failed\n", F, __LINE__);
#endif
return i;
}
if (locatefn == 0)
return KRB5_PLUGIN_NO_HANDLE;
svcarg = PyInt_FromLong (svc);
/* error? */
realmarg = PyString_FromString ((char *) realm);
/* error? */
arglist = PyTuple_New (4);
/* error? */
PyTuple_SetItem (arglist, 0, svcarg);
PyTuple_SetItem (arglist, 1, realmarg);
PyTuple_SetItem (arglist, 2, PyInt_FromLong (socktype));
PyTuple_SetItem (arglist, 3, PyInt_FromLong (family));
/* references handed off, no decref */
py_result = PyObject_CallObject (locatefn, arglist);
Py_DECREF (arglist);
if (PyErr_Occurred()) {
fprintf(stderr,"%s:%d: python error\n", F, __LINE__);
PyErr_Print();
krb5_set_error_message(blob, -1,
"Python evaluation error, see stderr");
return -1;
}
if (py_result == 0) {
fprintf(stderr, "%s:%d: returned null object\n", F, __LINE__);
return -1;
}
if (py_result == Py_False)
return KRB5_PLUGIN_NO_HANDLE;
if (! PyList_Check (py_result)) {
Py_DECREF (py_result);
fprintf(stderr, "%s:%d: returned non-list, non-False\n", F, __LINE__);
krb5_set_error_message(blob, -1,
"Python script error -- returned non-list, non-False result");
return -1;
}
listsize = PyList_Size (py_result);
/* allocate */
memset(&aihints, 0, sizeof(aihints));
aihints.ai_flags = AI_NUMERICHOST;
aihints.ai_family = family;
for (i = 0; i < listsize; i++) {
PyObject *answer, *field;
char *hoststr, *portstr, portbuf[3*sizeof(long) + 4];
int cbret;
answer = PyList_GetItem (py_result, i);
if (! PyTuple_Check (answer)) {
krb5_set_error_message(blob, -1,
"Python script error -- returned item %d not a tuple", i);
/* leak? */
return -1;
}
if (PyTuple_Size (answer) != 3) {
krb5_set_error_message(blob, -1,
"Python script error -- returned tuple %d size %d should be 3",
i, PyTuple_Size (answer));
/* leak? */
return -1;
}
field = PyTuple_GetItem (answer, 0);
if (! PyString_Check (field)) {
/* leak? */
krb5_set_error_message(blob, -1,
"Python script error -- first component of tuple %d is not a string",
i);
return -1;
}
hoststr = PyString_AsString (field);
field = PyTuple_GetItem (answer, 1);
if (PyString_Check (field)) {
portstr = PyString_AsString (field);
} else if (PyInt_Check (field)) {
snprintf(portbuf, sizeof(portbuf), "%ld", PyInt_AsLong (field));
portstr = portbuf;
} else {
krb5_set_error_message(blob, -1,
"Python script error -- second component of tuple %d neither a string nor an integer",
i);
//.........这里部分代码省略.........
示例12: Object_beginTypeContext
//.........这里部分代码省略.........
if (PyTuple_Check(obj))
{
PRINTMARK();
tc->type = JT_ARRAY;
pc->iterEnd = Tuple_iterEnd;
pc->iterNext = Tuple_iterNext;
pc->iterGetValue = Tuple_iterGetValue;
pc->iterGetName = Tuple_iterGetName;
GET_TC(tc)->index = 0;
GET_TC(tc)->size = PyTuple_GET_SIZE( (PyObject *) obj);
GET_TC(tc)->itemValue = NULL;
return;
}
/*
else
if (PyAnySet_Check(obj))
{
PRINTMARK();
tc->type = JT_ARRAY;
pc->iterBegin = NULL;
pc->iterEnd = Iter_iterEnd;
pc->iterNext = Iter_iterNext;
pc->iterGetValue = Iter_iterGetValue;
pc->iterGetName = Iter_iterGetName;
return;
}
*/
toDictFunc = PyObject_GetAttrString(obj, "toDict");
if (toDictFunc)
{
PyObject* tuple = PyTuple_New(0);
PyObject* toDictResult = PyObject_Call(toDictFunc, tuple, NULL);
Py_DECREF(tuple);
Py_DECREF(toDictFunc);
if (toDictResult == NULL)
{
PyErr_Clear();
tc->type = JT_NULL;
return;
}
if (!PyDict_Check(toDictResult))
{
Py_DECREF(toDictResult);
tc->type = JT_NULL;
return;
}
PRINTMARK();
tc->type = JT_OBJECT;
SetupDictIter(toDictResult, pc, enc);
return;
}
PRINTMARK();
PyErr_Clear();
iter = PyObject_GetIter(obj);
if (iter != NULL)
{
PRINTMARK();
示例13: python_function
static int python_function(REQUEST *request, PyObject *pFunc,
const char *funcname)
{
VALUE_PAIR *vp;
PyObject *pRet = NULL;
PyObject *pArgs = NULL;
int tuplelen;
int ret;
PyGILState_STATE gstate;
/* Return with "OK, continue" if the function is not defined. */
if (pFunc == NULL)
return RLM_MODULE_OK;
/* Default return value is "OK, continue" */
ret = RLM_MODULE_OK;
/*
* We will pass a tuple containing (name, value) tuples
* We can safely use the Python function to build up a
* tuple, since the tuple is not used elsewhere.
*
* Determine the size of our tuple by walking through the packet.
* If request is NULL, pass None.
*/
tuplelen = 0;
if (request != NULL) {
for (vp = request->packet->vps; vp; vp = vp->next)
tuplelen++;
}
gstate = PyGILState_Ensure();
if (tuplelen == 0) {
Py_INCREF(Py_None);
pArgs = Py_None;
} else {
int i = 0;
if ((pArgs = PyTuple_New(tuplelen)) == NULL)
goto failed;
for (vp = request->packet->vps;
vp != NULL;
vp = vp->next, i++) {
PyObject *pPair;
/* The inside tuple has two only: */
if ((pPair = PyTuple_New(2)) == NULL)
goto failed;
if (python_populate_vptuple(pPair, vp) == 0) {
/* Put the tuple inside the container */
PyTuple_SET_ITEM(pArgs, i, pPair);
} else {
Py_INCREF(Py_None);
PyTuple_SET_ITEM(pArgs, i, Py_None);
Py_DECREF(pPair);
}
}
}
/* Call Python function. */
pRet = PyObject_CallFunctionObjArgs(pFunc, pArgs, NULL);
if (pRet == NULL)
goto failed;
if (request == NULL)
goto okay;
/*
* The function returns either:
* 1. (returnvalue, replyTuple, configTuple), where
* - returnvalue is one of the constants RLM_*
* - replyTuple and configTuple are tuples of string
* tuples of size 2
*
* 2. the function return value alone
*
* 3. None - default return value is set
*
* xxx This code is messy!
*/
if (PyTuple_CheckExact(pRet)) {
PyObject *pTupleInt;
if (PyTuple_GET_SIZE(pRet) != 3) {
radlog(L_ERR, "rlm_python:%s: tuple must be (return, replyTuple, configTuple)", funcname);
goto failed;
}
pTupleInt = PyTuple_GET_ITEM(pRet, 0);
if (!PyInt_CheckExact(pTupleInt)) {
radlog(L_ERR, "rlm_python:%s: first tuple element not an integer", funcname);
goto failed;
}
/* Now have the return value */
ret = PyInt_AsLong(pTupleInt);
/* Reply item tuple */
//.........这里部分代码省略.........
示例14: internal_parse_depset
//.........这里部分代码省略.........
p--;
break;
} else if('?' == p[-1]) {
// use conditional
if (p - start == 1 || ('!' == *start && p - start == 2)) {
Err_SetParse(dep_str, "empty use conditional", start, p);
goto internal_parse_depset_error;
}
char *conditional_end = p - 1;
SKIP_SPACES(p);
if ('(' != *p) {
Err_SetParse(dep_str,
"( has to be the next token for a conditional",
start, p);
goto internal_parse_depset_error;
} else if(!isspace(*(p + 1)) || '\0' == p[1]) {
Err_SetParse(dep_str,
"( has to be followed by whitespace",
start, p);
goto internal_parse_depset_error;
}
p++;
if(!(tmp = internal_parse_depset(dep_str, &p, has_conditionals,
element_func, and_func, or_func, NULL, 0)))
goto internal_parse_depset_error;
if(tmp == Py_None) {
Py_DECREF(tmp);
Err_SetParse(dep_str, "empty payload", start, p);
goto internal_parse_depset_error;
} else if(!PyTuple_CheckExact(tmp)) {
item = PyTuple_New(1);
if(!tmp) {
Py_DECREF(item);
goto internal_parse_depset_error;
}
PyTuple_SET_ITEM(item, 0, tmp);
tmp = item;
}
item = make_use_conditional(start, conditional_end, tmp);
Py_DECREF(tmp);
if(!item)
goto internal_parse_depset_error;
*has_conditionals = 1;
} else if ('|' == *start) {
if('|' != start[1] || !or_func) {
Err_SetParse(dep_str,
"stray |, or this depset doesn't support or blocks",
NULL, NULL);
goto internal_parse_depset_error;
}
if(p - start != 2) {
Err_SetParse(dep_str, "|| must have space followed by a (",
start, p);
goto internal_parse_depset_error;
}
SKIP_SPACES(p);
if ('(' != *p || (!isspace(*(p + 1)) && '\0' != p[1])) {
Err_SetParse(dep_str,
"( has to be the next token for a conditional",
start, p);
goto internal_parse_depset_error;
示例15: _compose_go
static PyObject* _compose_go(PyComposeObject* self, PyObject* exc_type, PyObject* exc_value, PyObject* exc_tb) {
Py_XINCREF(exc_type);
Py_XINCREF(exc_value);
Py_XINCREF(exc_tb);
if(!self->started)
self->started = 1;
self->paused_on_step = 0;
while(self->generators_top > self->generators_base) {
PyObject* generator = *(self->generators_top - 1); // take over ownership from stack
PyObject* response = NULL;
PyObject* message = NULL;
if(exc_type) { // exception
if(PyErr_GivenExceptionMatches(exc_type, PyExc_GeneratorExit)) {
PyObject* result = PyObject_CallMethod(generator, "close", NULL); // new ref
if(result) {
Py_CLEAR(result);
PyErr_Restore(exc_type, exc_value, exc_tb); //steals refs
exc_type = exc_value = exc_tb = NULL;
}
} else
response =
PyObject_CallMethod(generator, "throw", "OOO",
exc_type,
exc_value ? exc_value : Py_None,
exc_tb ? exc_tb : Py_None); // new ref
Py_CLEAR(exc_type);
Py_CLEAR(exc_value);
Py_CLEAR(exc_tb);
} else { // normal message
message = messages_next(self); // new ref
response = PyObject_CallMethod(generator, "send", "(O)", message); // new ref
Py_CLEAR(message);
}
if(response) { // normal response
if(is_generator(response)) {
if(generator_invalid(response)) {
PyErr_Fetch(&exc_type, &exc_value, &exc_tb); // new refs
Py_CLEAR(response);
continue;
}
if(!generators_push(self, response)) {
Py_CLEAR(response);
return NULL;
}
if(self->stepping) {
Py_CLEAR(response);
self->paused_on_step = 1;
Py_INCREF(&PyYield_Type);
return (PyObject*) &PyYield_Type;
}
messages_insert(self, Py_None);
} else if(response != Py_None || messages_empty(self)) {
self->expect_data = response == Py_None;
return response;
}
Py_CLEAR(response);
} else { // exception thrown
*self->generators_top-- = NULL;
PyErr_Fetch(&exc_type, &exc_value, &exc_tb); // new refs
if(PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
Py_CLEAR(exc_tb);
Py_CLEAR(exc_type);
int ok = _compose_handle_stopiteration(self, exc_value);
Py_CLEAR(exc_value);
if(!ok)
PyErr_Fetch(&exc_type, &exc_value, &exc_tb); // new refs
}
Py_CLEAR(generator);
}
}
if(exc_type) {
PyErr_Restore(exc_type, exc_value, exc_tb); // steals refs
exc_type = exc_value = exc_tb = NULL;
return NULL;
}
// if any messages are left, 'return' them by StopIteration
int n = _messages_size(self);
if(n) {
PyObject* args = PyTuple_New(n); // new ref
//.........这里部分代码省略.........