| #ifndef Py_INTERNAL_HAMT_H |
| #define Py_INTERNAL_HAMT_H |
|
|
| #ifndef Py_BUILD_CORE |
| # error "this header requires Py_BUILD_CORE define" |
| #endif |
|
|
| #define _Py_HAMT_MAX_TREE_DEPTH 7 |
|
|
|
|
| #define PyHamt_Check(o) Py_IS_TYPE(o, &_PyHamt_Type) |
|
|
|
|
| |
| typedef struct { |
| PyObject_HEAD |
| } PyHamtNode; |
|
|
|
|
| |
| typedef struct { |
| PyObject_HEAD |
| PyHamtNode *h_root; |
| PyObject *h_weakreflist; |
| Py_ssize_t h_count; |
| } PyHamtObject; |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| typedef struct { |
| PyHamtNode *i_nodes[_Py_HAMT_MAX_TREE_DEPTH]; |
| Py_ssize_t i_pos[_Py_HAMT_MAX_TREE_DEPTH]; |
| int8_t i_level; |
| } PyHamtIteratorState; |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| typedef struct { |
| PyObject_HEAD |
| PyHamtObject *hi_obj; |
| PyHamtIteratorState hi_iter; |
| binaryfunc hi_yield; |
| } PyHamtIterator; |
|
|
|
|
| PyAPI_DATA(PyTypeObject) _PyHamt_Type; |
| PyAPI_DATA(PyTypeObject) _PyHamt_ArrayNode_Type; |
| PyAPI_DATA(PyTypeObject) _PyHamt_BitmapNode_Type; |
| PyAPI_DATA(PyTypeObject) _PyHamt_CollisionNode_Type; |
| PyAPI_DATA(PyTypeObject) _PyHamtKeys_Type; |
| PyAPI_DATA(PyTypeObject) _PyHamtValues_Type; |
| PyAPI_DATA(PyTypeObject) _PyHamtItems_Type; |
|
|
|
|
| |
| PyHamtObject * _PyHamt_New(void); |
|
|
| |
| |
| PyHamtObject * _PyHamt_Assoc(PyHamtObject *o, PyObject *key, PyObject *val); |
|
|
| |
| PyHamtObject * _PyHamt_Without(PyHamtObject *o, PyObject *key); |
|
|
| |
| |
| |
| |
| |
| |
| |
| int _PyHamt_Find(PyHamtObject *o, PyObject *key, PyObject **val); |
|
|
| |
| |
| |
| |
| |
| |
| |
| int _PyHamt_Eq(PyHamtObject *v, PyHamtObject *w); |
|
|
| |
| Py_ssize_t _PyHamt_Len(PyHamtObject *o); |
|
|
| |
| PyObject * _PyHamt_NewIterKeys(PyHamtObject *o); |
|
|
| |
| PyObject * _PyHamt_NewIterValues(PyHamtObject *o); |
|
|
| |
| PyObject * _PyHamt_NewIterItems(PyHamtObject *o); |
|
|
| int _PyHamt_Init(void); |
| void _PyHamt_Fini(void); |
|
|
| #endif |
|
|