static int _get_rank(lua_State *L) { skiplist *sl = _to_skiplist(L); double score = luaL_checknumber(L, 2); luaL_checktype(L, 3, LUA_TSTRING); slobj obj; obj.ptr = (char *)lua_tolstring(L, 3, &obj.length); unsigned long rank = slGetRank(sl, score, &obj); if(rank == 0) { return 0; } lua_pushunsigned(L, rank); return 1; }
static PyObject * skipdict_index(SkipDictObject *self, PyObject *key) { PyObject* item = PyDict_GetItem(self->mapping, key); if (!item) { PyErr_SetObject(PyExc_KeyError, PyObject_Repr(key)); return NULL; } PyObject* value = PyTuple_GET_ITEM(item, 1); double score = PyFloat_AsDouble(value); if (score == -1.0 && PyErr_Occurred()) return 0; unsigned long rank = slGetRank(self->skiplist, score, (void*) item); if (!rank) { return NULL; } return PyLong_FromLong(rank - 1); }