Skip to content

Commit

Permalink
Perf: use JsArray for combinators; eliminate individual{1..N} combina…
Browse files Browse the repository at this point in the history
…tor classes
  • Loading branch information
raquo committed Jan 4, 2023
1 parent 9890f7c commit f775175
Show file tree
Hide file tree
Showing 32 changed files with 578 additions and 1,076 deletions.
20 changes: 0 additions & 20 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -80,26 +80,6 @@ val generateTupleCombinatorsTo = 9

Compile / sourceGenerators += Def.task {
Seq.concat(
GenerateCombineStreams(
(Compile / sourceDirectory).value,
from = generateTupleCombinatorsFrom,
to = generateTupleCombinatorsTo
).run,
GenerateCombineSignals(
(Compile / sourceDirectory).value,
from = generateTupleCombinatorsFrom,
to = generateTupleCombinatorsTo
).run,
GenerateSampleCombineStreams(
(Compile / sourceDirectory).value,
from = generateTupleCombinatorsFrom,
to = generateTupleCombinatorsTo
).run,
GenerateSampleCombineSignals(
(Compile / sourceDirectory).value,
from = generateTupleCombinatorsFrom,
to = generateTupleCombinatorsTo
).run,
GenerateTupleStreams(
(Compile / sourceDirectory).value,
from = generateTupleCombinatorsFrom,
Expand Down
17 changes: 13 additions & 4 deletions project/GenerateCombinableSignal.scala
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ case class GenerateCombinableSignal(
line("package com.raquo.airstream.combine.generated")
line()
line("import app.tulz.tuplez.Composition")
line("import com.raquo.airstream.combine.SampleCombineSignalN")
line("import com.raquo.airstream.core.Signal")
line("import com.raquo.airstream.core.Source.SignalSource")
line("import com.raquo.ew.JsArray")
line()
line("// #Warning do not edit this file directly, it is generated by GenerateCombinableSignal.scala")
line()
Expand All @@ -40,22 +42,29 @@ case class GenerateCombinableSignal(
line(s"combinator: (A, ${tupleType(n)}) => Out")
}
enter(s"): Signal[Out] = {", "}") {
line(s"new CombineSignal${n + 1}(signal, ${tupleType(n, "s")}, combinator)")
line(s"StaticSignalCombineOps.combineWithFn(signal, ${tupleType(n, "s")})(combinator)")
}
line()
enter(s"def withCurrentValueOf[${tupleType(n)}](") {
line((1 to n).map(i => s"s${i}: SignalSource[T${i}]").mkString(", "))
}
enter(s")(implicit c: Composition[A, (${tupleType(n)})]): Signal[c.Composed] = {", "}") {
line(s"val combinator = (a: A, ${(1 to n).map(i => s"v${i}: T${i}").mkString(", ")}) => c.compose(a, (${tupleType(n, "v")}))")
line(s"new SampleCombineSignal${n + 1}(signal, ${tupleType(n, "s")}, combinator)")
line(s"val combinator = (arr: JsArray[Any]) => c.compose(arr(0).asInstanceOf[A], (${(1 to n).map(i => s"arr(${i}).asInstanceOf[T${i}]").mkString(", ")}))")
line(s"val sampledSignals = JsArray[Signal[Any]](${tupleType(n, "s", ".toObservable")})")
enter(s"new SampleCombineSignalN(", ")") {
line("signal, sampledSignals, combinator")
}
}
line()
enter(s"def sample[${tupleType(n)}](") {
line((1 to n).map(i => s"s${i}: SignalSource[T${i}]").mkString(", "))
}
enter(s"): Signal[(${tupleType(n)})] = {", "}") {
line(s"new SampleCombineSignal${n + 1}[A, ${tupleType(n)}, (${tupleType(n)})](signal, ${tupleType(n, "s")}, (_, ${tupleType(n, "v")}) => (${tupleType(n, "v")}))")
line(s"val combinator = (arr: JsArray[Any]) => (${(1 to n).map(i => s"arr(${i}).asInstanceOf[T${i}]").mkString(", ")})")
line(s"val sampledSignals = JsArray[Signal[Any]](${tupleType(n, "s", ".toObservable")})")
enter(s"new SampleCombineSignalN[Any, (${tupleType(n)})](", ")") {
line("signal, sampledSignals, combinator")
}
}
line()
line("// --")
Expand Down
19 changes: 14 additions & 5 deletions project/GenerateCombinableStream.scala
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ case class GenerateCombinableStream(
line("package com.raquo.airstream.combine.generated")
line()
line("import app.tulz.tuplez.Composition")
line("import com.raquo.airstream.core.EventStream")
line("import com.raquo.airstream.combine.SampleCombineStreamN")
line("import com.raquo.airstream.core.{EventStream, Signal}")
line("import com.raquo.airstream.core.Source.{EventSource, SignalSource}")
line("import com.raquo.ew.JsArray")
line()
line("// #Warning do not edit this file directly, it is generated by GenerateCombinableStream.scala")
line()
Expand All @@ -40,22 +42,29 @@ case class GenerateCombinableStream(
line(s"combinator: (A, ${tupleType(n)}) => Out")
}
enter(s"): EventStream[Out] = {", "}") {
line(s"new CombineStream${n + 1}(stream, ${tupleType(n, "s")}, combinator)")
line(s"StaticStreamCombineOps.combineWithFn(stream, ${tupleType(n, "s")})(combinator)")
}
line()
enter(s"def withCurrentValueOf[${tupleType(n)}](") {
line((1 to n).map(i => s"s${i}: SignalSource[T${i}]").mkString(", "))
}
enter(s")(implicit c: Composition[A, (${tupleType(n)})]): EventStream[c.Composed] = {", "}") {
line(s"val combinator = (a: A, ${(1 to n).map(i => s"v${i}: T${i}").mkString(", ")}) => c.compose(a, (${tupleType(n, "v")}))")
line(s"new SampleCombineStream${n + 1}(stream, ${tupleType(n, "s")}, combinator)")
line(s"val combinator = (arr: JsArray[Any]) => c.compose(arr(0).asInstanceOf[A], (${(1 to n).map(i => s"arr(${i}).asInstanceOf[T${i}]").mkString(", ")}))")
line(s"val sampledSignals = JsArray[Signal[Any]](${tupleType(n, "s", ".toObservable")})")
enter(s"new SampleCombineStreamN(", ")") {
line("stream, sampledSignals, combinator")
}
}
line()
enter(s"def sample[${tupleType(n)}](") {
line((1 to n).map(i => s"s${i}: SignalSource[T${i}]").mkString(", "))
}
enter(s"): EventStream[(${tupleType(n)})] = {", "}") {
line(s"new SampleCombineStream${n + 1}[A, ${tupleType(n)}, (${tupleType(n)})](stream, ${tupleType(n, "s")}, (_, ${tupleType(n, "v")}) => (${tupleType(n, "v")}))")
line(s"val combinator = (arr: JsArray[Any]) => (${(1 to n).map(i => s"arr(${i}).asInstanceOf[T${i}]").mkString(", ")})")
line(s"val sampledSignals = JsArray[Signal[Any]](${tupleType(n, "s", ".toObservable")})")
enter(s"new SampleCombineStreamN[Any, (${tupleType(n)})](", ")") {
line("stream, sampledSignals, combinator")
}
}
line()
line("// --")
Expand Down
44 changes: 0 additions & 44 deletions project/GenerateCombineSignals.scala

This file was deleted.

43 changes: 0 additions & 43 deletions project/GenerateCombineStreams.scala

This file was deleted.

47 changes: 0 additions & 47 deletions project/GenerateSampleCombineSignals.scala

This file was deleted.

47 changes: 0 additions & 47 deletions project/GenerateSampleCombineStreams.scala

This file was deleted.

16 changes: 15 additions & 1 deletion project/GenerateStaticSignalCombineOps.scala
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ case class GenerateStaticSignalCombineOps(
override def apply(): Unit = {
line("package com.raquo.airstream.combine.generated")
line()
line("import com.raquo.airstream.combine.CombineSignalN")
line("import com.raquo.airstream.core.Signal")
line("import com.raquo.airstream.core.Source.SignalSource")
line("import com.raquo.ew.JsArray")
line()
line("// #Warning do not edit this file directly, it is generated by GenerateStaticSignalCombineOps.scala")
line()
Expand All @@ -39,7 +41,19 @@ case class GenerateStaticSignalCombineOps(
line(s"combinator: (${tupleType(n)}) => Out")
}
enter(s"): Signal[Out] = {", "}") {
line(s"new CombineSignal${n}(${tupleType(n, "s")}, combinator)")
// line(s"val parents = JsArray(${tupleType(n, "s", ".toObservable")})")
// line(s"val arrCombinator = (arr: JsArray[Any]) => combinator(${(0 until n).map(i => s"arr(${i}).asInstanceOf[T${i + 1}]").mkString(", ")})")
// enter("new CombineSignalN(", ")") {
// line("parents, arrCombinator")
// }
enter("new CombineSignalN[Any, Out](", ")") {
line(s"parents = JsArray(${tupleType(n, "s", ".toObservable")}),")
enter(s"combinator = arr => combinator(", ")") {
for (i <- 0 until n) {
line(s"arr(${i}).asInstanceOf[T${i+1}],")
}
}
}
}
line()
line("// --")
Expand Down
16 changes: 15 additions & 1 deletion project/GenerateStaticStreamCombineOps.scala
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ case class GenerateStaticStreamCombineOps(
override def apply(): Unit = {
line("package com.raquo.airstream.combine.generated")
line()
line("import com.raquo.airstream.combine.CombineStreamN")
line("import com.raquo.airstream.core.EventStream")
line("import com.raquo.airstream.core.Source.EventSource")
line("import com.raquo.ew.JsArray")
line()
line("// #Warning do not edit this file directly, it is generated by GenerateStaticStreamCombineOps.scala")
line()
Expand All @@ -39,7 +41,19 @@ case class GenerateStaticStreamCombineOps(
line(s"combinator: (${tupleType(n)}) => Out")
}
enter(s"): EventStream[Out] = {", "}") {
line(s"new CombineStream${n}(${tupleType(n, "s")}, combinator)")
// line(s"val arrCombinator = (arr: JsArray[Any]) => combinator(${(0 until n).map(i => s"arr(${i}).asInstanceOf[T${i + 1}]").mkString(", ")})")
// line(s"val streams = JsArray[EventStream[Any]](${tupleType(n, "s", ".toObservable")})")
// enter("new CombineStreamN(", ")") {
// line("streams, arrCombinator")
// }
enter("new CombineStreamN[Any, Out](", ")") {
line(s"parentStreams = JsArray(${tupleType(n, "s", ".toObservable")}),")
enter(s"combinator = arr => combinator(", ")") {
for (i <- 0 until n) {
line(s"arr(${i}).asInstanceOf[T${i + 1}],")
}
}
}
}
line()
line("// --")
Expand Down
2 changes: 1 addition & 1 deletion project/Versions.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ object Versions {

val Tuplez = "0.3.7"

val Ew = "0.1.1"
val Ew = "0.1.2-SNAPSHOT"

// Used in test only:

Expand Down
Loading

0 comments on commit f775175

Please sign in to comment.