Add initial support for SEQUENCE integration.
[trees.git] / types.lisp
index d2235d1..83f9821 100644 (file)
 \f
 ;;; trees
 
+#+sbcl
+(defclass binary-tree (sequence standard-object)
+  ((test :initform #1=(error "missing arg")
+         :initarg :test
+         :type 'function
+         :reader test)
+   (key :initform #1#
+        :initarg :key
+        :type 'function
+        :reader key)
+   (pred :initform #1#
+         :initarg :pred
+         :type 'function
+         :reader pred)
+   (size :initform 0
+         :initarg :size
+         :type 'fixnum
+         :accessor size)
+   (root :initform nil
+         :initarg :root
+         :type '(or null tree-node)
+         :accessor root)
+   (modcount :initform 0
+             :initarg :modcount
+             :type 'fixnum
+             :accessor modcount)
+   (nodegen :initform #1#
+            :initarg :nodegen
+            :type 'function
+            :reader nodegen)
+   (rebalance/insert :initform nil
+                     :initarg :rebalance/insert
+                     :type '(or null function)
+                     :reader rebalance/insert)
+   (rebalance/delete :initform nil
+                     :initarg :rebalance/delete
+                     :type '(or null function)
+                     :reader rebalance/delete)))
+
+#+sbcl
+(defun %make-binary-tree (pred key test nodegen rebalance/insert rebalance/delete)
+  (make-instance 'binary-tree :pred pred :key key :test test :nodegen nodegen
+                              :rebalance/insert rebalance/insert
+                              :rebalance/delete rebalance/delete))
+
+#-sbcl
 (defstruct (binary-tree
              (:conc-name)
              (:constructor %make-binary-tree (pred key test