- _eset(e, default)
- return default
- def pop(me, key, default = None):
- cdef entry *e
- e = _find(&me._t, key, NULL)
- if not e:
- return default
- rc = _eget(e)
- _edel(&me._t, e)
- return rc
- def popitem(me):
- cdef entry *e
- cdef sym_iter i
- sym_mkiter(&i, &me._t)
- e = <entry *>sym_next(&i)
- if not e:
- raise ValueError, 'popitem(): table is empty'
- return _key(e), _eget(e)
- def keys(me):
- cdef sym_iter i
- cdef entry *e
- l = []
- sym_mkiter(&i, &me._t)
- while 1:
- e = <entry *>sym_next(&i)
- if not e:
- break
- l.append(_key(e))
- return l
- def values(me):
- cdef sym_iter i
- cdef entry *e
- l = []
- sym_mkiter(&i, &me._t)
- while 1:
- e = <entry *>sym_next(&i)
- if not e:
- break
- l.append(_eget(e))
- return l
- def items(me):
- cdef sym_iter i
- cdef entry *e
- l = []
- sym_mkiter(&i, &me._t)
- while 1:
- e = <entry *>sym_next(&i)
- if not e:
- break
- l.append((_key(e), _eget(e)))
- return l
- def clear(me):
- cdef sym_iter i
- cdef entry *e
- sym_mkiter(&i, &me._t)
- while 1:
- e = <entry *>sym_next(&i)
- if not e:
- break
- _edel(&me._t, e)
- return me
- def __dealloc__(me):
- cdef sym_iter i
- cdef entry *e
- sym_mkiter(&i, &me._t)
- while 1:
- e = <entry *>sym_next(&i)
- if not e:
- break
- _edel(&me._t, e)
- sym_destroy(&me._t)
- def iterkeys(me):
- return KeyIter(me)
- def __iter__(me):
- return KeyIter(me)
- def itervalues(me):
- return ValueIter(me)
- def iteritems(me):
- return ItemIter(me)
- def update(me, stuff = None, **kw):
- cdef unsigned f
- if stuff is None:
- pass
- elif hasattr(stuff, 'itemiter'):
- for k, v in stuff.itemiter:
- _eset(_find(&me._t, k, &f), v)
- elif hasattr(stuff, 'keys'):
- for k in stuff.keys():
- _eset(_find(&me._t, k, &f), stuff[k])
- else:
- for k, v in stuff:
- _eset(_find(&me._t, k, &f), v)
- for k, v in kw.iteritems():
- _eset(_find(&me._t, k, &f), v)
- return me
-
-cdef class KeyIter:
- cdef Table _t
- cdef sym_iter _i
- def __new__(me, Table t):
- me._t = t
- sym_mkiter(&me._i, &t._t)
- def __iter__(me):
- return me
- def __next__(me):
- cdef entry *e
- e = <entry *>sym_next(&me._i)
- if not e:
- raise StopIteration
- return _key(e)
-
-cdef class ValueIter:
- cdef Table _t
- cdef sym_iter _i
- def __new__(me, Table t):
- me._t = t
- sym_mkiter(&me._i, &t._t)
- def __iter__(me):
- return me
- def __next__(me):
- cdef entry *e
- e = <entry *>sym_next(&me._i)
- if not e:
- raise StopIteration
- return _eget(e)
+ e = <_sym_entry *>sym_find(&me._t, <char *>p, n, 0, NULL)
+ return <void *>e
+ cdef object _key(me, void *e):
+ return PyString_FromStringAndSize(SYM_NAME(e), SYM_LEN(e))
+ cdef object _value(me, void *e):
+ cdef _sym_entry *ee
+ ee = <_sym_entry *>e
+ Py_INCREF(ee.v)
+ return <object>ee.v
+ cdef void _setval(me, void *e, object val):
+ cdef _sym_entry *ee
+ ee = <_sym_entry *>e
+ if ee.v:
+ Py_DECREF(ee.v)
+ ee.v = <PyObject *>v
+ Py_INCREF(ee.v)
+ cdef void _del(me, void *e):
+ cdef _sym_entry *ee
+ ee = <_sym_entry *>e
+ if ee.v:
+ Py_DECREF(ee.v)
+ sym_remove(&me._t, <void *>ee)
+ cdef _MapIterator _iter(me):
+ return _SymIter(me)