added disk scheduling diagrams
This commit is contained in:
58
disk-scheduling/utils.typ
Normal file
58
disk-scheduling/utils.typ
Normal file
@@ -0,0 +1,58 @@
|
||||
#import "@preview/cetz:0.3.1": canvas, draw
|
||||
|
||||
#let draw-algo(places, min: 0, max: 199, width: 10) = canvas({
|
||||
let m = min
|
||||
let M = max
|
||||
let s = M - m
|
||||
let w = width / s
|
||||
|
||||
draw.line((0, 0), (width, 0))
|
||||
let draw-tick(v) = {
|
||||
draw.line((v*w, 0), (v*w, 0.2))
|
||||
draw.content(
|
||||
(v*w, 0.2),
|
||||
str(v),
|
||||
anchor: "south",
|
||||
padding: 3pt
|
||||
)
|
||||
}
|
||||
|
||||
let drawn = (m, M)
|
||||
draw-tick(m)
|
||||
draw-tick(M)
|
||||
|
||||
let pos = ()
|
||||
for (i, place) in places.enumerate() {
|
||||
if place not in drawn {
|
||||
draw-tick(place)
|
||||
drawn.push(place)
|
||||
}
|
||||
|
||||
let p = (place * w, -i * 0.5)
|
||||
if pos.len() != 0 {
|
||||
draw.line(pos.last(), p, mark: (end: "straight"))
|
||||
}
|
||||
pos.push(p)
|
||||
}
|
||||
|
||||
let bottom-y = -(places.len() - 1) * 0.5
|
||||
draw.line((m*w, 0), (m*w, bottom-y))
|
||||
draw.line((M*w, 0), (M*w, bottom-y))
|
||||
})
|
||||
|
||||
#let compute-total(places, wrap: false, min: 0, max: 199) = {
|
||||
let total = 0
|
||||
for i in range(places.len() - 1) {
|
||||
let p0 = places.at(i)
|
||||
let p1 = places.at(i + 1)
|
||||
let d = calc.abs(p0 - p1)
|
||||
if wrap {
|
||||
if p1 < p0 {
|
||||
d = (max - p0) + (p1 - min)
|
||||
// d = 0
|
||||
}
|
||||
}
|
||||
total += d
|
||||
}
|
||||
return total
|
||||
}
|
||||
Reference in New Issue
Block a user