コード例 #1
0
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;
}
コード例 #2
0
ファイル: skipdict.c プロジェクト: malthe/skipdict
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);
}