Skip to content

Commit c36a1dc

Browse files
Sh099078Khoyo
andcommitted
core: convert EnvelopeBuilder to kotin
Co-authored-by: Younes Khoudli <younes.khoudli@epita.fr> Signed-off-by: Loup Federico <16464925+Sh099078@users.noreply.github.com>
1 parent ad23347 commit c36a1dc

File tree

2 files changed

+51
-50
lines changed

2 files changed

+51
-50
lines changed

core/envelope-sim/src/main/java/fr/sncf/osrd/envelope/EnvelopeBuilder.java

Lines changed: 0 additions & 50 deletions
This file was deleted.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package fr.sncf.osrd.envelope
2+
3+
import fr.sncf.osrd.envelope.part.EnvelopePart
4+
5+
/** Creates an envelope by concatenating envelope parts. Envelope parts must not overlap. */
6+
class EnvelopeBuilder {
7+
private var parts: MutableList<EnvelopePart>? = mutableListOf()
8+
9+
/** Adds a part to the envelope */
10+
fun addPart(part: EnvelopePart) {
11+
checkNotNull(parts) { "build() was already called" }
12+
parts!!.add(part)
13+
}
14+
15+
/** Adds a list of parts */
16+
fun addParts(parts: Array<EnvelopePart>) {
17+
for (part in parts) addPart(part)
18+
}
19+
20+
/** Adds all parts of an envelope */
21+
fun addEnvelope(envelope: Envelope) {
22+
for (part in envelope) addPart(part)
23+
}
24+
25+
/** Reverses the order of the parts */
26+
fun reverse() {
27+
checkNotNull(parts) { "build() was already called" }
28+
for (i in 0..<parts!!.size / 2) {
29+
val tmp = parts!![i]
30+
parts!![i] = parts!![parts!!.size - i - 1]
31+
parts!![parts!!.size - i - 1] = tmp
32+
}
33+
}
34+
35+
/** Creates a new Envelope */
36+
fun build(): Envelope {
37+
checkNotNull(parts) { "build() was already called" }
38+
val envelope = Envelope.make(*parts!!.toTypedArray())
39+
parts = null
40+
return envelope
41+
}
42+
43+
companion object {
44+
/** Concatenates multiple envelopes together */
45+
fun concatenate(vararg envelopes: Envelope): Envelope {
46+
val res = EnvelopeBuilder()
47+
for (envelope in envelopes) res.addEnvelope(envelope)
48+
return res.build()
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)