mirror of https://github.com/python/cpython
bpo-35134: Add Include/cpython/setobject.h header (GH-32384)
This commit is contained in:
parent
2390b2236d
commit
5c4d1f6e0e
|
@ -0,0 +1,67 @@
|
|||
#ifndef Py_CPYTHON_SETOBJECT_H
|
||||
# error "this header file must not be included directly"
|
||||
#endif
|
||||
|
||||
/* There are three kinds of entries in the table:
|
||||
|
||||
1. Unused: key == NULL and hash == 0
|
||||
2. Dummy: key == dummy and hash == -1
|
||||
3. Active: key != NULL and key != dummy and hash != -1
|
||||
|
||||
The hash field of Unused slots is always zero.
|
||||
|
||||
The hash field of Dummy slots are set to -1
|
||||
meaning that dummy entries can be detected by
|
||||
either entry->key==dummy or by entry->hash==-1.
|
||||
*/
|
||||
|
||||
#define PySet_MINSIZE 8
|
||||
|
||||
typedef struct {
|
||||
PyObject *key;
|
||||
Py_hash_t hash; /* Cached hash code of the key */
|
||||
} setentry;
|
||||
|
||||
/* The SetObject data structure is shared by set and frozenset objects.
|
||||
|
||||
Invariant for sets:
|
||||
- hash is -1
|
||||
|
||||
Invariants for frozensets:
|
||||
- data is immutable.
|
||||
- hash is the hash of the frozenset or -1 if not computed yet.
|
||||
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
|
||||
Py_ssize_t fill; /* Number active and dummy entries*/
|
||||
Py_ssize_t used; /* Number active entries */
|
||||
|
||||
/* The table contains mask + 1 slots, and that's a power of 2.
|
||||
* We store the mask instead of the size because the mask is more
|
||||
* frequently needed.
|
||||
*/
|
||||
Py_ssize_t mask;
|
||||
|
||||
/* The table points to a fixed-size smalltable for small tables
|
||||
* or to additional malloc'ed memory for bigger tables.
|
||||
* The table pointer is never NULL which saves us from repeated
|
||||
* runtime null-tests.
|
||||
*/
|
||||
setentry *table;
|
||||
Py_hash_t hash; /* Only used by frozenset objects */
|
||||
Py_ssize_t finger; /* Search finger for pop() */
|
||||
|
||||
setentry smalltable[PySet_MINSIZE];
|
||||
PyObject *weakreflist; /* List of weak references */
|
||||
} PySetObject;
|
||||
|
||||
#define PySet_GET_SIZE(so) \
|
||||
(assert(PyAnySet_Check(so)), (((PySetObject *)(so))->used))
|
||||
|
||||
PyAPI_DATA(PyObject *) _PySet_Dummy;
|
||||
|
||||
PyAPI_FUNC(int) _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, Py_hash_t *hash);
|
||||
PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable);
|
|
@ -6,73 +6,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
|
||||
/* There are three kinds of entries in the table:
|
||||
|
||||
1. Unused: key == NULL and hash == 0
|
||||
2. Dummy: key == dummy and hash == -1
|
||||
3. Active: key != NULL and key != dummy and hash != -1
|
||||
|
||||
The hash field of Unused slots is always zero.
|
||||
|
||||
The hash field of Dummy slots are set to -1
|
||||
meaning that dummy entries can be detected by
|
||||
either entry->key==dummy or by entry->hash==-1.
|
||||
*/
|
||||
|
||||
#define PySet_MINSIZE 8
|
||||
|
||||
typedef struct {
|
||||
PyObject *key;
|
||||
Py_hash_t hash; /* Cached hash code of the key */
|
||||
} setentry;
|
||||
|
||||
/* The SetObject data structure is shared by set and frozenset objects.
|
||||
|
||||
Invariant for sets:
|
||||
- hash is -1
|
||||
|
||||
Invariants for frozensets:
|
||||
- data is immutable.
|
||||
- hash is the hash of the frozenset or -1 if not computed yet.
|
||||
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
|
||||
Py_ssize_t fill; /* Number active and dummy entries*/
|
||||
Py_ssize_t used; /* Number active entries */
|
||||
|
||||
/* The table contains mask + 1 slots, and that's a power of 2.
|
||||
* We store the mask instead of the size because the mask is more
|
||||
* frequently needed.
|
||||
*/
|
||||
Py_ssize_t mask;
|
||||
|
||||
/* The table points to a fixed-size smalltable for small tables
|
||||
* or to additional malloc'ed memory for bigger tables.
|
||||
* The table pointer is never NULL which saves us from repeated
|
||||
* runtime null-tests.
|
||||
*/
|
||||
setentry *table;
|
||||
Py_hash_t hash; /* Only used by frozenset objects */
|
||||
Py_ssize_t finger; /* Search finger for pop() */
|
||||
|
||||
setentry smalltable[PySet_MINSIZE];
|
||||
PyObject *weakreflist; /* List of weak references */
|
||||
} PySetObject;
|
||||
|
||||
#define PySet_GET_SIZE(so) (assert(PyAnySet_Check(so)),(((PySetObject *)(so))->used))
|
||||
|
||||
PyAPI_DATA(PyObject *) _PySet_Dummy;
|
||||
|
||||
PyAPI_FUNC(int) _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, Py_hash_t *hash);
|
||||
PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable);
|
||||
|
||||
#endif /* Section excluded by Py_LIMITED_API */
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PySet_Type;
|
||||
PyAPI_DATA(PyTypeObject) PyFrozenSet_Type;
|
||||
PyAPI_DATA(PyTypeObject) PySetIter_Type;
|
||||
|
@ -104,6 +37,12 @@ PyAPI_FUNC(Py_ssize_t) PySet_Size(PyObject *anyset);
|
|||
(Py_IS_TYPE(ob, &PySet_Type) || \
|
||||
PyType_IsSubtype(Py_TYPE(ob), &PySet_Type))
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
# define Py_CPYTHON_SETOBJECT_H
|
||||
# include "cpython/setobject.h"
|
||||
# undef Py_CPYTHON_SETOBJECT_H
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1551,6 +1551,7 @@ PYTHON_HEADERS= \
|
|||
$(srcdir)/Include/cpython/pystate.h \
|
||||
$(srcdir)/Include/cpython/pythonrun.h \
|
||||
$(srcdir)/Include/cpython/pytime.h \
|
||||
$(srcdir)/Include/cpython/setobject.h \
|
||||
$(srcdir)/Include/cpython/sysmodule.h \
|
||||
$(srcdir)/Include/cpython/traceback.h \
|
||||
$(srcdir)/Include/cpython/tupleobject.h \
|
||||
|
|
|
@ -172,6 +172,7 @@
|
|||
<ClInclude Include="..\Include\cpython\pystate.h" />
|
||||
<ClInclude Include="..\Include\cpython\pythonrun.h" />
|
||||
<ClInclude Include="..\Include\cpython\pytime.h" />
|
||||
<ClInclude Include="..\Include\cpython\setobject.h" />
|
||||
<ClInclude Include="..\Include\cpython\sysmodule.h" />
|
||||
<ClInclude Include="..\Include\cpython\traceback.h" />
|
||||
<ClInclude Include="..\Include\cpython\tupleobject.h" />
|
||||
|
|
|
@ -459,6 +459,9 @@
|
|||
<ClInclude Include="..\Include\cpython\pythonrun.h">
|
||||
<Filter>Include\cpython</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\cpython\setobject.h">
|
||||
<Filter>Include\cpython</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\cpython\sysmodule.h">
|
||||
<Filter>Include\cpython</Filter>
|
||||
</ClInclude>
|
||||
|
|
Loading…
Reference in New Issue