Last active
November 23, 2025 15:44
-
-
Save bishabosha/5f693912173a371c1e561861506f876b to your computer and use it in GitHub Desktop.
Benchmark varargs builder changes in scala 3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //> using jmh | |
| //> using scala 3.7.4 | |
| package bench | |
| import org.openjdk.jmh.annotations.BenchmarkMode | |
| import org.openjdk.jmh.annotations.OutputTimeUnit | |
| import org.openjdk.jmh.annotations.Mode | |
| import org.openjdk.jmh.annotations.Warmup | |
| import org.openjdk.jmh.annotations.Measurement | |
| import org.openjdk.jmh.annotations.Fork | |
| import org.openjdk.jmh.annotations.Benchmark | |
| import java.util.concurrent.TimeUnit | |
| @BenchmarkMode(Array(Mode.AverageTime)) | |
| @OutputTimeUnit(TimeUnit.NANOSECONDS) | |
| @Warmup(iterations = 20, time = 10, timeUnit = TimeUnit.MILLISECONDS) | |
| @Measurement(iterations = 15, time = 10, timeUnit = TimeUnit.MILLISECONDS) | |
| @Fork(0) | |
| class Benchmarks { | |
| @Benchmark | |
| def oldVarArgs(): (Seq[Int], Seq[Int]) = { | |
| var i = 0 | |
| var seq: Seq[Int] = Seq.empty | |
| var seq2: Seq[Int] = Seq.empty | |
| while i < 10_000_000 do | |
| i += 1 | |
| seq = runtimeStrawman.VarArgsBuilder.ofInt(100) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .result() | |
| seq2 = runtimeStrawman.VarArgsBuilder.ofInt(100) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .result() | |
| end while | |
| (seq, seq2) | |
| } | |
| @Benchmark | |
| def newVarArgs(): (Seq[Int], Seq[Int]) = { | |
| var i = 0 | |
| var seq: Seq[Int] = Seq.empty | |
| var seq2: Seq[Int] = Seq.empty | |
| while i < 10_000_000 do | |
| i += 1 | |
| seq = (new runtimeStrawman.VarArgsBuilder2.ofInt(100)) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .result() | |
| seq2 = (new runtimeStrawman.VarArgsBuilder2.ofInt(100)) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .result() | |
| end while | |
| (seq, seq2) | |
| } | |
| @Benchmark | |
| def noVirtualVarargsArgs(): (Seq[Int], Seq[Int]) = { | |
| var i = 0 | |
| var seq: Seq[Int] = Seq.empty | |
| var seq2: Seq[Int] = Seq.empty | |
| while i < 10_000_000 do | |
| i += 1 | |
| seq = (new runtimeStrawman.VarArgsBuilder3.ofInt(100)) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .result() | |
| seq2 = (new runtimeStrawman.VarArgsBuilder3.ofInt(100)) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .add(10001) | |
| .add(10002) | |
| .add(10003) | |
| .add(10004) | |
| .add(10005) | |
| .add(10006) | |
| .add(10007) | |
| .add(10008) | |
| .add(10009) | |
| .add(10010) | |
| .add(10011) | |
| .add(10012) | |
| .add(10013) | |
| .add(10014) | |
| .add(10015) | |
| .add(10016) | |
| .add(10017) | |
| .add(10018) | |
| .add(10019) | |
| .add(10020) | |
| .add(10021) | |
| .add(10022) | |
| .add(10023) | |
| .add(10024) | |
| .add(10025) | |
| .result() | |
| end while | |
| (seq, seq2) | |
| } | |
| @Benchmark | |
| def controlOld(): (Seq[String], Seq[Object]) = { | |
| var i = 0 | |
| var seq: Seq[String] = Seq.empty | |
| var seq2: Seq[Object] = Seq.empty | |
| while i < 10_000_000 do | |
| i += 1 | |
| seq = (runtimeStrawman.VarArgsBuilder.ofRef[String](100)) | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .result() | |
| seq2 = (runtimeStrawman.VarArgsBuilder.generic[Object](100)) | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .result() | |
| end while | |
| (seq, seq2) | |
| } | |
| @Benchmark | |
| def controlNew(): (Seq[String], Seq[Object]) = { | |
| var i = 0 | |
| var seq: Seq[String] = Seq.empty | |
| var seq2: Seq[Object] = Seq.empty | |
| while i < 10_000_000 do | |
| i += 1 | |
| seq = (new runtimeStrawman.VarArgsBuilder2.ofRef[String](100)) | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .result() | |
| seq2 = (new runtimeStrawman.VarArgsBuilder2.generic[Object](100)) | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .result() | |
| end while | |
| (seq, seq2) | |
| } | |
| @Benchmark | |
| def controlNoVirtual(): (Seq[String], Seq[Object]) = { | |
| var i = 0 | |
| var seq: Seq[String] = Seq.empty | |
| var seq2: Seq[Object] = Seq.empty | |
| while i < 10_000_000 do | |
| i += 1 | |
| seq = (new runtimeStrawman.VarArgsBuilder3.ofRef[String](100)) | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .result() | |
| seq2 = (new runtimeStrawman.VarArgsBuilder3.generic[Object](100)) | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .add("10001") | |
| .add("10002") | |
| .add("10003") | |
| .add("10004") | |
| .add("10005") | |
| .add("10006") | |
| .add("10007") | |
| .add("10008") | |
| .add("10009") | |
| .add("10010") | |
| .add("10011") | |
| .add("10012") | |
| .add("10013") | |
| .add("10014") | |
| .add("10015") | |
| .add("10016") | |
| .add("10017") | |
| .add("10018") | |
| .add("10019") | |
| .add("10020") | |
| .add("10021") | |
| .add("10022") | |
| .add("10023") | |
| .add("10024") | |
| .add("10025") | |
| .result() | |
| end while | |
| (seq, seq2) | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package runtimeStrawman | |
| import scala.collection.immutable.ArraySeq | |
| import scala.reflect.ClassTag | |
| sealed abstract class VarArgsBuilder[T]: | |
| def add(elem: T): this.type | |
| def addSeq(elems: Seq[T]): this.type | |
| def addArray(elems: Array[T]): this.type | |
| def result(): Seq[T] | |
| object VarArgsBuilder: | |
| def generic[T](n: Int): VarArgsBuilder[T] = new VarArgsBuilder[T]: | |
| private val xs = new Array[AnyRef](n) | |
| def result() = ArraySeq.ofRef(xs).asInstanceOf[ArraySeq[T]] | |
| private var i = 0 | |
| def add(elem: T): this.type = | |
| xs(i) = elem.asInstanceOf[AnyRef] | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem.asInstanceOf[AnyRef] | |
| i += 1 | |
| this | |
| def addArray(elems: Array[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem.asInstanceOf[AnyRef] | |
| i += 1 | |
| this | |
| def ofRef[T <: AnyRef](n: Int): VarArgsBuilder[T] = new VarArgsBuilder[T]: | |
| private val xs = new Array[AnyRef](n) | |
| def result() = ArraySeq.ofRef(xs).asInstanceOf[ArraySeq[T]] | |
| private var i = 0 | |
| def add(elem: T): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def ofByte(n: Int): VarArgsBuilder[Byte] = new VarArgsBuilder[Byte]: | |
| private val xs = new Array[Byte](n) | |
| def result() = ArraySeq.ofByte(xs) | |
| private var i = 0 | |
| def add(elem: Byte): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Byte]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Byte]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def ofShort(n: Int): VarArgsBuilder[Short] = new VarArgsBuilder[Short]: | |
| private val xs = new Array[Short](n) | |
| def result() = ArraySeq.ofShort(xs) | |
| private var i = 0 | |
| def add(elem: Short): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Short]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Short]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def ofChar(n: Int): VarArgsBuilder[Char] = new VarArgsBuilder[Char]: | |
| private val xs = new Array[Char](n) | |
| def result() = ArraySeq.ofChar(xs) | |
| private var i = 0 | |
| def add(elem: Char): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Char]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Char]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def ofInt(n: Int): VarArgsBuilder[Int] = new VarArgsBuilder[Int]: | |
| private val xs = new Array[Int](n) | |
| def result() = ArraySeq.ofInt(xs) | |
| private var i = 0 | |
| def add(elem: Int): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Int]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Int]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def ofLong(n: Int): VarArgsBuilder[Long] = new VarArgsBuilder[Long]: | |
| private val xs = new Array[Long](n) | |
| def result() = ArraySeq.ofLong(xs) | |
| private var i = 0 | |
| def add(elem: Long): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Long]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Long]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def ofFloat(n: Int): VarArgsBuilder[Float] = new VarArgsBuilder[Float]: | |
| private val xs = new Array[Float](n) | |
| def result() = ArraySeq.ofFloat(xs) | |
| private var i = 0 | |
| def add(elem: Float): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Float]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Float]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def ofDouble(n: Int): VarArgsBuilder[Double] = new VarArgsBuilder[Double]: | |
| private val xs = new Array[Double](n) | |
| def result() = ArraySeq.ofDouble(xs) | |
| private var i = 0 | |
| def add(elem: Double): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Double]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Double]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def ofBoolean(n: Int): VarArgsBuilder[Boolean] = new VarArgsBuilder[Boolean]: | |
| private val xs = new Array[Boolean](n) | |
| def result() = ArraySeq.ofBoolean(xs) | |
| private var i = 0 | |
| def add(elem: Boolean): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Boolean]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Boolean]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def ofUnit(n: Int): VarArgsBuilder[Unit] = new VarArgsBuilder[Unit]: | |
| private val xs = new Array[Unit](n) | |
| def result() = ArraySeq.ofUnit(xs) | |
| private var i = 0 | |
| def add(elem: Unit): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Unit]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Unit]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| end VarArgsBuilder |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package runtimeStrawman | |
| import scala.collection.immutable.ArraySeq | |
| import scala.reflect.ClassTag | |
| sealed abstract class VarArgsBuilder2[T]: | |
| def add(elem: T): this.type | |
| def addSeq(elems: Seq[T]): this.type | |
| def addArray(elems: Array[T]): this.type | |
| def result(): Seq[T] | |
| object VarArgsBuilder2: | |
| class generic[T](n: Int) extends VarArgsBuilder2[T]: | |
| private val xs = new Array[AnyRef](n) | |
| override def result(): Seq[T] = ArraySeq.ofRef(xs).asInstanceOf[ArraySeq[T]] | |
| private var i = 0 | |
| override def add(elem: T): this.type = | |
| xs(i) = elem.asInstanceOf[AnyRef] | |
| i += 1 | |
| this | |
| override def addSeq(elems: Seq[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem.asInstanceOf[AnyRef] | |
| i += 1 | |
| this | |
| override def addArray(elems: Array[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem.asInstanceOf[AnyRef] | |
| i += 1 | |
| this | |
| class ofRef[T <: AnyRef](n: Int) extends VarArgsBuilder2[T]: | |
| private val xs = new Array[AnyRef](n) | |
| override def result(): Seq[T] = ArraySeq.ofRef(xs).asInstanceOf[ArraySeq[T]] | |
| private var i = 0 | |
| override def add(elem: T): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addSeq(elems: Seq[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addArray(elems: Array[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| class ofByte(n: Int) extends VarArgsBuilder2[Byte]: | |
| private val xs = new Array[Byte](n) | |
| override def result(): Seq[Byte] = ArraySeq.ofByte(xs) | |
| private var i = 0 | |
| override def add(elem: Byte): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addSeq(elems: Seq[Byte]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addArray(elems: Array[Byte]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| class ofShort(n: Int) extends VarArgsBuilder2[Short]: | |
| private val xs = new Array[Short](n) | |
| override def result(): Seq[Short] = ArraySeq.ofShort(xs) | |
| private var i = 0 | |
| override def add(elem: Short): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addSeq(elems: Seq[Short]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addArray(elems: Array[Short]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| class ofChar(n: Int) extends VarArgsBuilder2[Char]: | |
| private val xs = new Array[Char](n) | |
| override def result(): Seq[Char] = ArraySeq.ofChar(xs) | |
| private var i = 0 | |
| override def add(elem: Char): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addSeq(elems: Seq[Char]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addArray(elems: Array[Char]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| class ofInt(n: Int) extends VarArgsBuilder2[Int]: | |
| private val xs = new Array[Int](n) | |
| override def result(): Seq[Int] = ArraySeq.ofInt(xs) | |
| private var i = 0 | |
| override def add(elem: Int): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addSeq(elems: Seq[Int]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addArray(elems: Array[Int]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| class ofLong(n: Int) extends VarArgsBuilder2[Long]: | |
| private val xs = new Array[Long](n) | |
| override def result(): Seq[Long] = ArraySeq.ofLong(xs) | |
| private var i = 0 | |
| override def add(elem: Long): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addSeq(elems: Seq[Long]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addArray(elems: Array[Long]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| class ofFloat(n: Int) extends VarArgsBuilder2[Float]: | |
| private val xs = new Array[Float](n) | |
| override def result(): Seq[Float] = ArraySeq.ofFloat(xs) | |
| private var i = 0 | |
| override def add(elem: Float): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addSeq(elems: Seq[Float]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addArray(elems: Array[Float]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| class ofDouble(n: Int) extends VarArgsBuilder2[Double]: | |
| private val xs = new Array[Double](n) | |
| override def result(): Seq[Double] = ArraySeq.ofDouble(xs) | |
| private var i = 0 | |
| override def add(elem: Double): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addSeq(elems: Seq[Double]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addArray(elems: Array[Double]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| class ofBoolean(n: Int) extends VarArgsBuilder2[Boolean]: | |
| private val xs = new Array[Boolean](n) | |
| override def result(): Seq[Boolean] = ArraySeq.ofBoolean(xs) | |
| private var i = 0 | |
| override def add(elem: Boolean): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addSeq(elems: Seq[Boolean]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addArray(elems: Array[Boolean]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| class ofUnit(n: Int) extends VarArgsBuilder2[Unit]: | |
| private val xs = new Array[Unit](n) | |
| override def result(): Seq[Unit] = ArraySeq.ofUnit(xs) | |
| private var i = 0 | |
| override def add(elem: Unit): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addSeq(elems: Seq[Unit]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| override def addArray(elems: Array[Unit]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| end VarArgsBuilder2 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package runtimeStrawman | |
| import scala.collection.immutable.ArraySeq | |
| import scala.reflect.ClassTag | |
| sealed abstract class VarArgsBuilder3[T]: | |
| // def add(elem: T): this.type | |
| // def addSeq(elems: Seq[T]): this.type | |
| // def addArray(elems: Array[T]): this.type | |
| def result(): Seq[T] | |
| object VarArgsBuilder3: | |
| final class generic[T](n: Int) extends VarArgsBuilder3[T]: | |
| private val xs = new Array[AnyRef](n) | |
| override def result(): Seq[T] = ArraySeq.ofRef(xs).asInstanceOf[ArraySeq[T]] | |
| private var i = 0 | |
| def add(elem: T): this.type = | |
| xs(i) = elem.asInstanceOf[AnyRef] | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem.asInstanceOf[AnyRef] | |
| i += 1 | |
| this | |
| def addArray(elems: Array[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem.asInstanceOf[AnyRef] | |
| i += 1 | |
| this | |
| final class ofRef[T <: AnyRef](n: Int) extends VarArgsBuilder3[T]: | |
| private val xs = new Array[AnyRef](n) | |
| override def result(): Seq[T] = ArraySeq.ofRef(xs).asInstanceOf[ArraySeq[T]] | |
| private var i = 0 | |
| def add(elem: T): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[T]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| final class ofByte(n: Int) extends VarArgsBuilder3[Byte]: | |
| private val xs = new Array[Byte](n) | |
| override def result(): Seq[Byte] = ArraySeq.ofByte(xs) | |
| private var i = 0 | |
| def add(elem: Byte): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Byte]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Byte]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| final class ofShort(n: Int) extends VarArgsBuilder3[Short]: | |
| private val xs = new Array[Short](n) | |
| override def result(): Seq[Short] = ArraySeq.ofShort(xs) | |
| private var i = 0 | |
| def add(elem: Short): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Short]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Short]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| final class ofChar(n: Int) extends VarArgsBuilder3[Char]: | |
| private val xs = new Array[Char](n) | |
| override def result(): Seq[Char] = ArraySeq.ofChar(xs) | |
| private var i = 0 | |
| def add(elem: Char): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Char]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Char]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| final class ofInt(n: Int) extends VarArgsBuilder3[Int]: | |
| private val xs = new Array[Int](n) | |
| override def result(): Seq[Int] = ArraySeq.ofInt(xs) | |
| private var i = 0 | |
| def add(elem: Int): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Int]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Int]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| final class ofLong(n: Int) extends VarArgsBuilder3[Long]: | |
| private val xs = new Array[Long](n) | |
| override def result(): Seq[Long] = ArraySeq.ofLong(xs) | |
| private var i = 0 | |
| def add(elem: Long): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Long]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Long]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| final class ofFloat(n: Int) extends VarArgsBuilder3[Float]: | |
| private val xs = new Array[Float](n) | |
| override def result(): Seq[Float] = ArraySeq.ofFloat(xs) | |
| private var i = 0 | |
| def add(elem: Float): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Float]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Float]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| final class ofDouble(n: Int) extends VarArgsBuilder3[Double]: | |
| private val xs = new Array[Double](n) | |
| override def result(): Seq[Double] = ArraySeq.ofDouble(xs) | |
| private var i = 0 | |
| def add(elem: Double): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Double]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Double]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| final class ofBoolean(n: Int) extends VarArgsBuilder3[Boolean]: | |
| private val xs = new Array[Boolean](n) | |
| override def result(): Seq[Boolean] = ArraySeq.ofBoolean(xs) | |
| private var i = 0 | |
| def add(elem: Boolean): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Boolean]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Boolean]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| final class ofUnit(n: Int) extends VarArgsBuilder3[Unit]: | |
| private val xs = new Array[Unit](n) | |
| override def result(): Seq[Unit] = ArraySeq.ofUnit(xs) | |
| private var i = 0 | |
| def add(elem: Unit): this.type = | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addSeq(elems: Seq[Unit]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| def addArray(elems: Array[Unit]): this.type = | |
| for elem <- elems do | |
| xs(i) = elem | |
| i += 1 | |
| this | |
| end VarArgsBuilder3 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment