PHP 8.2.30
Preview: pycore_hamt.h Size: 3.65 KB
/opt/alt/python312/include/python3.12/internal/pycore_hamt.h

#ifndef Py_INTERNAL_HAMT_H
#define Py_INTERNAL_HAMT_H

#ifndef Py_BUILD_CORE
#  error "this header requires Py_BUILD_CORE define"
#endif


/*
HAMT tree is shaped by hashes of keys. Every group of 5 bits of a hash denotes
the exact position of the key in one level of the tree. Since we're using
32 bit hashes, we can have at most 7 such levels. Although if there are
two distinct keys with equal hashes, they will have to occupy the same
cell in the 7th level of the tree -- so we'd put them in a "collision" node.
Which brings the total possible tree depth to 8. Read more about the actual
layout of the HAMT tree in `hamt.c`.

This constant is used to define a datastucture for storing iteration state.
*/
#define _Py_HAMT_MAX_TREE_DEPTH 8


extern PyTypeObject _PyHamt_Type;
extern PyTypeObject _PyHamt_ArrayNode_Type;
extern PyTypeObject _PyHamt_BitmapNode_Type;
extern PyTypeObject _PyHamt_CollisionNode_Type;
extern PyTypeObject _PyHamtKeys_Type;
extern PyTypeObject _PyHamtValues_Type;
extern PyTypeObject _PyHamtItems_Type;


/* other API */

#define PyHamt_Check(o) Py_IS_TYPE((o), &_PyHamt_Type)


/* Abstract tree node. */
typedef struct {
    PyObject_HEAD
} PyHamtNode;


/* An HAMT immutable mapping collection. */
typedef struct {
    PyObject_HEAD
    PyHamtNode *h_root;
    PyObject *h_weakreflist;
    Py_ssize_t h_count;
} PyHamtObject;


typedef struct {
    PyObject_VAR_HEAD
    uint32_t b_bitmap;
    PyObject *b_array[1];
} PyHamtNode_Bitmap;


/* A struct to hold the state of depth-first traverse of the tree.

   HAMT is an immutable collection.  Iterators will hold a strong reference
   to it, and every node in the HAMT has strong references to its children.

   So for iterators, we can implement zero allocations and zero reference
   inc/dec depth-first iteration.

   - i_nodes: an array of seven pointers to tree nodes
   - i_level: the current node in i_nodes
   - i_pos: an array of positions within nodes in i_nodes.
*/
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;


/* Base iterator object.

   Contains the iteration state, a pointer to the HAMT tree,
   and a pointer to the 'yield function'.  The latter is a simple
   function that returns a key/value tuple for the 'Items' iterator,
   just a key for the 'Keys' iterator, and a value for the 'Values'
   iterator.
*/
typedef struct {
    PyObject_HEAD
    PyHamtObject *hi_obj;
    PyHamtIteratorState hi_iter;
    binaryfunc hi_yield;
} PyHamtIterator;


/* Create a new HAMT immutable mapping. */
PyHamtObject * _PyHamt_New(void);

/* Return a new collection based on "o", but with an additional
   key/val pair. */
PyHamtObject * _PyHamt_Assoc(PyHamtObject *o, PyObject *key, PyObject *val);

/* Return a new collection based on "o", but without "key". */
PyHamtObject * _PyHamt_Without(PyHamtObject *o, PyObject *key);

/* Find "key" in the "o" collection.

   Return:
   - -1: An error occurred.
   - 0: "key" wasn't found in "o".
   - 1: "key" is in "o"; "*val" is set to its value (a borrowed ref).
*/
int _PyHamt_Find(PyHamtObject *o, PyObject *key, PyObject **val);

/* Check if "v" is equal to "w".

   Return:
   - 0: v != w
   - 1: v == w
   - -1: An error occurred.
*/
int _PyHamt_Eq(PyHamtObject *v, PyHamtObject *w);

/* Return the size of "o"; equivalent of "len(o)". */
Py_ssize_t _PyHamt_Len(PyHamtObject *o);

/* Return a Keys iterator over "o". */
PyObject * _PyHamt_NewIterKeys(PyHamtObject *o);

/* Return a Values iterator over "o". */
PyObject * _PyHamt_NewIterValues(PyHamtObject *o);

/* Return a Items iterator over "o". */
PyObject * _PyHamt_NewIterItems(PyHamtObject *o);

#endif /* !Py_INTERNAL_HAMT_H */

Directory Contents

Dirs: 0 × Files: 90

Name Size Perms Modified Actions
611 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.96 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
30.55 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
6.59 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.12 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
16.58 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.38 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
5.92 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
8.48 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.31 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
3.30 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
3.83 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
5.14 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.68 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
15.46 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
3.37 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.84 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.27 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
499 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
6.23 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.07 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.58 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
562 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
842 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.17 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
7.72 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.66 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.54 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
4.52 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
480 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
9.04 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
611 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
7.48 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.16 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
490 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.53 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.96 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
112.66 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
24.84 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
3.65 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
4.19 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
6.21 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
5.57 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.93 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
8.87 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.36 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.93 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
7.62 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
383 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.16 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
392 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
14.57 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1016 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
26.64 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.04 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
19.61 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.62 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
1.33 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
606 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.67 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
3.04 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
709 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
3.29 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
8.40 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.97 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.59 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
4.87 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.03 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
346 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
8.23 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
5.77 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
44.68 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.55 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
414 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
937 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
923 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
6.87 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
999 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
388 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.98 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
3.42 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
3.00 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.15 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
4.62 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
763 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
898 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
2.59 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
122.57 KB lrw-r--r-- 2025-10-09 11:07:00
Edit Download
682 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download
740 B lrw-r--r-- 2025-10-09 11:07:00
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).