]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-35134: Add Include/cpython/setobject.h header (GH-32384)
authorVictor Stinner <vstinner@python.org>
Wed, 6 Apr 2022 23:26:24 +0000 (01:26 +0200)
committerGitHub <noreply@github.com>
Wed, 6 Apr 2022 23:26:24 +0000 (01:26 +0200)
Include/cpython/setobject.h [new file with mode: 0644]
Include/setobject.h
Makefile.pre.in
PCbuild/pythoncore.vcxproj
PCbuild/pythoncore.vcxproj.filters

diff --git a/Include/cpython/setobject.h b/Include/cpython/setobject.h
new file mode 100644 (file)
index 0000000..b4443a6
--- /dev/null
@@ -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);
index 62516be5ab29befd5f1c81212df973c1ec9101bb..fdad70644c545cbda5b29ae94b99e8ff9dbcce37 100644 (file)
@@ -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
index 69e97234ae737a69f9ca4a3f43e81381ee34769e..2f61259e69b8cf056eed11c295e11bd8e95cc519 100644 (file)
@@ -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 \
index 1d7c08b2c8a71b113aa83238613564787ef71a34..6e51e17194d4dbec169fdcee4b181394e25fbfa6 100644 (file)
     <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" />
index 571a7f13bc1a0214619ad657bdf0ac6ba85649b5..5fe6a9de21c13c9389f8328a26ab208824eb4959 100644 (file)
     <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>