Skip to content

Commit a7f7745

Browse files
Make pad a function instead of an effect
1 parent a70dd90 commit a7f7745

File tree

1 file changed

+8
-12
lines changed

1 file changed

+8
-12
lines changed

libraries/common/binstream.effekt

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -152,32 +152,28 @@ def x{ body: => Unit / { literal, HexSplices } }: Int = {
152152
// --------------------
153153
// TODO could also be part of stream library
154154

155-
/// Request padding to a multiple of fac, by calling gen for each
156-
effect pad[A](fac: Int){ gen: => A }: Unit
157-
158155
/// get current position in stream
159156
effect getPos(): Int
160157

161158
/// Track position in stream, starting with init
162159
/// Handles getPos and pad
163-
def tracking[A](init: Int){ body: => Unit / { emit[A], getPos, pad[A] } }: Unit / emit[A] = {
160+
def tracking[A](init: Int){ body: => Unit / { emit[A], getPos } }: Unit / emit[A] = {
164161
var n = init
165162
try body()
166163
with emit[A] { b => n = n + 1; resume(do emit[A](b)) }
167164
with getPos{ resume(n) }
168-
with pad[A] { fac =>
169-
resume { {gen} =>
170-
while(mod(n, fac) != 0){
171-
do emit[A](gen())
172-
n = n + 1
173-
}
174-
}
165+
}
166+
167+
/// Pad to a multiple of fac, by calling gen for each
168+
def pad[A](fac: Int){ gen: => A }: Unit / {getPos, emit[A]} = {
169+
while(mod(do getPos(), fac) != 0) {
170+
do emit[A](gen())
175171
}
176172
}
177173

178174
/// Track how many bytes were emitted
179175
/// Handles getPos and pad
180-
def tracking[A]{ body: => Unit / { emit[A], getPos, pad[A] } }: Unit / emit[A] =
176+
def tracking[A]{ body: => Unit / { emit[A], getPos } }: Unit / emit[A] =
181177
tracking[A](0){body}
182178

183179
// Sub-Byte

0 commit comments

Comments
 (0)