summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-04-06 23:26:24 (GMT)
committerGitHub <noreply@github.com>2022-04-06 23:26:24 (GMT)
commit5c4d1f6e0e192653560ae2941a6677fbf4fbd1f2 (patch)
tree82041fb366ee919667cffb184b4b8725fd74bd63
parent2390b2236d4b6ea96217478221d6f7d4b4f344f8 (diff)
downloadcpython-5c4d1f6e0e192653560ae2941a6677fbf4fbd1f2.zip
cpython-5c4d1f6e0e192653560ae2941a6677fbf4fbd1f2.tar.gz
cpython-5c4d1f6e0e192653560ae2941a6677fbf4fbd1f2.tar.bz2
bpo-35134: Add Include/cpython/setobject.h header (GH-32384)
-rw-r--r--Include/cpython/setobject.h67
-rw-r--r--Include/setobject.h73
-rw-r--r--Makefile.pre.in1
-rw-r--r--PCbuild/pythoncore.vcxproj1
-rw-r--r--PCbuild/pythoncore.vcxproj.filters3
5 files changed, 78 insertions, 67 deletions
diff --git a/Include/cpython/setobject.h b/Include/cpython/setobject.h
new file mode 100644
index 0000000..b4443a6
--- /dev/null
+++ b/Include/cpython/setobject.h
@@ -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);
diff --git a/Include/setobject.h b/Include/setobject.h
index 62516be..fdad706 100644
--- a/Include/setobject.h
+++ b/Include/setobject.h
@@ -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
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 69e9723..2f61259 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -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 \
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index 1d7c08b..6e51e17 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -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" />
diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters
index 571a7f1..5fe6a9d 100644
--- a/PCbuild/pythoncore.vcxproj.filters
+++ b/PCbuild/pythoncore.vcxproj.filters
@@ -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>