本文整理汇总了C++中PyList_Check函数的典型用法代码示例。如果您正苦于以下问题:C++ PyList_Check函数的具体用法?C++ PyList_Check怎么用?C++ PyList_Check使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PyList_Check函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: current_wsgi_req
PyObject *py_uwsgi_spit(PyObject * self, PyObject * args) {
PyObject *headers, *head;
PyObject *h_key, *h_value;
int i, j;
struct wsgi_request *wsgi_req = current_wsgi_req(&uwsgi);
#ifndef UNBIT
int base = 0;
#else
int base = 4;
#endif
// use writev()
head = PyTuple_GetItem(args, 0);
if (!head) {
goto clear;
}
if (!PyString_Check(head)) {
fprintf(stderr, "http status must be a string !\n");
goto clear;
}
#ifndef UNBIT
if (uwsgi.shared->options[UWSGI_OPTION_CGI_MODE] == 0) {
base = 4;
#endif
if (wsgi_req->protocol_len == 0) {
wsgi_req->hvec[0].iov_base = (char *) http_protocol;
wsgi_req->protocol_len = 8;
}
else {
wsgi_req->hvec[0].iov_base = wsgi_req->protocol;
}
wsgi_req->hvec[0].iov_len = wsgi_req->protocol_len;
wsgi_req->hvec[1].iov_base = " ";
wsgi_req->hvec[1].iov_len = 1;
#ifdef PYTHREE
wsgi_req->hvec[2].iov_base = PyBytes_AsString(PyUnicode_AsASCIIString(head));
wsgi_req->hvec[2].iov_len = strlen(wsgi_req->hvec[2].iov_base);
#else
wsgi_req->hvec[2].iov_base = PyString_AsString(head);
wsgi_req->hvec[2].iov_len = PyString_Size(head);
#endif
wsgi_req->status = atoi(wsgi_req->hvec[2].iov_base);
wsgi_req->hvec[3].iov_base = nl;
wsgi_req->hvec[3].iov_len = NL_SIZE;
#ifndef UNBIT
}
else {
// drop http status on cgi mode
base = 3;
wsgi_req->hvec[0].iov_base = "Status: ";
wsgi_req->hvec[0].iov_len = 8;
#ifdef PYTHREE
wsgi_req->hvec[1].iov_base = PyBytes_AsString(PyUnicode_AsASCIIString(head));
wsgi_req->hvec[1].iov_len = strlen(wsgi_req->hvec[1].iov_base);
#else
wsgi_req->hvec[1].iov_base = PyString_AsString(head);
wsgi_req->hvec[1].iov_len = PyString_Size(head);
#endif
wsgi_req->status = atoi(wsgi_req->hvec[1].iov_base);
wsgi_req->hvec[2].iov_base = nl;
wsgi_req->hvec[2].iov_len = NL_SIZE;
}
#endif
#ifdef UNBIT
if (wsgi_req->unbit_flags & (unsigned long long) 1) {
if (tmp_dir_fd >= 0 && tmp_filename[0] != 0 && wsgi_req->status == 200 && wsgi_req->method_len == 3 && wsgi_req->method[0] == 'G' && wsgi_req->method[1] == 'E' && wsgi_req->method[2] == 'T') {
save_to_disk = openat(tmp_dir_fd, tmp_filename, O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR | S_IRGRP);
}
}
#endif
headers = PyTuple_GetItem(args, 1);
if (!headers) {
goto clear;
}
if (!PyList_Check(headers)) {
fprintf(stderr, "http headers must be in a python list\n");
goto clear;
}
wsgi_req->header_cnt = PyList_Size(headers);
if (wsgi_req->header_cnt > uwsgi.max_vars) {
wsgi_req->header_cnt = uwsgi.max_vars;
}
for (i = 0; i < wsgi_req->header_cnt; i++) {
j = (i * 4) + base;
//.........这里部分代码省略.........
开发者ID:mlzboy,项目名称:resys,代码行数:101,代码来源:wsgi_headers.c
示例2: while
static PyObject *sendmsg_sendmsg(PyObject *self, PyObject *args, PyObject *keywds) {
int fd;
int flags = 0;
Py_ssize_t sendmsg_result, iovec_length;
struct msghdr message_header;
struct iovec iov[1];
PyObject *ancillary = NULL;
PyObject *iterator = NULL;
PyObject *item = NULL;
PyObject *result_object = NULL;
static char *kwlist[] = {"fd", "data", "flags", "ancillary", NULL};
if (!PyArg_ParseTupleAndKeywords(
args, keywds, "it#|iO:sendmsg", kwlist,
&fd,
&iov[0].iov_base,
&iovec_length,
&flags,
&ancillary)) {
return NULL;
}
iov[0].iov_len = iovec_length;
message_header.msg_name = NULL;
message_header.msg_namelen = 0;
message_header.msg_iov = iov;
message_header.msg_iovlen = 1;
message_header.msg_control = NULL;
message_header.msg_controllen = 0;
message_header.msg_flags = 0;
if (ancillary) {
if (!PyList_Check(ancillary)) {
PyErr_Format(PyExc_TypeError,
"send1msg argument 3 expected list, got %s",
ancillary->ob_type->tp_name);
goto finished;
}
iterator = PyObject_GetIter(ancillary);
if (iterator == NULL) {
goto finished;
}
size_t all_data_len = 0;
/* First we need to know how big the buffer needs to be in order to
have enough space for all of the messages. */
while ( (item = PyIter_Next(iterator)) ) {
int type, level;
Py_ssize_t data_len;
size_t prev_all_data_len;
char *data;
if (!PyTuple_Check(item)) {
PyErr_Format(PyExc_TypeError,
"send1msg argument 3 expected list of tuple, "
"got list containing %s",
item->ob_type->tp_name);
goto finished;
}
if (!PyArg_ParseTuple(
item, "iit#:sendmsg ancillary data (level, type, data)",
&level, &type, &data, &data_len)) {
goto finished;
}
prev_all_data_len = all_data_len;
all_data_len += CMSG_SPACE(data_len);
Py_DECREF(item);
item = NULL;
if (all_data_len < prev_all_data_len) {
PyErr_Format(PyExc_OverflowError,
"Too much msg_control to fit in a size_t: %zu",
prev_all_data_len);
goto finished;
}
}
Py_DECREF(iterator);
iterator = NULL;
/* Allocate the buffer for all of the ancillary elements, if we have
* any. */
if (all_data_len) {
if (all_data_len > SOCKLEN_MAX) {
PyErr_Format(PyExc_OverflowError,
"Too much msg_control to fit in a socklen_t: %zu",
all_data_len);
//.........这里部分代码省略.........
开发者ID:Architektor,项目名称:PySnip,代码行数:101,代码来源:_sendmsg.c
示例3: PyArg_ParseTuple
static PyObject *wrap_rtdb_put(PyObject *self, PyObject *args)
{
int i, list, list_len;
int ma_type = -1;
char *name;
Integer* int_array;
double *dbl_array;
char *char_array;
char cbuf[8192], *ptr;
void *array = 0;
PyObject *obj;
if ((PyTuple_Size(args) == 2) ) {
PyArg_ParseTuple(args, "sO", &name,&obj);
if (PyList_Check(obj))
list = 1;
else
list = 0;
if (list) {
list_len = PyList_Size(obj);
if ( PyInt_Check(PyList_GetItem(obj, 0)))
ma_type = MT_F_INT;
else if ( PyFloat_Check(PyList_GetItem(obj, 0)))
ma_type = MT_F_DBL;
else if (PyString_Check(PyList_GetItem(obj, 0)))
ma_type = MT_CHAR;
else {
printf("ERROR A\n");
ma_type = -1;
}
} else {
list_len = 1;
if ( PyInt_Check(obj))
ma_type = MT_F_INT;
else if ( PyFloat_Check(obj))
ma_type = MT_F_DBL;
else if (PyString_Check(obj))
ma_type = MT_CHAR;
else {
printf("ERROR B\n");
ma_type = -1;
}
}
if (ma_type == -1) {
PyErr_SetString(PyExc_TypeError,
"Usage: rtdb_put - ma_type is confused");
return NULL;
}
if (ma_type != MT_CHAR) {
if (!(array = malloc(MA_sizeof(ma_type, list_len, MT_CHAR)))) {
PyErr_SetString(PyExc_MemoryError,
"rtdb_put failed allocating work array");
return NULL;
}
}
switch (ma_type) {
case MT_INT:
case MT_F_INT:
case MT_BASE + 11: /* Logical */
int_array = array;
for (i = 0; i < list_len; i++) {
if (list)
int_array[i] = PyInt_AS_LONG(PyList_GetItem(obj, i));
else
int_array[i] = PyInt_AS_LONG(obj);
}
break;
case MT_DBL:
case MT_F_DBL:
dbl_array = array;
for (i = 0; i < list_len; i++) {
if (list)
PyArg_ParseTuple(PyList_GetItem(obj, i), "d", dbl_array+i);
else
PyArg_ParseTuple(obj, "d", dbl_array+i);
}
break;
case MT_CHAR:
ptr = cbuf;
*ptr = 0;
for (i = 0; i < list_len; i++) {
if (list)
PyArg_ParseTuple(PyList_GetItem(obj, i), "s", &char_array);
else
PyArg_ParseTuple(obj, "s", &char_array);
/*printf("PROCESSED '%s'\n", char_array);*/
if ((ptr+strlen(char_array)) >= (cbuf+sizeof(cbuf))) {
PyErr_SetString(PyExc_MemoryError,"rtdb_put too many strings");
return NULL;
}
strcpy(ptr,char_array);
//.........这里部分代码省略.........
开发者ID:bwang2453,项目名称:nwchem_csx,代码行数:101,代码来源:nwchem_wrap.c
示例4: wsgi_call_application
bool
wsgi_call_application(Request* request)
{
StartResponse* start_response = PyObject_NEW(StartResponse, &StartResponse_Type);
start_response->request = request;
/* From now on, `headers` stores the _response_ headers
* (passed by the WSGI app) rather than the _request_ headers */
PyObject* request_headers = request->headers;
request->headers = NULL;
/* application(environ, start_response) call */
PyObject* retval = PyObject_CallFunctionObjArgs(
request->server_info->wsgi_app,
request_headers,
start_response,
NULL /* sentinel */
);
Py_DECREF(request_headers);
Py_DECREF(start_response);
if(retval == NULL)
return false;
/* The following code is somewhat magic, so worth an explanation.
*
* If the application we called was a generator, we have to call .next() on
* it before we do anything else because that may execute code that
* invokes `start_response` (which might not have been invoked yet).
* Think of the following scenario:
*
* def app(environ, start_response):
* start_response('200 Ok', ...)
* yield 'Hello World'
*
* That would make `app` return an iterator (more precisely, a generator).
* Unfortunately, `start_response` wouldn't be called until the first item
* of that iterator is requested; `start_response` however has to be called
* _before_ the wsgi body is sent, because it passes the HTTP headers.
*
* If the application returned a list this would not be required of course,
* but special-handling is painful - especially in C - so here's one generic
* way to solve the problem:
*
* Look into the returned iterator in any case. This allows us to do other
* optimizations, for example if the returned value is a list with exactly
* one string in it, we can pick the string and throw away the list so bjoern
* does not have to come back again and look into the iterator a second time.
*/
PyObject* first_chunk;
if(PyList_Check(retval) && PyList_GET_SIZE(retval) == 1 &&
PyString_Check(PyList_GET_ITEM(retval, 0)))
{
/* Optimize the most common case, a single string in a list: */
PyObject* tmp = PyList_GET_ITEM(retval, 0);
Py_INCREF(tmp);
Py_DECREF(retval);
retval = tmp;
goto string; /* eeevil */
} else if(PyString_Check(retval)) {
/* According to PEP 333 strings should be handled like any other iterable,
* i.e. sending the response item for item. "item for item" means
* "char for char" if you have a string. -- I'm not that stupid. */
string:
if(PyString_GET_SIZE(retval)) {
first_chunk = retval;
} else {
Py_DECREF(retval);
first_chunk = NULL;
}
} else if(FileWrapper_CheckExact(retval)) {
request->state.use_sendfile = true;
request->iterable = ((FileWrapper*)retval)->file;
Py_INCREF(request->iterable);
Py_DECREF(retval);
request->iterator = NULL;
first_chunk = NULL;
} else {
/* Generic iterable (list of length != 1, generator, ...) */
request->iterable = retval;
request->iterator = PyObject_GetIter(retval);
if(request->iterator == NULL)
return false;
first_chunk = wsgi_iterable_get_next_chunk(request);
if(first_chunk == NULL && PyErr_Occurred())
return false;
}
if(request->headers == NULL) {
/* It is important that this check comes *after* the call to
* wsgi_iterable_get_next_chunk(), because in case the WSGI application
* was an iterator, there's no chance start_response could be called
* before. See above if you don't understand what I say. */
PyErr_SetString(
PyExc_RuntimeError,
"wsgi application returned before start_response was called"
);
Py_XDECREF(first_chunk);
//.........这里部分代码省略.........
开发者ID:Logout22,项目名称:bjoern,代码行数:101,代码来源:wsgi.c
示例5: Object_beginTypeContext
//.........这里部分代码省略.........
}
else
if (PyDateTime_Check(obj))
{
PRINTMARK();
pc->PyTypeToJSON = PyDateTimeToINT64; tc->type = JT_LONG;
return;
}
else
if (PyDate_Check(obj))
{
PRINTMARK();
pc->PyTypeToJSON = PyDateToINT64; tc->type = JT_LONG;
return;
}
else
if (obj == Py_None)
{
PRINTMARK();
tc->type = JT_NULL;
return;
}
ISITERABLE:
if (PyDict_Check(obj))
{
PRINTMARK();
tc->type = JT_OBJECT;
SetupDictIter(obj, pc);
Py_INCREF(obj);
return;
}
else
if (PyList_Check(obj))
{
PRINTMARK();
tc->type = JT_ARRAY;
pc->iterEnd = List_iterEnd;
pc->iterNext = List_iterNext;
pc->iterGetValue = List_iterGetValue;
pc->iterGetName = List_iterGetName;
GET_TC(tc)->index = 0;
GET_TC(tc)->size = PyList_GET_SIZE( (PyObject *) obj);
return;
}
else
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;
开发者ID:ngandhy,项目名称:ultrajson,代码行数:67,代码来源:objToJSON.c
示例6: AerospikeClient_Apply_Invoke
/**
*******************************************************************************************************
* This function applies a registered udf module on a particular record.
*
* @param self AerospikeClient object
* @param py_key The key under which to store the record.
* @param py_module The module name.
* @param py_function The UDF function to be applied on a record.
* @param py_arglist The arguments to the UDF function
* @param py_policy The optional policy parameters
*
* Returns the result of UDF function.
*******************************************************************************************************
*/
PyObject * AerospikeClient_Apply_Invoke(
AerospikeClient * self,
PyObject * py_key, PyObject * py_module, PyObject * py_function,
PyObject * py_arglist, PyObject * py_policy)
{
// Python Return Value
PyObject * py_result = NULL;
// Aerospike Client Arguments
as_error err;
as_policy_apply apply_policy;
as_policy_apply * apply_policy_p = NULL;
as_key key;
char * module = NULL;
char * function = NULL;
as_list * arglist = NULL;
as_val * result = NULL;
PyObject * py_umodule = NULL;
PyObject * py_ufunction = NULL;
// Initialisation flags
bool key_initialised = false;
// Initialize error
as_error_init(&err);
if( !PyList_Check(py_arglist) ) {
PyErr_SetString(PyExc_TypeError, "expected UDF method arguments in a 'list'");
return NULL;
}
if (!self || !self->as) {
as_error_update(&err, AEROSPIKE_ERR_PARAM, "Invalid aerospike object");
goto CLEANUP;
}
if (!self->is_conn_16) {
as_error_update(&err, AEROSPIKE_ERR_CLUSTER, "No connection to aerospike cluster");
goto CLEANUP;
}
// Convert python key object to as_key
pyobject_to_key(&err, py_key, &key);
if ( err.code != AEROSPIKE_OK ) {
goto CLEANUP;
}
// Key is initialiased successfully
key_initialised = true;
// Convert python list to as_list
pyobject_to_list(self, &err, py_arglist, &arglist, NULL, -1);
if ( err.code != AEROSPIKE_OK ) {
goto CLEANUP;
}
// Convert python policy object to as_policy_apply
pyobject_to_policy_apply(&err, py_policy, &apply_policy, &apply_policy_p,
&self->as->config.policies.apply);
if ( err.code != AEROSPIKE_OK ) {
goto CLEANUP;
}
if ( PyUnicode_Check(py_module) ) {
py_umodule = PyUnicode_AsUTF8String(py_module);
module = PyStr_AsString(py_umodule);
}
else if ( PyStr_Check(py_module) ) {
module = PyStr_AsString(py_module);
}
else {
as_error_update(&err, AEROSPIKE_ERR_CLIENT, "udf module argument must be a string or unicode string");
goto CLEANUP;
}
if ( PyUnicode_Check(py_function) ) {
py_ufunction = PyUnicode_AsUTF8String(py_function);
function = PyStr_AsString(py_ufunction);
}
else if ( PyStr_Check(py_function) ) {
function = PyStr_AsString(py_function);
}
else {
as_error_update(&err, AEROSPIKE_ERR_CLIENT, "function name must be a string or unicode string");
goto CLEANUP;
}
//.........这里部分代码省略.........
开发者ID:andersonbd1,项目名称:aerospike-client-python,代码行数:101,代码来源:apply.c
示例7: SpiDev_xfer2
static PyObject *
SpiDev_xfer2(SpiDevObject *self, PyObject *args)
{
static char *msg = "Argument must be a list of at least one, "
"but not more than 4096 integers";
int status;
uint16_t delay_usecs = 0;
uint32_t speed_hz = 0;
uint8_t bits_per_word = 0;
uint16_t ii, len;
PyObject *list;
struct spi_ioc_transfer xfer;
uint8_t *txbuf, *rxbuf;
if (!PyArg_ParseTuple(args, "O|IHB:xfer2", &list, &speed_hz, &delay_usecs, &bits_per_word))
return NULL;
if (!PyList_Check(list)) {
PyErr_SetString(PyExc_TypeError, wrmsg);
return NULL;
}
if ((len = PyList_GET_SIZE(list)) > SPIDEV_MAXPATH) {
PyErr_SetString(PyExc_OverflowError, wrmsg);
return NULL;
}
txbuf = malloc(sizeof(__u8) * len);
rxbuf = malloc(sizeof(__u8) * len);
for (ii = 0; ii < len; ii++) {
PyObject *val = PyList_GET_ITEM(list, ii);
if (!PyInt_Check(val)) {
PyErr_SetString(PyExc_TypeError, msg);
return NULL;
}
txbuf[ii] = (__u8)PyInt_AS_LONG(val);
}
xfer.tx_buf = (unsigned long)txbuf;
xfer.rx_buf = (unsigned long)rxbuf;
xfer.len = len;
xfer.delay_usecs = delay_usecs;
xfer.speed_hz = speed_hz ? speed_hz : self->max_speed_hz;
xfer.bits_per_word = bits_per_word ? bits_per_word : self->bits_per_word;
status = ioctl(self->fd, SPI_IOC_MESSAGE(1), &xfer);
if (status < 0) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
for (ii = 0; ii < len; ii++) {
PyObject *val = Py_BuildValue("l", (long)rxbuf[ii]);
PyList_SET_ITEM(list, ii, val);
}
// WA:
// in CS_HIGH mode CS isnt pulled to low after transfer
// reading 0 bytes doesn't really matter but brings CS down
status = read(self->fd, &rxbuf[0], 0);
free(txbuf);
free(rxbuf);
Py_INCREF(list);
return list;
}
开发者ID:oryxr,项目名称:py-spidev,代码行数:67,代码来源:spidev_module.c
示例8: py_cps_get
PyObject * py_cps_get(PyObject *self, PyObject *args) {
PyObject * param_list;
cps_api_get_params_t gr;
if (cps_api_get_request_init (&gr)==cps_api_ret_code_ERR) {
py_set_error_string("Failed to initialize the get req");
return nullptr;
}
cps_api_get_request_guard rg(&gr);
PyObject *res_obj;
if (! PyArg_ParseTuple( args, "O!O", &PyList_Type, ¶m_list,&res_obj)) {
py_set_error_string("Failed to parse input args.");
return nullptr;
}
PyObject * lst = NULL;
if (PyDict_Check(res_obj)) {
PyObject *l = PyList_New(0);
PyRef _l(l);
if (l==NULL) {
py_set_error_string("Can not create a list.");
return nullptr;
}
PyObject *_prev = PyDict_GetItemString(res_obj,"list");
if (_prev!=NULL) {
PyDict_DelItemString(res_obj,"list");
}
if (!py_cps_util_set_item_to_dict(res_obj,"list",l)) {
py_set_error_string("Can not create a list.");
return nullptr;
}
lst = l;
}
if (PyList_Check(res_obj)) {
lst = res_obj;
}
if (lst==NULL) {
py_set_error_string("The return args are invalid.");
return nullptr;
}
Py_ssize_t str_keys = PyList_Size(param_list);
{
Py_ssize_t ix = 0;
for ( ;ix < str_keys ; ++ix ) {
PyObject *strObj = PyList_GetItem(param_list, ix);
if (PyString_Check(strObj)) {
//
cps_api_object_t o = cps_api_object_list_create_obj_and_append(gr.filters);
if (o==NULL) {
py_set_error_string("Memory allocation error.");
return nullptr;
}
if (!cps_api_key_from_string(cps_api_object_key(o),PyString_AsString(strObj))) {
py_set_error_string("Memory allocation error.");
return nullptr;
}
}
if (PyDict_Check(strObj)) {
cps_api_object_t o = dict_to_cps_obj(strObj);
if (o==NULL) {
py_set_error_string("Can't convert from a python to internal object");
return nullptr;
}
if (!cps_api_object_list_append(gr.filters,o)) {
cps_api_object_delete(o);
py_set_error_string("Memory allocation error.");
return nullptr;
}
}
}
}
gr.keys = NULL;
gr.key_count = 0;
cps_api_return_code_t rc;
{
NonBlockingPythonContext l;
rc = cps_api_get(&gr);
}
if (rc!=cps_api_ret_code_OK) {
Py_RETURN_FALSE;
}
size_t ix = 0;
size_t mx = cps_api_object_list_size(gr.list);
for ( ; ix < mx ; ++ix) {
cps_api_object_t obj = cps_api_object_list_get(gr.list,ix);
PyObject *d = cps_obj_to_dict(obj);
PyRef r(d);
if (d==NULL) {
py_set_error_string("Memory allocation error.");
return nullptr;
}
if (PyList_Append(lst,d)) {
//.........这里部分代码省略.........
开发者ID:Azure,项目名称:sonic-object-library,代码行数:101,代码来源:cps_api_python_operation.cpp
示例9: immom_saImmOmClassCreate
static PyObject *
immom_saImmOmClassCreate(PyObject *self, PyObject *args)
{
char* className;
char* categoryStr;
SaImmClassCategoryT classCategory;
PyObject* alist;
unsigned int len, i;
SaImmAttrDefinitionT_2** attrDefinitions;
SaAisErrorT rc;
if (!PyArg_ParseTuple(args, "ssO", &className, &categoryStr, &alist))
return NULL;
if (!PyList_Check(alist))
return immom_aisException(SA_AIS_ERR_INVALID_PARAM);
if (strcmp(categoryStr, "CONFIG") == 0) {
classCategory = SA_IMM_CLASS_CONFIG;
} else if (strcmp(categoryStr, "RUNTIME") == 0) {
classCategory = SA_IMM_CLASS_RUNTIME;
} else {
return immom_aisException(SA_AIS_ERR_INVALID_PARAM);
}
len = PyList_Size(alist);
attrDefinitions = (SaImmAttrDefinitionT_2**)
memget(sizeof(SaImmAttrDefinitionT_2*) * (len+1));
attrDefinitions[len] = NULL;
for (i = 0; i < len; i++) {
PyObject* item = PyList_GetItem(alist, i);
char* attrName;
char* attrType;
unsigned PY_LONG_LONG flags;
PyObject* def;
SaImmAttrDefinitionT_2* ad;
if (!PyTuple_Check(item))
return immom_aisException(SA_AIS_ERR_INVALID_PARAM);
if (!PyArg_ParseTuple(item, "ssKO", &attrName, &attrType, &flags,&def))
return immom_return_null();
if (!PyList_Check(def))
return immom_aisException(SA_AIS_ERR_INVALID_PARAM);
ad = (SaImmAttrDefinitionT_2*)memget(sizeof(SaImmAttrDefinitionT_2));
ad->attrName = attrName;
ad->attrValueType = immom_parseTypeStr(attrType);
if ((int)ad->attrValueType == 0)
return immom_aisException(SA_AIS_ERR_INVALID_PARAM);
ad->attrFlags = flags;
ad->attrDefaultValue = NULL;
if (PyList_Size(def) > 0) {
SaImmAttrValuesT_2* attr = memget(sizeof(SaImmAttrValuesT_2));
if (immom_parseAttrValue(attr, attrName, attrType, def)== NULL)
immom_return_null();
ad->attrDefaultValue = attr->attrValues[0];
}
attrDefinitions[i] = ad;
}
rc = saImmOmClassCreate_2(
immOmHandle, className, classCategory,
(const SaImmAttrDefinitionT_2**)attrDefinitions);
if (rc != SA_AIS_OK) return immom_aisException(rc);
return immom_return_None();
}
开发者ID:helioloureiro,项目名称:opensaf-fork,代码行数:64,代码来源:immombin.c
示例10: evalDistribution
/**
* evalDistribution function evaluate a model function with input vector
* @param args: input q as vector or [qx, qy] where qx, qy are vectors
*
*/
static PyObject * evalDistribution(CSCCrystalModel *self, PyObject *args){
PyObject *qx, *qy;
PyArrayObject * pars;
int npars ,mpars;
// Get parameters
// Reader parameter dictionary
self->model->phi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "phi") );
self->model->scale = PyFloat_AsDouble( PyDict_GetItemString(self->params, "scale") );
self->model->dnn = PyFloat_AsDouble( PyDict_GetItemString(self->params, "dnn") );
self->model->sldSph = PyFloat_AsDouble( PyDict_GetItemString(self->params, "sldSph") );
self->model->d_factor = PyFloat_AsDouble( PyDict_GetItemString(self->params, "d_factor") );
self->model->psi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "psi") );
self->model->radius = PyFloat_AsDouble( PyDict_GetItemString(self->params, "radius") );
self->model->background = PyFloat_AsDouble( PyDict_GetItemString(self->params, "background") );
self->model->theta = PyFloat_AsDouble( PyDict_GetItemString(self->params, "theta") );
self->model->sldSolv = PyFloat_AsDouble( PyDict_GetItemString(self->params, "sldSolv") );
// Read in dispersion parameters
PyObject* disp_dict;
DispersionVisitor* visitor = new DispersionVisitor();
disp_dict = PyDict_GetItemString(self->dispersion, "radius");
self->model->radius.dispersion->accept_as_destination(visitor, self->model->radius.dispersion, disp_dict);
disp_dict = PyDict_GetItemString(self->dispersion, "phi");
self->model->phi.dispersion->accept_as_destination(visitor, self->model->phi.dispersion, disp_dict);
disp_dict = PyDict_GetItemString(self->dispersion, "psi");
self->model->psi.dispersion->accept_as_destination(visitor, self->model->psi.dispersion, disp_dict);
disp_dict = PyDict_GetItemString(self->dispersion, "theta");
self->model->theta.dispersion->accept_as_destination(visitor, self->model->theta.dispersion, disp_dict);
// Get input and determine whether we have to supply a 1D or 2D return value.
if ( !PyArg_ParseTuple(args,"O",&pars) ) {
PyErr_SetString(CSCCrystalModelError,
"CSCCrystalModel.evalDistribution expects a q value.");
return NULL;
}
// Check params
if(PyArray_Check(pars)==1) {
// Length of list should 1 or 2
npars = pars->nd;
if(npars==1) {
// input is a numpy array
if (PyArray_Check(pars)) {
return evaluateOneDim(self->model, (PyArrayObject*)pars);
}
}else{
PyErr_SetString(CSCCrystalModelError,
"CSCCrystalModel.evalDistribution expect numpy array of one dimension.");
return NULL;
}
}else if( PyList_Check(pars)==1) {
// Length of list should be 2 for I(qx,qy)
mpars = PyList_GET_SIZE(pars);
if(mpars!=2) {
PyErr_SetString(CSCCrystalModelError,
"CSCCrystalModel.evalDistribution expects a list of dimension 2.");
return NULL;
}
qx = PyList_GET_ITEM(pars,0);
qy = PyList_GET_ITEM(pars,1);
if (PyArray_Check(qx) && PyArray_Check(qy)) {
return evaluateTwoDimXY(self->model, (PyArrayObject*)qx,
(PyArrayObject*)qy);
}else{
PyErr_SetString(CSCCrystalModelError,
"CSCCrystalModel.evalDistribution expect 2 numpy arrays in list.");
return NULL;
}
}
PyErr_SetString(CSCCrystalModelError,
"CSCCrystalModel.evalDistribution couln't be run.");
return NULL;
}
开发者ID:ricleal,项目名称:SasModeling,代码行数:82,代码来源:CSCCrystalModel.cpp
示例11: runXY
/**
* Function to call to evaluate model in cartesian coordinates
* @param args: input q or [qx, qy]]
* @return: function value
*/
static PyObject * runXY(CSCCrystalModel *self, PyObject *args) {
double qx_value, qy_value;
PyObject* pars;
int npars;
// Get parameters
// Reader parameter dictionary
self->model->phi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "phi") );
self->model->scale = PyFloat_AsDouble( PyDict_GetItemString(self->params, "scale") );
self->model->dnn = PyFloat_AsDouble( PyDict_GetItemString(self->params, "dnn") );
self->model->sldSph = PyFloat_AsDouble( PyDict_GetItemString(self->params, "sldSph") );
self->model->d_factor = PyFloat_AsDouble( PyDict_GetItemString(self->params, "d_factor") );
self->model->psi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "psi") );
self->model->radius = PyFloat_AsDouble( PyDict_GetItemString(self->params, "radius") );
self->model->background = PyFloat_AsDouble( PyDict_GetItemString(self->params, "background") );
self->model->theta = PyFloat_AsDouble( PyDict_GetItemString(self->params, "theta") );
self->model->sldSolv = PyFloat_AsDouble( PyDict_GetItemString(self->params, "sldSolv") );
// Read in dispersion parameters
PyObject* disp_dict;
DispersionVisitor* visitor = new DispersionVisitor();
disp_dict = PyDict_GetItemString(self->dispersion, "radius");
self->model->radius.dispersion->accept_as_destination(visitor, self->model->radius.dispersion, disp_dict);
disp_dict = PyDict_GetItemString(self->dispersion, "phi");
self->model->phi.dispersion->accept_as_destination(visitor, self->model->phi.dispersion, disp_dict);
disp_dict = PyDict_GetItemString(self->dispersion, "psi");
self->model->psi.dispersion->accept_as_destination(visitor, self->model->psi.dispersion, disp_dict);
disp_dict = PyDict_GetItemString(self->dispersion, "theta");
self->model->theta.dispersion->accept_as_destination(visitor, self->model->theta.dispersion, disp_dict);
// Get input and determine whether we have to supply a 1D or 2D return value.
if ( !PyArg_ParseTuple(args,"O",&pars) ) {
PyErr_SetString(CSCCrystalModelError,
"CSCCrystalModel.run expects a q value.");
return NULL;
}
// Check params
if( PyList_Check(pars)==1) {
// Length of list should be 2 for I(qx, qy))
npars = PyList_GET_SIZE(pars);
if(npars!=2) {
PyErr_SetString(CSCCrystalModelError,
"CSCCrystalModel.run expects a double or a list of dimension 2.");
return NULL;
}
// We have a vector q, get the qx and qy values at which
// to evaluate I(qx,qy)
qx_value = CSCCrystalModel_readDouble(PyList_GET_ITEM(pars,0));
qy_value = CSCCrystalModel_readDouble(PyList_GET_ITEM(pars,1));
return Py_BuildValue("d",(*(self->model))(qx_value,qy_value));
} else {
// We have a scalar q, we will evaluate I(q)
qx_value = CSCCrystalModel_readDouble(pars);
return Py_BuildValue("d",(*(self->model))(qx_value));
}
}
开发者ID:ricleal,项目名称:SasModeling,代码行数:67,代码来源:CSCCrystalModel.cpp
示例12: AerospikeClient_Select_Many_Invoke
/**
*********************************************************************
* This function will invoke aerospike_batch_get_bins to get filtered
* bins from all the records in a batches.
*
* @param self AerospikeClient object
* @param py_keys List of keys passed on by user
* @param py_bins List of filter bins passed on by user
* @param py_policy User specified Policy dictionary
*
*********************************************************************
**/
static
PyObject * AerospikeClient_Select_Many_Invoke(
AerospikeClient * self,
PyObject * py_keys, PyObject * py_bins, PyObject * py_policy)
{
// Python Return Value
PyObject * py_recs = NULL;
// Aerospike Client Arguments
as_error err;
as_policy_batch policy;
as_policy_batch * batch_policy_p = NULL;
Py_ssize_t bins_size = 0;
char **filter_bins = NULL;
bool has_batch_index = false;
// Unicode object's pool
UnicodePyObjects u_objs;
u_objs.size = 0;
int i = 0;
// Initialize error
as_error_init(&err);
if (!self || !self->as) {
as_error_update(&err, AEROSPIKE_ERR_PARAM, "Invalid aerospike object");
goto CLEANUP;
}
if (!self->is_conn_16) {
as_error_update(&err, AEROSPIKE_ERR_CLUSTER, "No connection to aerospike cluster");
goto CLEANUP;
}
// Check the type of bins and get it's size
// i.e. number of bins provided
if (py_bins != NULL && PyList_Check(py_bins)){
bins_size = PyList_Size(py_bins);
}
else if (py_bins != NULL && PyTuple_Check(py_bins)){
bins_size = PyTuple_Size(py_bins);
}
else {
as_error_update(&err, AEROSPIKE_ERR_PARAM, "Filter bins should be specified as a list or tuple.");
goto CLEANUP;
}
filter_bins = (char **)malloc(sizeof(long int) * bins_size);
for (i = 0; i < bins_size; i++){
PyObject *py_bin = NULL;
if(PyList_Check(py_bins)){
py_bin = PyList_GetItem(py_bins, i);
}
if(PyTuple_Check(py_bins)){
py_bin = PyTuple_GetItem(py_bins, i);
}
if (PyUnicode_Check(py_bin)){
// Store the unicode object into a pool
// It is DECREFed at later stages
// So, no need of DECREF here.
filter_bins[i] = PyBytes_AsString(
store_unicode_bins(&u_objs, PyUnicode_AsUTF8String(py_bin)));
}
else if (PyString_Check(py_bin)){
filter_bins[i] = PyString_AsString(py_bin);
}
else{
as_error_update(&err, AEROSPIKE_ERR_PARAM, "Bin name should be a string or unicode string.");
goto CLEANUP;
}
}
// Convert python policy object to as_policy_batch
pyobject_to_policy_batch(&err, py_policy, &policy, &batch_policy_p,
&self->as->config.policies.batch);
if ( err.code != AEROSPIKE_OK ) {
goto CLEANUP;
}
has_batch_index = aerospike_has_batch_index(self->as);
if (has_batch_index && !(self->as->config.policies.batch.use_batch_direct)) {
py_recs = batch_select_aerospike_batch_read(&err, self, py_keys, batch_policy_p, filter_bins, bins_size);
} else {
py_recs = batch_select_aerospike_batch_get(&err, self, py_keys, batch_policy_p, filter_bins, bins_size);
}
CLEANUP:
//.........这里部分代码省略.........
开发者ID:BeeswaxIO,项目名称:aerospike-client-python,代码行数:101,代码来源:select_many.c
示例13: batch_select_aerospike_batch_get
/**
*******************************************************************************************************
* This function will get a batch of records from the Aeropike DB.
*
* @param err as_error object
* @param self AerospikeClient object
* @param py_keys The list of keys
* @param batch_policy_p as_policy_batch object
*
* Returns the record if key exists otherwise NULL.
*******************************************************************************************************
*/
static PyObject * batch_select_aerospike_batch_get(as_error *err, AerospikeClient * self, PyObject *py_keys, as_policy_batch * batch_policy_p, char **filter_bins, Py_ssize_t bins_size)
{
PyObject * py_recs = NULL;
as_batch batch;
bool batch_initialised = false;
LocalData data;
data.client = self;
// Convert python keys list to as_key ** and add it to as_batch.keys
// keys can be specified in PyList or PyTuple
if ( py_keys != NULL && PyList_Check(py_keys) ) {
Py_ssize_t size = PyList_Size(py_keys);
py_recs = PyList_New(size);
data.py_recs = py_recs;
as_batch_init(&batch, size);
// Batch object initialised
batch_initialised = true;
for ( int i = 0; i < size; i++ ) {
PyObject * py_key = PyList_GetItem(py_keys, i);
if ( !PyTuple_Check(py_key) ){
as_error_update(err, AEROSPIKE_ERR_PARAM, "Key should be a tuple.");
goto CLEANUP;
}
pyobject_to_key(err, py_key, as_batch_keyat(&batch, i));
if ( err->code != AEROSPIKE_OK ) {
goto CLEANUP;
}
}
}
else if ( py_keys != NULL && PyTuple_Check(py_keys) ) {
Py_ssize_t size = PyTuple_Size(py_keys);
py_recs = PyList_New(size);
data.py_recs = py_recs;
as_batch_init(&batch, size);
// Batch object initialised
batch_initialised = true;
for ( int i = 0; i < size; i++ ) {
PyObject * py_key = PyTuple_GetItem(py_keys, i);
if ( !PyTuple_Check(py_key) ){
as_error_update(err, AEROSPIKE_ERR_PARAM, "Key should be a tuple.");
goto CLEANUP;
}
pyobject_to_key(err, py_key, as_batch_keyat(&batch, i));
if ( err->code != AEROSPIKE_OK ) {
goto CLEANUP;
}
}
}
else {
as_error_update(err, AEROSPIKE_ERR_PARAM, "Keys should be specified as a list or tuple.");
goto CLEANUP;
}
// Invoke C-client API
Py_BEGIN_ALLOW_THREADS
aerospike_batch_get_bins(self->as, err, batch_policy_p,
&batch, (const char **) filter_bins, bins_size,
(aerospike_batch_read_callback) batch_select_cb,
&data);
Py_END_ALLOW_THREADS
CLEANUP:
if (batch_initialised == true){
// We should destroy batch object as we are using 'as_batch_init' for initialisation
// Also, pyobject_to_key is soing strdup() in case of Unicode. So, object destruction
// is necessary.
as_batch_destroy(&batch);
}
return py_recs;
}
开发者ID:BeeswaxIO,项目名称:aerospike-client-python,代码行数:96,代码来源:select_many.c
示例14: batch_select_aerospike_batch_read
/**
*******************************************************************************************************
* This function will get a batch of records from the Aeropike DB.
*
* @param err as_error object
* @param self AerospikeClient object
* @param py_keys The list of keys
* @param batch_policy_p as_policy_batch object
*
* Returns the record if key exists otherwise NULL.
*******************************************************************************************************
*/
static PyObject * batch_select_aerospike_batch_read(as_error *err, AerospikeClient * self, PyObject *py_keys, as_policy_batch * batch_policy_p, char** filter_bins, Py_ssize_t bins_size)
{
PyObject * py_recs = NULL;
as_batch_read_records records;
as_batch_read_record* record = NULL;
bool batch_initialised = false;
// Convert python keys list to as_key ** and add it to as_batch.keys
// keys can be specified in PyList or PyTuple
if ( py_keys != NULL && PyList_Check(py_keys) ) {
Py_ssize_t size = PyList_Size(py_keys);
py_recs = PyList_New(size);
as_batch_read_inita(&records, size);
// Batch object initialised
batch_initialised = true;
for ( int i = 0; i < size; i++ ) {
PyObject * py_key = PyList_GetItem(py_keys, i);
if ( !PyTuple_Check(py_key) ){
as_error_update(err, AEROSPIKE_ERR_PARAM, "Key should be a tuple.");
goto CLEANUP;
}
record = as_batch_read_reserve(&records);
pyobject_to_key(err, py_key, &record->key);
if (bins_size) {
record->bin_names = filter_bins;
record->n_bin_names = bins_size;
} else {
record->read_all_bins = true;
}
if ( err->code != AEROSPIKE_OK ) {
goto CLEANUP;
}
}
}
else if ( py_keys != NULL && PyTuple_Check(py_keys) ) {
Py_ssize_t size = PyTuple_Size(py_keys);
py_recs = PyList_New(size);
as_batch_read_inita(&records, size);
// Batch object initialised
batch_initialised = true;
for ( int i = 0; i < size; i++ ) {
PyObject * py_key = PyTuple_GetItem(py_keys, i);
if ( !PyTuple_Check(py_key) ){
as_error_update(err, AEROSPIKE_ERR_PARAM, "Key should be a tuple.");
goto CLEANUP;
}
record = as_batch_read_reserve(&records);
pyobject_to_key(err, py_key, &record->key);
if (bins_size) {
record->bin_names = filter_bins;
record->n_bin_names = bins_size;
} else {
record->read_all_bins = true;
}
if ( err->code != AEROSPIKE_OK ) {
goto CLEANUP;
}
}
}
else {
as_error_update(err, AEROSPIKE_ERR_PARAM, "Keys should be specified as a list or tuple.");
goto CLEANUP;
}
// Invoke C-client API
Py_BEGIN_ALLOW_THREADS
aerospike_batch_read(self->as, err, batch_policy_p, &records);
Py_END_ALLOW_THREADS
if (err->code != AEROSPIKE_OK)
{
goto CLEANUP;
}
//.........这里部分代码省略.........
开发者ID:BeeswaxIO,项目名称:aerospike-client-python,代码行数:101,代码来源:select_many.c
示例15: gFont
//.........这里部分代码省略.........
if (atype)
{
if (!strcmp(atype, "text"))
{
ePyObject pvalue = PyTuple_GET_ITEM(value, 1);
const char *value = (pvalue && PyString_Check(pvalue)) ? PyString_AsString(pvalue) : "<not-a-string>";
painter.setFont(fnt2);
if (value_alignment_left)
painter.renderText(eRect(offset, item_right), value, gPainter::RT_HALIGN_LEFT);
else
painter.renderText(eRect(offset + eSize(m_seperation, 0), item_right), value, gPainter::RT_HALIGN_RIGHT);
/* pvalue is borrowed */
} else if (!strcmp(atype, "slider"))
{
ePyObject pvalue = PyTuple_GET_ITEM(value, 1);
ePyObject psize = PyTuple_GET_ITEM(value, 2);
/* convert value to Long. fallback to -1 on error. */
int value = (pvalue && PyInt_Check(pvalue)) ? PyInt_AsLong(pvalue) : -1;
int size = (pvalue && PyInt_Check(psize)) ? PyInt_AsLong(psize) : 100;
/* calc. slider length */
int width = item_right.width() * value / size;
int height = item
|
请发表评论