Skip to content
This repository was archived by the owner on Jan 20, 2023. It is now read-only.

Commit d84ff04

Browse files
authored
Merge pull request #6 from k163377/improve_performance
Improve performance.
2 parents c72e933 + a829a8b commit d84ff04

File tree

10 files changed

+196
-121
lines changed

10 files changed

+196
-121
lines changed

.idea/codeStyles/Project.xml

Lines changed: 0 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ data class Sample(
2222

2323
val function: KFunction<Sample> = ::Sample
2424

25-
val fastKFunction: FastKFunction<Sample> = FastKFunction(function)
25+
val fastKFunction: FastKFunction<Sample> = FastKFunction.of(function)
2626

2727
// call by vararg
2828
val result: Sample = fastKFunction.call(1, 2, 3, 4, 5)
@@ -58,7 +58,7 @@ data class Sample(
5858

5959
val sample = Sample(1, 2)
6060

61-
val fastKFunction = FastKFunction(sample::instanceFun, sample)
61+
val fastKFunction = FastKFunction.of(sample::instanceFun, sample)
6262
```
6363

6464
Depending on how you get the `KFunction`, the `instance parameter` may be required.
@@ -72,7 +72,7 @@ Calling with `vararg` or `Collection` is faster if you don't need to use the def
7272
can get them in the order in which they are defined.
7373

7474
```kotlin
75-
val fastKFunction: FastKFunction<Sample> = FastKFunction(function)
75+
val fastKFunction: FastKFunction<Sample> = FastKFunction.of(function)
7676

7777
// call by vararg
7878
val result: Sample = fastKFunction.call(1, 2, 3, 4, 5)
@@ -93,7 +93,7 @@ data class Sample(
9393
val arg3: String? = null
9494
)
9595

96-
private val fastKFunction: FastKFunction<Sample> = FastKFunction(::Sample)
96+
private val fastKFunction: FastKFunction<Sample> = FastKFunction.of(::Sample)
9797

9898
fun map(src: Map<String, Any?>): Sample {
9999
return fastKFunction.generateBucket()

src/jmh/kotlin/com/mapk/fastkfunction/CallConstructorBenchmark.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ open class CallConstructorBenchmark {
1616
private val argumentMap: Map<KParameter, Any?> = function.parameters.associateWith { it.index + 1 }
1717

1818
private val javaConstructor: Constructor<Constructor5> = function.javaConstructor!!
19-
private val fastKFunction: FastKFunction<Constructor5> = FastKFunction(function, null)
19+
private val fastKFunction: FastKFunction<Constructor5> = FastKFunction.of(function, null)
2020
private val argumentBucket: ArgumentBucket = fastKFunction.generateBucket()
2121
.apply { (0 until 5).forEach { this[it] = it + 1 } }
2222

src/jmh/kotlin/com/mapk/fastkfunction/CallInstanceMethodBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ open class CallInstanceMethodBenchmark {
1717
private val argumentMap: Map<KParameter, Any?> = function.parameters.associateWith { it.index + 1 }
1818

1919
private val javaMethod: Method = function.javaMethod!!
20-
private val fastKFunctionWithoutInstance: FastKFunction<Constructor5> = FastKFunction(function, null)
21-
private val fastKFunctionWithInstance: FastKFunction<Constructor5> = FastKFunction(function, instance)
20+
private val fastKFunctionWithoutInstance: FastKFunction<Constructor5> = FastKFunction.of(function, null)
21+
private val fastKFunctionWithInstance: FastKFunction<Constructor5> = FastKFunction.of(function, instance)
2222
private val argumentBucket: ArgumentBucket = fastKFunctionWithoutInstance.generateBucket()
2323
.apply { (0 until 5).forEach { this[it] = it + 1 } }
2424

src/jmh/kotlin/com/mapk/fastkfunction/CallObjectMethodBenchmark.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ open class CallObjectMethodBenchmark {
2727
private val javaMethod: Method = functionByMethodReference.javaMethod!!
2828

2929
private val fastKFunctionByMethodReferenceWithoutInstance: FastKFunction<Constructor5> =
30-
FastKFunction(functionByMethodReference)
30+
FastKFunction.of(functionByMethodReference)
3131
private val fastKFunctionByMethodReferenceWithInstance: FastKFunction<Constructor5> =
32-
FastKFunction(functionByMethodReference, objectInstance)
32+
FastKFunction.of(functionByMethodReference, objectInstance)
3333

3434
private val fastKFunctionByReflectionWithoutInstance: FastKFunction<Constructor5> =
35-
FastKFunction(functionByReflection)
35+
FastKFunction.of(functionByReflection)
3636
private val fastKFunctionByReflectionWithInstance: FastKFunction<Constructor5> =
37-
FastKFunction(functionByReflection, objectInstance)
37+
FastKFunction.of(functionByReflection, objectInstance)
3838

3939
private val argumentBucket: ArgumentBucket = fastKFunctionByMethodReferenceWithoutInstance.generateBucket()
4040
.apply { (0 until 5).forEach { this[it] = it + 1 } }

src/jmh/kotlin/com/mapk/fastkfunction/CallTopLevelExtensionFunBenchmark.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@ open class CallTopLevelExtensionFunBenchmark {
2323
private val javaMethod: Method = functionByMethodReference.javaMethod!!
2424

2525
private val fastKFunctionByMethodReferenceWithoutInstance: FastKFunction<Constructor5> =
26-
FastKFunction(functionByMethodReference)
26+
FastKFunction.of(functionByMethodReference)
2727
private val fastKFunctionByMethodReferenceWithInstance: FastKFunction<Constructor5> =
28-
FastKFunction(functionByMethodReference, receiverInstance)
28+
FastKFunction.of(functionByMethodReference, receiverInstance)
2929

30-
private val fastKFunctionFromClass: FastKFunction<Constructor5> = FastKFunction(functionFromClass, receiverInstance)
30+
private val fastKFunctionFromClass: FastKFunction<Constructor5> =
31+
FastKFunction.of(functionFromClass, receiverInstance)
3132

3233
private val argumentBucket: ArgumentBucket = fastKFunctionByMethodReferenceWithoutInstance.generateBucket()
3334
.apply { (0 until 5).forEach { this[it] = it + 1 } }

src/jmh/kotlin/com/mapk/fastkfunction/CallTopLevelFunBenchmark.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ open class CallTopLevelFunBenchmark {
1717
private val argumentMap: Map<KParameter, Any?> = function.parameters.associateWith { it.index + 1 }
1818

1919
private val javaMethod: Method = function.javaMethod!!
20-
private val fastKFunction: FastKFunction<Constructor5> = FastKFunction(function, null)
20+
private val fastKFunction: FastKFunction<Constructor5> = FastKFunction.of(function, null)
2121
private val argumentBucket: ArgumentBucket = fastKFunction.generateBucket()
2222
.apply { (0 until 5).forEach { this[it] = it + 1 } }
2323

0 commit comments

Comments
 (0)