From f79d7088766b99421c56d85244bccdfd94f8670f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Tue, 10 Feb 2026 12:07:59 +0100 Subject: Cache storage --- src/Storage/WatchList.hs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/Storage/WatchList.hs (limited to 'src/Storage/WatchList.hs') diff --git a/src/Storage/WatchList.hs b/src/Storage/WatchList.hs new file mode 100644 index 0000000..11ca3e1 --- /dev/null +++ b/src/Storage/WatchList.hs @@ -0,0 +1,37 @@ +module Storage.WatchList ( + WatchList(..), + WatchListItem(..), + watchListAdd, + watchListDel, +) where + +import Erebos.Object +import Erebos.Storage.Backend +import Erebos.Storage.Head + + +data WatchList = WatchList + { wlNext :: WatchID + , wlList :: [ WatchListItem ] + } + +data WatchListItem = WatchListItem + { wlID :: WatchID + , wlHead :: ( HeadTypeID, HeadID ) + , wlFun :: RefDigest -> IO () + } + +watchListAdd :: HeadTypeID -> HeadID -> (RefDigest -> IO ()) -> WatchList -> ( WatchList, WatchID ) +watchListAdd tid hid cb wl = ( wl', wlNext wl ) + where + wl' = wl + { wlNext = nextWatchID (wlNext wl) + , wlList = WatchListItem + { wlID = wlNext wl + , wlHead = (tid, hid) + , wlFun = cb + } : wlList wl + } + +watchListDel :: WatchID -> WatchList -> WatchList +watchListDel wid wl = wl { wlList = filter ((/= wid) . wlID) $ wlList wl } -- cgit v1.2.3