File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1- {:deps {org.clojars.tiensonqin/persistent-sorted-set {:mvn/version " 0.0.4 " }}
1+ {:deps {org.clojars.tiensonqin/persistent-sorted-set {:mvn/version " 0.0.5 " }}
22
33 :aliases {:1.9 {:override-deps {org.clojure/clojure {:mvn/version " 1.9.0" }}}
44
Original file line number Diff line number Diff line change 1919 " Read back and deserialize data stored under single `addr`" ))
2020
2121(def ^:private ^:dynamic *store-buffer*)
22+ ; ; unused addresses
2223(def ^:private *delete-buffer (atom {}))
24+ ; ; kept addresses
25+ (def ^:private *kept-buffer (atom {}))
2326
2427(defn serializable-datom [^Datom d]
2528 [(.-e d) (.-a d) (.-v d) (.-tx d)])
6568 ; ; TODO:
6669 nil )
6770
68- (delete [_ addr]
69- (swap! *delete-buffer update storage conj addr)))
71+ (delete [_ unused-addresses kept-addresses]
72+ (swap! *delete-buffer update storage
73+ (fn [buffer]
74+ (concat buffer (remove nil? unused-addresses))))
75+ (swap! *kept-buffer update storage
76+ (fn [buffer]
77+ (concat buffer (remove nil? kept-addresses))))))
7078
7179(defn make-storage-adapter [storage _opts]
7280 (StorageAdapter. storage))
114122 (vswap! *store-buffer* conj! [root-addr meta])
115123 (vswap! *store-buffer* conj! [tail-addr []])
116124 (let [storage (:storage adapter)
117- delete-addrs (get @*delete-buffer storage)
118- _ (swap! *delete-buffer assoc storage nil )]
125+ kept-addrs (set (get @*kept-buffer storage))
126+ delete-addrs (->> (get @*delete-buffer storage)
127+ (remove kept-addrs))
128+ _ (swap! *delete-buffer assoc storage nil )
129+ _ (swap! *kept-buffer assoc storage nil )]
119130 (-store storage (persistent! @*store-buffer*) delete-addrs)))
120131 db))))
121132
You can’t perform that action at this time.
0 commit comments