コード例 #1
0
ファイル: mpstrings.c プロジェクト: clerkma/texlive-mobile
mp_string mp_rtsl(MP mp,const char*s,size_t l){
mp_string str,nstr;
str= new_strings_entry(mp);
str->str= (unsigned char*)mp_xstrldup(mp,s,l);
str->len= l;
nstr= (mp_string)avl_find(str,mp->strings);
if(nstr==NULL){
assert(avl_ins(str,mp->strings,avl_false)> 0);
nstr= (mp_string)avl_find(str,mp->strings);
}
(void)delete_strings_entry(str);
add_str_ref(nstr);
return nstr;
}
コード例 #2
0
ファイル: avlmodule.c プロジェクト: PypeBros/skiptree
Py_LOCAL(PyObject *) avl_tree_ins(avl_tree_Object * self, PyObject * args)
{
	PyObject *arg1, *arg2 = NULL;
	avl_code_t rv;

	if (!PyArg_ParseTuple(args, "O|O:insert", &arg1, &arg2))
		return NULL;

	if (arg2 == NULL) {
		rv = avl_ins((void *) arg1, self->tree, avl_true);
		/* compare failed and insertion was prevented */
		if (rv == -2)
			return NULL;
	} else if (PyInt_Check(arg2) || PyLong_Check(arg2)) {
		long idx = PyInt_AsLong(arg2);	/*PyInt_AsUnsignedLongMask(arg2) */
		avl_size_t rank;

		if (idx < 0)
			rank = idx + avl_size(self->tree);
		else
			rank = idx;

		if ((rv = avl_ins_index((void *) arg1, rank + 1, self->tree)) == 0) {
			PyErr_SetString(PyExc_IndexError,
							"insertion index out of range");
			return NULL;
		}
	} else {
		PyErr_SetString(PyExc_TypeError,
						"insertion index expected (argument 2)");
		return NULL;
	}

	if (rv < 0) {
		PyErr_SetString(avlErrorObject, "Sorry, couldn't insert item");
		return NULL;
	}
	Py_INCREF(Py_None);
	return Py_None;
}
コード例 #3
0
ファイル: mpstrings.c プロジェクト: clerkma/texlive-mobile
mp_string mp_make_string(MP mp){
mp_string str;
mp_lstring tmp;
tmp.str= mp->cur_string;
tmp.len= mp->cur_length;
str= (mp_string)avl_find(&tmp,mp->strings);
if(str==NULL){
str= mp_xmalloc(mp,1,sizeof(mp_lstring));
str->str= mp->cur_string;
str->len= tmp.len;
assert(avl_ins(str,mp->strings,avl_false)> 0);
str= (mp_string)avl_find(&tmp,mp->strings);
mp->pool_in_use= mp->pool_in_use+(integer)str->len;
if(mp->pool_in_use> mp->max_pl_used)
mp->max_pl_used= mp->pool_in_use;
mp->strs_in_use++;
if(mp->strs_in_use> mp->max_strs_used)
mp->max_strs_used= mp->strs_in_use;
}
add_str_ref(str);
mp_reset_cur_string(mp);
return str;
}
コード例 #4
0
ファイル: avlmodule.c プロジェクト: PypeBros/skiptree
	avl_tree_load_list(avl_tree_Object * self, PyObject * list,
				   avl_bool_t unique)
{
	PyObject *iter;
	int err = 0;

	if ((iter = PyObject_GetIter(list)) == NULL) {
		PyErr_Clear();
		PyErr_SetString(avlErrorObject, "Couldn't get list iterator !");
		err = 1;
	}

	else {
		PyObject *val;
		int rc;
		self->compare_err = 0;

		while ((val = PyIter_Next(iter)) != NULL) {
			rc = avl_ins((void *) val, self->tree, !unique);
			Py_DECREF(val);		/* PyIter_Next returns a new reference */
			if (rc < 0) {
				if (self->compare_err == 0)
					PyErr_SetString(avlErrorObject,
									"Couldn't insert item retrieved from list !");
#       if 0==1
				avl_empty(self->tree);
#       endif
				err = 1;
				break;
			}
		}

		Py_DECREF(iter);
	}
	return err;
}