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

Reply via email to