1 /* cache.h - definitions for the LRU cache 2 * 3 * Copyright (C) 2004-2010 Gerhard Häring <gh@ghaering.de> 4 * 5 * This file is part of pysqlite. 6 * 7 * This software is provided 'as-is', without any express or implied 8 * warranty. In no event will the authors be held liable for any damages 9 * arising from the use of this software. 10 * 11 * Permission is granted to anyone to use this software for any purpose, 12 * including commercial applications, and to alter it and redistribute it 13 * freely, subject to the following restrictions: 14 * 15 * 1. The origin of this software must not be misrepresented; you must not 16 * claim that you wrote the original software. If you use this software 17 * in a product, an acknowledgment in the product documentation would be 18 * appreciated but is not required. 19 * 2. Altered source versions must be plainly marked as such, and must not be 20 * misrepresented as being the original software. 21 * 3. This notice may not be removed or altered from any source distribution. 22 */ 23 24 #ifndef PYSQLITE_CACHE_H 25 #define PYSQLITE_CACHE_H 26 #define PY_SSIZE_T_CLEAN 27 #include "Python.h" 28 29 /* The LRU cache is implemented as a combination of a doubly-linked with a 30 * dictionary. The list items are of type 'Node' and the dictionary has the 31 * nodes as values. */ 32 33 typedef struct _pysqlite_Node 34 { 35 PyObject_HEAD 36 PyObject* key; 37 PyObject* data; 38 long count; 39 struct _pysqlite_Node* prev; 40 struct _pysqlite_Node* next; 41 } pysqlite_Node; 42 43 typedef struct 44 { 45 PyObject_HEAD 46 int size; 47 48 /* a dictionary mapping keys to Node entries */ 49 PyObject* mapping; 50 51 /* the factory callable */ 52 PyObject* factory; 53 54 pysqlite_Node* first; 55 pysqlite_Node* last; 56 57 /* if set, decrement the factory function when the Cache is deallocated. 58 * this is almost always desirable, but not in the pysqlite context */ 59 int decref_factory; 60 } pysqlite_Cache; 61 62 extern PyTypeObject pysqlite_NodeType; 63 extern PyTypeObject pysqlite_CacheType; 64 65 int pysqlite_node_init(pysqlite_Node* self, PyObject* args, PyObject* kwargs); 66 void pysqlite_node_dealloc(pysqlite_Node* self); 67 68 int pysqlite_cache_init(pysqlite_Cache* self, PyObject* args, PyObject* kwargs); 69 void pysqlite_cache_dealloc(pysqlite_Cache* self); 70 PyObject* pysqlite_cache_get(pysqlite_Cache* self, PyObject* args); 71 72 int pysqlite_cache_setup_types(void); 73 74 #endif 75