X-Git-Url: http://dolda2000.com/gitweb/?p=didex.git;a=blobdiff_plain;f=didex%2Findex.py;h=c2c55b6cfd3eec2921b588c0786052367bde69b9;hp=4906b46a2e7ec260c2dc2a96c85c8f2b7a3f9a77;hb=de73859d9c5ba731ad1aa13e36588b798f088656;hpb=177fbee6346cbe47e3ac689814fc34f8b75e186a diff --git a/didex/index.py b/didex/index.py index 4906b46..c2c55b6 100644 --- a/didex/index.py +++ b/didex/index.py @@ -2,7 +2,7 @@ import struct, contextlib, math from . import db, lib from .db import bd, txnfun, dloopfun -__all__ = ["maybe", "t_int", "t_uint", "t_float", "t_str", "ordered"] +__all__ = ["maybe", "t_int", "t_uint", "t_dbid", "t_float", "t_str", "t_casestr", "ordered"] deadlock = bd.DBLockDeadlockError notfound = bd.DBNotFoundError @@ -29,6 +29,14 @@ class simpletype(object): return cls(lambda ob: struct.pack(fmt, ob), lambda dat: struct.unpack(fmt, dat)[0]) +class foldtype(simpletype): + def __init__(self, encode, decode, fold): + super().__init__(encode, decode) + self.fold = fold + + def compare(self, a, b): + return super().compare(self.fold(a), self.fold(b)) + class maybe(object): def __init__(self, bk): self.bk = bk @@ -134,9 +142,12 @@ def floatcmp(a, b): t_int = simpletype.struct(">q") t_uint = simpletype.struct(">Q") +t_dbid = t_uint t_float = simpletype.struct(">d") t_float.compare = floatcmp t_str = simpletype((lambda ob: ob.encode("utf-8")), (lambda dat: dat.decode("utf-8"))) +t_casestr = foldtype((lambda ob: ob.encode("utf-8")), (lambda dat: dat.decode("utf-8")), + (lambda st: st.lower())) class index(object): def __init__(self, db, name, datatype):