def write_words.loop

mylsm-lsm-store@0.6.0.1 · src/Fs.bend:116

import mylsm-lsm-store@0.6.0.1/src/Fs.bend as Fs
import Base
import mylsm-lsm-store@0.6.0.1/src/FilesCompat.bend as PackedFiles

116def write_words.loop(
117  fuel: Nat,
118  state: WriteWordsState
119) ->
120  IO(File & Result<&1, &1, U32 & String, Unit>):
121  match fuel:
122    case 0n:
123      match state:
124        case WriteWordsNeed{file, _, _, _, empty}:
125          match empty:
126            case True{}:
127              IO.pure(File & Result<&1, &1, U32 & String, Unit>,
128                (file, Done{Unit{}}))
129            case False{}:
130              IO.pure(File & Result<&1, &1, U32 & String, Unit>,
131                (file, Fail{(7, "write ran out of bounded progress steps")}))
132        case WriteWordsFailed{file, error}:
133          IO.pure(File & Result<&1, &1, U32 & String, Unit>,
134            (file, Fail{error}))
135        case WriteWordsNoProgress{file}:
136          IO.pure(File & Result<&1, &1, U32 & String, Unit>,
137            (file, Fail{(5, "write made no progress")}))
138    case 1n+rest:
139      match state:
140        case WriteWordsNeed{file, (for_write_offset, for_read_offset),
141            (for_write, for_read), words, empty}:
142          match empty:
143            case True{}:
144              IO.pure(File & Result<&1, &1, U32 & String, Unit>,
145                (file, Done{Unit{}}))
146            case False{}:
147              do IO<File & Result<&1, &1, U32 & String, Unit>>:
148                pair : File & Result<&1, &1, U32 & String, U32 & Array<U32>> <-
149                  PackedFiles.write.words.once(file, for_write_offset,
150                    U32.min(65536, for_write), words)
151                write_words.loop(rest,
152                  write_words.after(pair, for_read_offset, for_read))
153        case WriteWordsFailed{file, error}:
154          IO.pure(File & Result<&1, &1, U32 & String, Unit>,
155            (file, Fail{error}))
156        case WriteWordsNoProgress{file}:
157          IO.pure(File & Result<&1, &1, U32 & String, Unit>,
158            (file, Fail{(5, "write made no progress")}))

Uses (17)

Used by (1)