[Python-checkins] python/nondist/sandbox/set setobject.c, 1.7, 1.8 setobject.h, 1.2, 1.3
rhettinger@users.sourceforge.net
rhettinger at users.sourceforge.net
Sun Jul 31 00:21:12 CEST 2005
- Previous message: [Python-checkins] python/nondist/sandbox/set setobject.c, 1.6, 1.7 setobject.h, 1.1, 1.2
- Next message: [Python-checkins] python/nondist/sandbox/mailbox mailbox.py, 1.1, 1.2 libmailbox.tex, 1.2, 1.3 test_mailbox.py, 1.1, 1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/python/python/nondist/sandbox/set
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26909
Modified Files:
setobject.c setobject.h
Log Message:
More cleanups.
* Remove unnecessary typedefs and forward declarations.
* Make the empty frozenset a singleton
* Eliminate C++ style comments
Index: setobject.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/set/setobject.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- setobject.c 30 Jul 2005 21:07:28 -0000 1.7
+++ setobject.c 30 Jul 2005 22:21:09 -0000 1.8
@@ -5,18 +5,11 @@
#include "Python.h"
-typedef PySetEntry setentry;
-typedef PySetObject setobject;
-
/* This must be >= 1. */
#define PERTURB_SHIFT 5
/* Object used as dummy key to fill deleted entries */
-static PyObject *dummy; /* Initialized by first call to newsetobject() */
-
-/* forward declarations */
-static setentry *
-set_lookkey_string(setobject *so, PyObject *key, long hash);
+static PyObject *dummy; /* Initialized by first call to make_new_set() */
#define EMPTY_TO_MINSIZE(so) do { \
memset((so)->smalltable, 0, sizeof((so)->smalltable)); \
@@ -43,7 +36,7 @@
*/
static setentry *
-set_lookkey(setobject *so, PyObject *key, register long hash)
+set_lookkey(PySetObject *so, PyObject *key, register long hash)
{
register int i;
register unsigned int perturb;
@@ -83,9 +76,7 @@
}
else {
/* The compare did major nasty stuff to the
- * xx: start over.
- * XXX A clever adversary could prevent this
- * XXX from terminating.
+ * set: start over.
*/
ep = set_lookkey(so, key, hash);
goto Done;
@@ -125,9 +116,7 @@
}
else {
/* The compare did major nasty stuff to the
- * xx: start over.
- * XXX A clever adversary could prevent this
- * XXX from terminating.
+ * set: start over.
*/
ep = set_lookkey(so, key, hash);
break;
@@ -154,7 +143,7 @@
* expensive, and sets with pure-string keys may be very common.
*/
static setentry *
-set_lookkey_string(setobject *so, PyObject *key, register long hash)
+set_lookkey_string(PySetObject *so, PyObject *key, register long hash)
{
register int i;
register unsigned int perturb;
@@ -206,10 +195,10 @@
Eats a reference to key.
*/
static void
-set_insert_key(register setobject *so, PyObject *key, long hash)
+set_insert_key(register PySetObject *so, PyObject *key, long hash)
{
register setentry *ep;
- typedef PySetEntry *(*lookupfunc)(PySetObject *, PyObject *, long);
+ typedef setentry *(*lookupfunc)(PySetObject *, PyObject *, long);
assert(so->lookup != NULL);
@@ -222,10 +211,10 @@
so->used++;
} else if (ep->key == dummy) {
/* DUMMY */
- Py_DECREF(dummy);
ep->key = key;
ep->hash = hash;
so->used++;
+ Py_DECREF(dummy);
} else {
/* ACTIVE */
Py_DECREF(key);
@@ -238,7 +227,7 @@
actually be smaller than the old one.
*/
static int
-set_table_resize(setobject *so, int minused)
+set_table_resize(PySetObject *so, int minused)
{
int newsize;
setentry *oldtable, *newtable, *ep;
@@ -303,15 +292,15 @@
dummy entries aren't copied over, of course */
for (ep = oldtable; i > 0; ep++) {
if (ep->key == NULL) {
- // UNUSED
+ /* UNUSED */
;
} else if (ep->key == dummy) {
- // DUMMY
+ /* DUMMY */
--i;
assert(ep->key == dummy);
Py_DECREF(ep->key);
} else {
- // ACTIVE
+ /* ACTIVE */
--i;
set_insert_key(so, ep->key, ep->hash);
}
@@ -350,8 +339,8 @@
return set_table_resize(so, so->used*(so->used>50000 ? 2 : 4));
}
-#define DISCARD_FOUND 0
-#define DISCARD_NOTFOUND 1
+#define DISCARD_NOTFOUND 0
+#define DISCARD_FOUND 1
static int
set_discard_internal(PySetObject *so, PyObject *key)
@@ -490,7 +479,7 @@
assert (PyAnySet_Check(so));
assert (PyAnySet_Check(b));
- other = (setobject*)b;
+ other = (PySetObject*)b;
if (other == so || other->used == 0)
/* a.update(a) or a.update({}); nothing to do */
return 0;
@@ -529,20 +518,19 @@
}
static PyTypeObject PySetIter_Type; /* Forward */
-static PyObject *set_iter(setobject *);
/* Set iterator types */
typedef struct {
PyObject_HEAD
- setobject *si_set; /* Set to NULL when iterator is exhausted */
+ PySetObject *si_set; /* Set to NULL when iterator is exhausted */
int si_used;
int si_pos;
long len;
} setiterobject;
static PyObject *
-set_iter(setobject *so)
+set_iter(PySetObject *so)
{
setiterobject *si = PyObject_New(setiterobject, &PySetIter_Type);
if (si == NULL)
@@ -580,7 +568,7 @@
PyObject *key;
register int i, mask;
register setentry *ep;
- setobject *d = si->si_set;
+ PySetObject *d = si->si_set;
if (d == NULL)
return NULL;
@@ -646,7 +634,7 @@
(iternextfunc)setiter_iternextkey, /* tp_iternext */
};
-/***** Derived functions (table accesses only done thru above primitives *****/
+/***** Derived functions (table accesses only done with above primitives *****/
#include "structmember.h"
@@ -739,10 +727,19 @@
frozenset_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
PyObject *iterable = NULL;
+ static PyObject *emptyfrozenset = NULL;
if (!PyArg_UnpackTuple(args, type->tp_name, 0, 1, &iterable))
return NULL;
- if (iterable != NULL && PyFrozenSet_CheckExact(iterable)) {
+ if (iterable == NULL) {
+ if (type == &PyFrozenSet_Type) {
+ if (emptyfrozenset == NULL)
+ emptyfrozenset = make_new_set(type, NULL);
+ else
+ Py_INCREF(emptyfrozenset);
+ return emptyfrozenset;
+ }
+ } else if (PyFrozenSet_CheckExact(iterable)) {
Py_INCREF(iterable);
return iterable;
}
@@ -800,9 +797,9 @@
set_swap_bodies(PySetObject *a, PySetObject *b)
{
int t;
- PySetEntry *u;
- PySetEntry *(*f)(PySetObject *so, PyObject *key, long hash);
- PySetEntry tab[PySet_MINSIZE];
+ setentry *u;
+ setentry *(*f)(PySetObject *so, PyObject *key, long hash);
+ setentry tab[PySet_MINSIZE];
long h;
t = a->fill; a->fill = b->fill; b->fill = t;
Index: setobject.h
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/set/setobject.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- setobject.h 30 Jul 2005 21:07:28 -0000 1.2
+++ setobject.h 30 Jul 2005 22:21:10 -0000 1.3
@@ -20,7 +20,7 @@
typedef struct {
long hash; /* cached hash code for the entry key */
PyObject *key;
-} PySetEntry;
+} setentry;
/*
@@ -45,9 +45,9 @@
* saves repeated runtime null-tests in the workhorse getitem and
* setitem calls.
*/
- PySetEntry *table;
- PySetEntry *(*lookup)(PySetObject *so, PyObject *key, long hash);
- PySetEntry smalltable[PySet_MINSIZE];
+ setentry *table;
+ setentry *(*lookup)(PySetObject *so, PyObject *key, long hash);
+ setentry smalltable[PySet_MINSIZE];
long hash; /* only used by frozenset objects */
PyObject *weakreflist; /* List of weak references */
- Previous message: [Python-checkins] python/nondist/sandbox/set setobject.c, 1.6, 1.7 setobject.h, 1.1, 1.2
- Next message: [Python-checkins] python/nondist/sandbox/mailbox mailbox.py, 1.1, 1.2 libmailbox.tex, 1.2, 1.3 test_mailbox.py, 1.1, 1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Python-checkins
mailing list