chiark / gitweb /
Update for Python 2.7. This is release 1.0.3.
[mLib-python] / unihash.pyx
CommitLineData
20bce5e9 1# -*-pyrex-*-
2#
3# $Id$
4#
5# Universal hashing interface
6#
7# (c) 2005 Straylight/Edgeware
8#
9
10#----- Licensing notice -----------------------------------------------------
11#
12# This file is part of the Python interface to mLib.
13#
14# mLib/Python is free software; you can redistribute it and/or modify
15# it under the terms of the GNU General Public License as published by
16# the Free Software Foundation; either version 2 of the License, or
17# (at your option) any later version.
d8d81d1b 18#
20bce5e9 19# mLib/Python is distributed in the hope that it will be useful,
20# but WITHOUT ANY WARRANTY; without even the implied warranty of
21# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22# GNU General Public License for more details.
d8d81d1b 23#
20bce5e9 24# You should have received a copy of the GNU General Public License
25# along with mLib/Python; if not, write to the Free Software Foundation,
26# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27
20bce5e9 28def setglobalkey(uint32 k):
29 unihash_setkey(&unihash_global, k)
30
31cdef class Key:
32 cdef unihash_info _i
33 cdef uint32 _k
376ad06d 34 def __cinit__(me, uint32 k):
20bce5e9 35 unihash_setkey(&me._i, k)
36 me._k = k
37 property k:
38 def __get__(me):
39 return _u32(me._k)
40
41cdef class Unihash:
42 cdef uint32 _a
43 cdef readonly Key key
44 cdef unihash_info *_i
376ad06d 45 def __cinit__(me, key = None):
20bce5e9 46 cdef Key k
47 me.key = key
48 if key is None:
49 me._i = &unihash_global
50 else:
51 k = key
52 me._i = &k._i
53 me._a = UNIHASH_INIT(me._i)
54 def chunk(me, data):
55 cdef void *p
56 cdef int n
57 PyObject_AsReadBuffer(data, &p, &n)
58 me._a = unihash_hash(me._i, me._a, p, n)
59 def done(me):
60 return _u32(me._a)
61
62#----- That's all, folks ----------------------------------------------------