X-Git-Url: http://dolda2000.com/gitweb/?p=didex.git;a=blobdiff_plain;f=didex%2Findex.py;h=4d4250663b4eb23c468fe04931b208befb781526;hp=a1ca06182a5c43ca322cc78d7350486cc66082db;hb=abb94f836b21e1fe76e83675dd09b4236a689a45;hpb=3e3af3c5618b91f6476b52ba790e778d2beaf0c0 diff --git a/didex/index.py b/didex/index.py index a1ca061..4d42506 100644 --- a/didex/index.py +++ b/didex/index.py @@ -1,4 +1,4 @@ -import struct, contextlib +import struct, contextlib, math from . import db, lib from .db import bd, txnfun @@ -47,7 +47,25 @@ class maybe(object): else: return self.bk.compare(a[1:], b[1:]) -t_int = simpletype.struct(">Q") +def floatcmp(a, b): + if math.isnan(a) and math.isnan(b): + return 0 + elif math.isnan(a): + return -1 + elif math.isnan(b): + return 1 + elif a < b: + return -1 + elif a > b: + return 1 + else: + return 0 + +t_int = simpletype.struct(">q") +t_uint = simpletype.struct(">Q") +t_float = simpletype.struct(">d") +t_float.compare = floatcmp +t_str = simpletype((lambda ob: ob.encode("utf-8")), (lambda dat: dat.decode("utf-8"))) class index(object): def __init__(self, db, name, datatype):