Raymond Hettinger | a690a99 | 2003-11-16 16:17:49 +0000 | [diff] [blame] | 1 | |
| 2 | /* Set object interface */ |
| 3 | |
| 4 | #ifndef Py_SETOBJECT_H |
| 5 | #define Py_SETOBJECT_H |
| 6 | #ifdef __cplusplus |
| 7 | extern "C" { |
| 8 | #endif |
| 9 | |
| 10 | /* |
| 11 | This data structure is shared by set and frozenset objects. |
| 12 | */ |
| 13 | |
| 14 | typedef struct { |
| 15 | PyObject_HEAD |
| 16 | PyObject *data; |
| 17 | long hash; /* only used by frozenset objects */ |
Raymond Hettinger | 691d805 | 2004-05-30 07:26:47 +0000 | [diff] [blame] | 18 | PyObject *weakreflist; /* List of weak references */ |
Armin Rigo | 89a3946 | 2004-10-28 16:32:00 +0000 | [diff] [blame] | 19 | |
| 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 Hettinger | a690a99 | 2003-11-16 16:17:49 +0000 | [diff] [blame] | 27 | } PySetObject; |
| 28 | |
| 29 | PyAPI_DATA(PyTypeObject) PySet_Type; |
| 30 | PyAPI_DATA(PyTypeObject) PyFrozenSet_Type; |
| 31 | |
Raymond Hettinger | f5f41bf | 2003-11-24 02:57:33 +0000 | [diff] [blame] | 32 | #define PyFrozenSet_CheckExact(ob) ((ob)->ob_type == &PyFrozenSet_Type) |
Raymond Hettinger | 50a4bb3 | 2003-11-17 16:42:33 +0000 | [diff] [blame] | 33 | #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 Hettinger | a690a99 | 2003-11-16 16:17:49 +0000 | [diff] [blame] | 38 | #ifdef __cplusplus |
| 39 | } |
| 40 | #endif |
| 41 | #endif /* !Py_SETOBJECT_H */ |