debian/control: Add Build-Depends for `dh-python'.
[mLib-python] / mapping.pyx
index 551261e..b044ed6 100644 (file)
@@ -1,29 +1,27 @@
-# -*-pyrex-*-
-#
-# $Id$
-#
-# Common mapping stuff
-#
-# (c) 2005 Straylight/Edgeware
-#
+### -*-pyrex-*-
+###
+### Common mapping stuff
+###
+### (c) 2005 Straylight/Edgeware
+###
 
-#----- Licensing notice -----------------------------------------------------
-#
-# This file is part of the Python interface to mLib.
-#
-# mLib/Python is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# mLib/Python is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with mLib/Python; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+###----- Licensing notice ---------------------------------------------------
+###
+### This file is part of the Python interface to mLib.
+###
+### mLib/Python is free software; you can redistribute it and/or modify
+### it under the terms of the GNU General Public License as published by
+### the Free Software Foundation; either version 2 of the License, or
+### (at your option) any later version.
+###
+### mLib/Python is distributed in the hope that it will be useful,
+### but WITHOUT ANY WARRANTY; without even the implied warranty of
+### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+### GNU General Public License for more details.
+###
+### You should have received a copy of the GNU General Public License
+### along with mLib/Python; if not, write to the Free Software Foundation,
+### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 cdef class Mapping
 
@@ -50,13 +48,14 @@ cdef class Mapping:
     raise SystemError, 'unimplemented _iter'
 
   ## Initialization
-  def __new__(me, *hunoz, **hukairz):
+  def __cinit__(me, *hunoz, **hukairz):
     me._init()
   def __init__(me, stuff = None, **kw):
     me.update(stuff, kw)
 
   ## Bulk update
   def update(me, stuff = None, **kw):
+    """D.update([MAP], **KW): insert mappings from MAP and KW"""
     cdef unsigned f
     if stuff is None:
       pass
@@ -91,12 +90,16 @@ cdef class Mapping:
       raise KeyError, key
     me._del(e)
   def get(me, key, default = None):
+    """D.get(KEY, [default = None]) -> VALUE: value at KEY, or DEFAULT"""
     cdef void *e
     e = me._find(key, NULL)
     if not e:
       return default
     return me._value(e)
   def setdefault(me, key, default = None):
+    """
+    D.setdefault(KEY, [default = None]) -> VALUE:
+      return value at key, or store DEFAULT at key and return that"""
     cdef void *e
     cdef unsigned f
     e = me._find(key, &f)
@@ -106,6 +109,9 @@ cdef class Mapping:
       me._setval(e, default)
       return default
   def pop(me, key, default = None):
+    """
+    D.pop(KEY, [default = None]) -> VALUE:
+      return value at key or DEFAULT, and remove KEY"""
     cdef void *e
     e = me._find(key, NULL)
     if not e:
@@ -114,6 +120,7 @@ cdef class Mapping:
     me._del(e)
     return rc
   def popitem(me):
+    """D.popitem() -> KEY, VALUE: return and remove an association pair"""
     cdef _MapIterator i
     cdef void *e
     i = me._iter()
@@ -136,13 +143,17 @@ cdef class Mapping:
     return l
 
   def keys(me):
+    """D.keys() -> LIST: return a list of known keys"""
     return me._list(_map_key)
   def values(me):
+    """D.values() -> LIST: return a list of known values"""
     return me._list(_map_value)
   def items(me):
+    """D.values() -> LIST: return a list of known (KEY, VALUE) pairs"""
     return me._list(_map_item)
 
   def clear(me):
+    """D.clear(): remove all mappings"""
     cdef _MapIterator i
     cdef void *e
     i = me._iter()
@@ -157,10 +168,13 @@ cdef class Mapping:
   def __iter__(me):
     return MapKeyIter(me)
   def iterkeys(me):
+    """D.iterkeys() -> ITER: return iterator over keys"""
     return MapKeyIter(me)
   def itervalues(me):
+    """D.itervalues() -> ITER: return iterator over values"""
     return MapValueIter(me)
   def iteritems(me):
+    """D.iteritems() -> ITER: return iterator over (KEY, VALUE) pairs"""
     return MapItemIter(me)
 
 cdef class MapIterBase:
@@ -169,7 +183,7 @@ cdef class MapIterBase:
   cdef _MapIterator i
   cdef int _init(me) except -1:
     raise TypeError, 'abstract class'
-  def __new__(me):
+  def __cinit__(me):
     me.i = m._iter()
     me._init()
   def __iter__(me):
@@ -200,4 +214,4 @@ cdef object _map_value(Mapping m, void *e):
 cdef object _map_item(Mapping m, void *e):
   return m._key(e), m._value(e)
 
-#----- That's all, folks ----------------------------------------------------
+###----- That's all, folks --------------------------------------------------