blob: cc2d6832bce9a570c8bb4c6af6eb6958b44c7175 [file] [log] [blame]
Raymond Hettingera690a992003-11-16 16:17:49 +00001
2/* Set object interface */
3
4#ifndef Py_SETOBJECT_H
5#define Py_SETOBJECT_H
6#ifdef __cplusplus
7extern "C" {
8#endif
9
10/*
11This data structure is shared by set and frozenset objects.
12*/
13
14typedef struct {
15 PyObject_HEAD
16 PyObject *data;
17 long hash; /* only used by frozenset objects */
Raymond Hettinger691d8052004-05-30 07:26:47 +000018 PyObject *weakreflist; /* List of weak references */
Armin Rigo89a39462004-10-28 16:32:00 +000019
20 /* Invariants:
21 * data is a dictionary whose values are all True.
22 * data points to the same dict for the whole life of the set.
23 * For frozensets only:
24 * data is immutable.
25 * hash is the hash of the frozenset or -1 if not computed yet.
26 */
Raymond Hettingera690a992003-11-16 16:17:49 +000027} PySetObject;
28
29PyAPI_DATA(PyTypeObject) PySet_Type;
30PyAPI_DATA(PyTypeObject) PyFrozenSet_Type;
31
Raymond Hettingerf5f41bf2003-11-24 02:57:33 +000032#define PyFrozenSet_CheckExact(ob) ((ob)->ob_type == &PyFrozenSet_Type)
Raymond Hettinger50a4bb32003-11-17 16:42:33 +000033#define PyAnySet_Check(ob) \
34 ((ob)->ob_type == &PySet_Type || (ob)->ob_type == &PyFrozenSet_Type || \
35 PyType_IsSubtype((ob)->ob_type, &PySet_Type) || \
36 PyType_IsSubtype((ob)->ob_type, &PyFrozenSet_Type))
37
Raymond Hettingera690a992003-11-16 16:17:49 +000038#ifdef __cplusplus
39}
40#endif
41#endif /* !Py_SETOBJECT_H */