[Python-checkins] python/dist/src/Objects setobject.c,1.49,1.50
rhettinger@users.sourceforge.net
rhettinger at users.sourceforge.net
Tue Aug 16 05:48:02 CEST 2005
Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31184/Objects
Modified Files:
setobject.c
Log Message:
Add a C API for sets and frozensets.
Index: setobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/setobject.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -d -r1.49 -r1.50
--- setobject.c 13 Aug 2005 09:28:48 -0000 1.49
+++ setobject.c 16 Aug 2005 03:47:52 -0000 1.50
@@ -843,7 +843,7 @@
return iterable;
}
result = make_new_set(type, iterable);
- if (result == NULL || set_len(result))
+ if (result == NULL || PySet_GET_SIZE(result))
return result;
Py_DECREF(result);
}
@@ -1052,7 +1052,7 @@
int pos = 0;
setentry *entry;
- if (set_len(other) > set_len((PyObject *)so)) {
+ if (PySet_GET_SIZE(other) > PySet_GET_SIZE(so)) {
tmp = (PyObject *)so;
so = (PySetObject *)other;
other = tmp;
@@ -1381,7 +1381,7 @@
Py_DECREF(tmp);
return result;
}
- if (set_len((PyObject *)so) > set_len(other))
+ if (PySet_GET_SIZE(so) > PySet_GET_SIZE(other))
Py_RETURN_FALSE;
while (set_next(so, &pos, &entry)) {
@@ -1426,11 +1426,11 @@
}
switch (op) {
case Py_EQ:
- if (set_len((PyObject *)v) != set_len(w))
+ if (PySet_GET_SIZE(v) != PySet_GET_SIZE(w))
Py_RETURN_FALSE;
return set_issubset(v, w);
case Py_NE:
- if (set_len((PyObject *)v) != set_len(w))
+ if (PySet_GET_SIZE(v) != PySet_GET_SIZE(w))
Py_RETURN_TRUE;
r1 = set_issubset(v, w);
assert (r1 != NULL);
@@ -1442,11 +1442,11 @@
case Py_GE:
return set_issuperset(v, w);
case Py_LT:
- if (set_len((PyObject *)v) >= set_len(w))
+ if (PySet_GET_SIZE(v) >= PySet_GET_SIZE(w))
Py_RETURN_FALSE;
return set_issubset(v, w);
case Py_GT:
- if (set_len((PyObject *)v) <= set_len(w))
+ if (PySet_GET_SIZE(v) <= PySet_GET_SIZE(w))
Py_RETURN_FALSE;
return set_issuperset(v, w);
}
@@ -1472,7 +1472,7 @@
if (so->hash != -1)
return so->hash;
- hash *= set_len(self) + 1;
+ hash *= PySet_GET_SIZE(self) + 1;
while (set_next(so, &pos, &entry)) {
/* Work to increase the bit dispersion for closely spaced hash
values. The is important because some use cases have many
@@ -1918,3 +1918,67 @@
frozenset_new, /* tp_new */
PyObject_GC_Del, /* tp_free */
};
+
+
+/***** C API functions *************************************************/
+
+PyObject *
+PySet_New(PyObject *iterable)
+{
+ return make_new_set(&PySet_Type, iterable);
+}
+
+PyObject *
+PyFrozenSet_New(PyObject *iterable)
+{
+ PyObject *args = NULL, *result;
+
+ if (iterable != NULL) {
+ args = PyTuple_Pack(1, iterable);
+ if (args == NULL)
+ return NULL;
+ }
+ result = frozenset_new(&PyFrozenSet_Type, args, NULL);
+ Py_DECREF(args);
+ return result;
+}
+
+int
+PySet_Contains(PyObject *anyset, PyObject *key)
+{
+ if (!PyAnySet_Check(anyset)) {
+ PyErr_BadInternalCall();
+ return -1;
+ }
+ return set_contains_key((PySetObject *)anyset, key);
+}
+
+int
+PySet_Discard(PyObject *anyset, PyObject *key)
+{
+ if (!PyAnySet_Check(anyset)) {
+ PyErr_BadInternalCall();
+ return -1;
+ }
+ return set_discard_key((PySetObject *)anyset, key);
+}
+
+int
+PySet_Add(PyObject *set, PyObject *key)
+{
+ if (!PyType_IsSubtype(set->ob_type, &PySet_Type)) {
+ PyErr_BadInternalCall();
+ return -1;
+ }
+ return set_add_key((PySetObject *)set, key);
+}
+
+PyObject *
+PySet_Pop(PyObject *set)
+{
+ if (!PyType_IsSubtype(set->ob_type, &PySet_Type)) {
+ PyErr_BadInternalCall();
+ return NULL;
+ }
+ return set_pop((PySetObject *)set);
+}
More information about the Python-checkins
mailing list