From 2fd7a07fe0870ca62664f954610a6120228a9f34 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Fri, 18 Jul 2014 20:43:02 -0700 Subject: [PATCH] Add gen:equal+hash to treaps --- minimart/treap.rkt | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/minimart/treap.rkt b/minimart/treap.rkt index 8e1bdf3..687ef7f 100644 --- a/minimart/treap.rkt +++ b/minimart/treap.rkt @@ -27,7 +27,31 @@ (require "canonicalize.rkt") ;; (define canonicalize values) -(struct N (key value priority left right) #:transparent) +(struct N (key value priority left right) #:transparent + #:methods gen:equal+hash + [(define (equal-proc a b =?) + (match-define (N ak av ap al ar) a) + (match-define (N bk bv bp bl br) b) + (and (eq? al bl) + (eq? ar br) + (= ap bp) + (=? ak bk) + (=? av bv))) + (define (hash-proc a h) + (match-define (N ak av ap al ar) a) + (+ (eq-hash-code al) + (eq-hash-code ar) + (h ap) + (h ak) + (h av))) + (define (hash2-proc a h) + (match-define (N ak av ap al ar) a) + (bitwise-xor (eq-hash-code al) + (eq-hash-code ar) + (h ap) + (h ak) + (h av)))]) + (struct L () #:transparent) (struct treap (order root size) #:transparent)