a7c376341a23dbf844bd764dddc323cc9742ccac
[mTask.git] / Utils / SDS.icl
1 implementation module Utils.SDS
2
3 import iTasks
4 import iTasks._Framework.Store
5 import Devices.mTaskDevice
6 import Shares.mTaskShare
7 import Tasks.Examples
8 import qualified Data.Map as DM
9 from Data.Func import $
10 import Data.Tuple
11
12 memoryShare :: String a -> Shared a | iTask a
13 memoryShare s d = sdsFocus s $ memoryStore s $ Just d
14
15 deviceStoreNP :: Shared [MTaskDevice]
16 deviceStoreNP = sdsFocus Nothing $ deviceStore
17
18 deviceStore :: RWShared (Maybe Int) [MTaskDevice] [MTaskDevice]
19 deviceStore = SDSSource {SDSSource
20 | name = "deviceStore"
21 , read = \_->read realDeviceStore
22 , write= \p w->appFst ((<$) (lens p)) o write w realDeviceStore
23 }
24
25 lens Nothing _ = True
26 lens _ Nothing = True
27 lens (Just p) (Just p`) = p` == -1 || p == p`
28
29 realDeviceStore :: Shared [MTaskDevice]
30 realDeviceStore = sharedStore "mTaskDevices" []
31
32 bcStateStore :: Shared BCState
33 bcStateStore = memoryShare "mTaskBCState" zero
34
35 mTaskTaskStore :: Shared [String]
36 mTaskTaskStore = memoryShare "mTaskTasks" $ 'DM'.keys allmTasks