Mercurial > cpython-lru_cache-weakref
diff Modules/_sqlite/cache.c @ 37938:7da4af95ebad legacy-trunk
Updated the sqlite3 module to the external pysqlite 2.2.2 version.
| author | Gerhard Häring <gh@ghaering.de> |
|---|---|
| date | Sun, 23 Apr 2006 15:24:26 +0000 |
| parents | d3969aeba777 |
| children | f2277439dcdc b9d4ced23506 |
line wrap: on
line diff
--- a/Modules/_sqlite/cache.c Sun Apr 23 15:14:37 2006 +0000 +++ b/Modules/_sqlite/cache.c Sun Apr 23 15:24:26 2006 +0000 @@ -22,6 +22,7 @@ */ #include "cache.h" +#include <limits.h> /* only used internally */ Node* new_node(PyObject* key, PyObject* data) @@ -60,11 +61,11 @@ self->factory = NULL; - if (!PyArg_ParseTuple(args, "O|i", &factory, &size)) - { - return -1; + if (!PyArg_ParseTuple(args, "O|i", &factory, &size)) { + return -1; } + /* minimum cache size is 5 entries */ if (size < 5) { size = 5; } @@ -95,6 +96,7 @@ return; } + /* iterate over all nodes and deallocate them */ node = self->first; while (node) { delete_node = node; @@ -119,7 +121,14 @@ node = (Node*)PyDict_GetItem(self->mapping, key); if (node) { - node->count++; + /* an entry for this key already exists in the cache */ + + /* increase usage counter of the node found */ + if (node->count < LONG_MAX) { + node->count++; + } + + /* if necessary, reorder entries in the cache by swapping positions */ if (node->prev && node->count > node->prev->count) { ptr = node->prev; @@ -149,6 +158,10 @@ ptr->prev = node; } } else { + /* There is no entry for this key in the cache, yet. We'll insert a new + * entry in the cache, and make space if necessary by throwing the + * least used item out of the cache. */ + if (PyDict_Size(self->mapping) == self->size) { if (self->last) { node = self->last; @@ -253,7 +266,7 @@ static PyMethodDef cache_methods[] = { {"get", (PyCFunction)cache_get, METH_O, - PyDoc_STR("Gets an entry from the cache.")}, + PyDoc_STR("Gets an entry from the cache or calls the factory function to produce one.")}, {"display", (PyCFunction)cache_display, METH_NOARGS, PyDoc_STR("For debugging only.")}, {NULL, NULL}
