Hi all,
in these days I'm completing the implementation of
ootypesystem/rlist.py, but I've found that often I have to write code
very similar to those in lltypesystem/rlist.py.
Let's explain by an example; consider the ll_listindex function in both
files:
# lltypesystem
def ll_listindex(lst, obj, eqfn):
items = lst.ll_items()
lng = lst.ll_length()
j = 0
while j < lng:
if eqfn is None:
if items[j] == obj:
return j
else:
if eqfn(items[j], obj):
return j
j += 1
raise ValueError # can't say 'list.index(x): x not in list'
# ootypesystem
def ll_listindex(lst, obj, eqfn):
lng = lst.length()
j = 0
while j < lng:
if eqfn is None:
if lst.getitem_nonneg(j) == obj:
return j
else:
if eqfn(lst.getitem_nonneg(j), obj):
return j
j += 1
raise ValueError # can't say 'list.index(x): x not in list'
As you can see they are quite similar, but I can't find an elegant way
to merge them. There are two problems:
1) the names of some methods don't match (e.g., ll_length vs. length
2) the setitem/getitem interface is very different
The first problem is easy to solve; it should be sufficient to rename
the methods in ootype.List._GENERIC_METHODS.
The same isn't true for the second problem; one possibility could be to
pass some dummy placeholder as argument in the same style of
dum_checkidx/dum_nocheck, but I guess the code will became a nightmare.
Another solution could be to add an extra level of indirection but I
guess this could bring to some efficiency penalty.
Any idea?
ciao Anto
_______________________________________________
[email protected]
http://codespeak.net/mailman/listinfo/pypy-dev