From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Pogonyshev Newsgroups: gmane.emacs.devel Subject: expose XHASH [patch] Date: Thu, 31 Mar 2016 21:29:58 +0200 Message-ID: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a113d6aaeaf7aa1052f5d4965 X-Trace: ger.gmane.org 1459452626 27570 80.91.229.3 (31 Mar 2016 19:30:26 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 31 Mar 2016 19:30:26 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Mar 31 21:30:15 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1aliIJ-0005yy-09 for ged-emacs-devel@m.gmane.org; Thu, 31 Mar 2016 21:30:15 +0200 Original-Received: from localhost ([::1]:34037 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aliII-0000le-Cp for ged-emacs-devel@m.gmane.org; Thu, 31 Mar 2016 15:30:14 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:42309) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aliI4-0000lQ-HG for emacs-devel@gnu.org; Thu, 31 Mar 2016 15:30:01 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aliI3-0005d3-7n for emacs-devel@gnu.org; Thu, 31 Mar 2016 15:30:00 -0400 Original-Received: from mail-oi0-x22b.google.com ([2607:f8b0:4003:c06::22b]:34760) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aliI3-0005cz-0n for emacs-devel@gnu.org; Thu, 31 Mar 2016 15:29:59 -0400 Original-Received: by mail-oi0-x22b.google.com with SMTP id o62so74437718oig.1 for ; Thu, 31 Mar 2016 12:29:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to; bh=gnuEdG4gpzty8054fXIIMYCg9aoNXLtW9+uSRB7ObJQ=; b=QEsyUuUqL0K+tQuWINaLmicN6omuNDEyeQoI4puudataabWzr8v8uwSHL6tHFkd89o jKsO4xr+phMRy0GJAr4zRvCQ3r+esA7pKtSZUdrRwq2DzGgdwFrYzN0zaAGibtowIk4t iIh1CSyJDNZezwhRZbAZcCpeUjAX2z9CdtnwjdyIPi5g57vY2UM9pKyawxSj3U0i+Y9d hOHCvN7tAc3eVDcu+vBhS0Ng4aMu76eVpkbT01ZoNXcfVgs7sq8AXMhe9I5xnQT1hDhl j/bbuKD7EJxFcepjdT0CRwe32AJKmm//Yet4AM5CFMhfnKg3oaWwDSqSZ3Hup0nwjdc4 U2bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to; bh=gnuEdG4gpzty8054fXIIMYCg9aoNXLtW9+uSRB7ObJQ=; b=QiXGaIH/UsuxUeat0ti1bNH+ie3/X1S/9mQQeACWeB818cN2XknAJ4fjV89yaAsPlu bAe9P9FxEJHUxk76t9yB2iXxVPKX/JsEtqITvzp507SpecMDOHBpzyqXBZyTEu/JsFSt mzd+FSdwRXEiB7fjFePeN1eRUswzNFk6pGiJrl3ZmgW0hndsDXkb8+fHZu58lrbZ921I ng2O7VJQAbg06ptWs7p1NJh0Y7b7Y+lnaQTFlImpvEFONseBzWRt+2sLmqGEXZXsR77E UaL6UyMFzX64WBKQsixioMW3FhNnx7xGPL8QnESnMN/k6OiQTfrjUcfpeNDcu+7mUM7C QaEw== X-Gm-Message-State: AD7BkJITUUEcnUJ8bE3MQ1/1kDDHASwIKQwKCqMmmUki88b9b7IDTioXNswuYRpxgf4lOgUR6gDt0RFPgGhESg== X-Received: by 10.157.24.91 with SMTP id t27mr416275ott.101.1459452598232; Thu, 31 Mar 2016 12:29:58 -0700 (PDT) Original-Received: by 10.202.197.148 with HTTP; Thu, 31 Mar 2016 12:29:58 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:4003:c06::22b X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:202526 Archived-At: --001a113d6aaeaf7aa1052f5d4965 Content-Type: text/plain; charset=UTF-8 Suppose you need a hash table with the following Lisp structures as keys: (NAME . [VECTOR-OF-ATTRIBUTES]) where NAME is a string. The structures are supposed to be compared in a "mixed" way: NAME with 'equal' (or 'string='), but VECTOR-OF-ATTRIBUTES should be compared with 'eq', i.e. by identity. Now, while defining test function for 'define-hash-table-test' is not a problem, hash is problematic. While 'sxhash' _will_ work, it is wasteful, since it computes needless information about vector contents. Excluding vector from the hash completely is also legal, but might considerably worsen hash table performance. Attached trivial patch just exposes internally used XHASH(), which fully suits this usecase. E.g. with it you could (defun my-funny-hash (structure) (+ (sxhash (car structure)) (* 13 (xhash (cdr structure))))) Please don't write that the example is stupid, it is just an example after all. Paul * src/fns.c (Fxhash): New function. * doc/lispref/hash.texi (Defining Hash): Document 'xhash'. * etc/NEWS: Mention 'xhash'. --001a113d6aaeaf7aa1052f5d4965 Content-Type: text/plain; charset=US-ASCII; name="xhash.diff" Content-Disposition: attachment; filename="xhash.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_imgodfth0 ZGlmZiAtLWdpdCBhL2RvYy9saXNwcmVmL2hhc2gudGV4aSBiL2RvYy9saXNwcmVmL2hhc2gudGV4 aQppbmRleCA4Mzg5YzIxLi42ZWUxOGQ2IDEwMDY0NAotLS0gYS9kb2MvbGlzcHJlZi9oYXNoLnRl eGkKKysrIGIvZG9jL2xpc3ByZWYvaGFzaC50ZXhpCkBAIC0zMDcsNiArMzA3LDE2IEBAIGFuZCBl cXVhbC1sb29raW5nIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgdGhlIHNhbWUga2V5LgogKG1ha2Ut aGFzaC10YWJsZSA6dGVzdCAnY29udGVudHMtaGFzaCkKIEBlbmQgZXhhbXBsZQogCitAZGVmdW4g eGhhc2ggb2JqCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNoIGNvZGUgZm9yIExpc3Agb2Jq ZWN0IEB2YXJ7b2JqfS4gIEl0cworcmVzdWx0IHJlZmxlY3RzIGlkZW50aXR5IG9mIEB2YXJ7b2Jq fSwgYnV0IG5vdCBpdHMgY29udGVudHMuCisKK0lmIHR3byBvYmplY3RzIEB2YXJ7b2JqMX0gYW5k IEB2YXJ7b2JqMn0gYXJlIEB2YXJ7ZXF9LCB0aGVuCitAY29kZXsoeGhhc2ggQHZhcntvYmoxfSl9 IGFuZCBAY29kZXsoeGhhc2ggQHZhcntvYmoyfSl9IGFyZSB0aGUgc2FtZQoraW50ZWdlci4KK0Bl bmQgZGVmdW4KKworCiBAbm9kZSBPdGhlciBIYXNoCiBAc2VjdGlvbiBPdGhlciBIYXNoIFRhYmxl IEZ1bmN0aW9ucwogCmRpZmYgLS1naXQgYS9ldGMvTkVXUyBiL2V0Yy9ORVdTCmluZGV4IDY2Nzc3 ZTkuLjE0NmM3NTYgMTAwNjQ0Ci0tLSBhL2V0Yy9ORVdTCisrKyBiL2V0Yy9ORVdTCkBAIC0yMDgs NiArMjA4LDEyIEBAIHBlcm1hbmVudCBhbmQgZG9jdW1lbnRlZCwgYW5kIG1heSBiZSB1c2VkIGJ5 IExpc3AgcHJvZ3JhbXMuICBJdHMgdmFsdWUKIGlzIGEgbGlzdCBvZiBjdXJyZW50bHkgb3BlbiBw YXJlbnRoZXNpcyBwb3NpdGlvbnMsIHN0YXJ0aW5nIHdpdGggdGhlCiBvdXRlcm1vc3QgcGFyZW50 aGVzaXMuCiAKKysrKworKiogTmV3IGZ1bmN0aW9uICd4aGFzaCcgcmV0dXJucyBpZGVudGl0eSBo YXNoIGNvZGUgb2YgYSBMaXNwIG9iamVjdC4KK0lmIHR3byBvYmplY3RzIGFyZSAnZXEnLCB0aGVu IHRoZSByZXN1bHQgb2YgJ3hoYXNoJyBvbiB0aGVtIHdpbGwgYmUKK3RoZSBzYW1lLiAgSW4gb3Ro ZXIgd29yZHMsIHRoaXMgZnVuY3Rpb24gdG8gJ2VxJyBpcyB0aGUgc2FtZSBhcworJ3N4aGFzaCcg aXMgdG8gJ2VxdWFsJy4KKwogDAogKiBDaGFuZ2VzIGluIEVtYWNzIDI1LjIgb24gTm9uLUZyZWUg T3BlcmF0aW5nIFN5c3RlbXMKIApkaWZmIC0tZ2l0IGEvc3JjL2Zucy5jIGIvc3JjL2Zucy5jCmlu ZGV4IDExNGE1NTYuLmExY2YyYjEgMTAwNjQ0Ci0tLSBhL3NyYy9mbnMuYworKysgYi9zcmMvZm5z LmMKQEAgLTQ0NDksNiArNDQ0OSwxNiBAQCBzeGhhc2ggKExpc3BfT2JqZWN0IG9iaiwgaW50IGRl cHRoKQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwogCiAKK0RFRlVOICgieGhhc2giLCBGeGhhc2gsIFN4aGFz aCwgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8qIENvbXB1dGUgaWRlbnRpdHkgaGFzaCBjb2RlIGZv ciBPQkogYW5kIHJldHVybiBpdCBhcyBpbnRlZ2VyLgorSW4gb3RoZXIgd29yZHMsIGhhc2ggY29k ZXMgb2YgdHdvIG5vbi1gZXEnIGxpc3RzIHdpbGwgYmUgKG1vc3QgbGlrZWx5KQorZGlmZmVyZW50 LCBldmVuIGlmIHRoZSBsaXN0cyBjb250YWluIHRoZSBzYW1lIGVsZW1lbnRzLiAqLykKKyAgKExp c3BfT2JqZWN0IG9iaikKK3sKKyAgcmV0dXJuIG1ha2VfbnVtYmVyIChYSEFTSCAob2JqKSk7Cit9 CisKKwogREVGVU4gKCJzeGhhc2giLCBGc3hoYXNoLCBTc3hoYXNoLCAxLCAxLCAwLAogICAgICAg IGRvYzogLyogQ29tcHV0ZSBhIGhhc2ggY29kZSBmb3IgT0JKIGFuZCByZXR1cm4gaXQgYXMgaW50 ZWdlci4gICovKQogICAoTGlzcF9PYmplY3Qgb2JqKQpAQCAtNTA2Nyw2ICs1MDc3LDcgQEAgc3lt c19vZl9mbnMgKHZvaWQpCiAgIERFRlNZTSAoUWtleV9vcl92YWx1ZSwgImtleS1vci12YWx1ZSIp OwogICBERUZTWU0gKFFrZXlfYW5kX3ZhbHVlLCAia2V5LWFuZC12YWx1ZSIpOwogCisgIGRlZnN1 YnIgKCZTeGhhc2gpOwogICBkZWZzdWJyICgmU3N4aGFzaCk7CiAgIGRlZnN1YnIgKCZTbWFrZV9o YXNoX3RhYmxlKTsKICAgZGVmc3ViciAoJlNjb3B5X2hhc2hfdGFibGUpOwo= --001a113d6aaeaf7aa1052f5d4965--