Skip to content

Commit deb4c56

Browse files
committed
added support for up to 22 arguments
1 parent 7d12889 commit deb4c56

File tree

3 files changed

+222
-14
lines changed

3 files changed

+222
-14
lines changed

build.sbt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
lazy val commonSettings = Def.settings(
22
scalaVersion := "2.11.8",
33
organization := "com.github.nadavwr",
4-
version := "0.3.0",
4+
version := "0.3.1",
55
publishArtifact in (Compile, packageDoc) := false,
66
licenses += ("MIT", url("http://opensource.org/licenses/MIT"))
77
)
@@ -14,10 +14,7 @@ lazy val unpublished = Def.settings(
1414

1515
lazy val `libffi-scala-native` = project
1616
.enablePlugins(ScalaNativePlugin)
17-
.settings(
18-
commonSettings,
19-
nativeSharedLibrary := true
20-
)
17+
.settings(commonSettings)
2118

2219
lazy val sample = project
2320
.enablePlugins(ScalaNativePlugin)

libffi-scala-native/src/main/scala/com/github/nadavwr/ffi/CallInterface.scala

Lines changed: 118 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,135 @@ class CallInterface(cif: FfiCif, fn: Ptr[Byte]) {
88
def call(args: Array[Ptr[_]])(rvalue: Ptr[_]): Unit =
99
cif.call(fn, rvalue, args)
1010
}
11+
1112
class CallInterface1[T1, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
12-
def apply(p1: Ptr[T1])(r: Ptr[R]): Ptr[R] = { cif.call(fn, r, Array(p1)); r }
13+
def apply(p1: Ptr[T1])(r: Ptr[R]): Ptr[R] = {
14+
cif.call(fn, r, Array(p1)); r
15+
}
1316
}
1417

1518
class CallInterface2[T1, T2, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
16-
def apply(p1: Ptr[T1], p2: Ptr[T2])(r: Ptr[R]): Ptr[R] = { cif.call(fn, r, Array(p1, p2)); r }
19+
def apply(p1: Ptr[T1], p2: Ptr[T2])(r: Ptr[R]): Ptr[R] = {
20+
cif.call(fn, r, Array(p1, p2)); r
21+
}
1722
}
1823

1924
class CallInterface3[T1, T2, T3, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
20-
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3])(r: Ptr[R]): Ptr[R] = { cif.call(fn, r, Array(p1, p2, p3)); r }
25+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3])(r: Ptr[R]): Ptr[R] = {
26+
cif.call(fn, r, Array(p1, p2, p3)); r
27+
}
2128
}
2229

2330
class CallInterface4[T1, T2, T3, T4, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
24-
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4])(r: Ptr[R]): Ptr[R] = { cif.call(fn, r, Array(p1, p2, p3, p4)); r }
31+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4])(r: Ptr[R]): Ptr[R] = {
32+
cif.call(fn, r, Array(p1, p2, p3, p4)); r
33+
}
2534
}
2635

2736
class CallInterface5[T1, T2, T3, T4, T5, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
28-
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5])(r: Ptr[R]): Ptr[R] = { cif.call(fn, r, Array(p1, p2, p3, p4, p5)); r }
37+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5])(r: Ptr[R]): Ptr[R] = {
38+
cif.call(fn, r, Array(p1, p2, p3, p4, p5)); r
39+
}
40+
}
41+
42+
class CallInterface6[T1, T2, T3, T4, T5, T6, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
43+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6])(r: Ptr[R]): Ptr[R] = {
44+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6)); r
45+
}
46+
}
47+
48+
class CallInterface7[T1, T2, T3, T4, T5, T6, T7, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
49+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7])(r: Ptr[R]): Ptr[R] = {
50+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7)); r
51+
}
52+
}
53+
54+
class CallInterface8[T1, T2, T3, T4, T5, T6, T7, T8, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
55+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8])(r: Ptr[R]): Ptr[R] = {
56+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8)); r
57+
}
58+
}
59+
60+
class CallInterface9[T1, T2, T3, T4, T5, T6, T7, T8, T9, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
61+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9])(r: Ptr[R]): Ptr[R] = {
62+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9)); r
63+
}
64+
}
65+
66+
class CallInterface10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
67+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10])(r: Ptr[R]): Ptr[R] = {
68+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)); r
69+
}
70+
}
71+
72+
class CallInterface11[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
73+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11])(r: Ptr[R]): Ptr[R] = {
74+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)); r
75+
}
76+
}
77+
78+
class CallInterface12[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
79+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11], p12: Ptr[T12])(r: Ptr[R]): Ptr[R] = {
80+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12)); r
81+
}
82+
}
83+
84+
class CallInterface13[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
85+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11], p12: Ptr[T12], p13: Ptr[T13])(r: Ptr[R]): Ptr[R] = {
86+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13)); r
87+
}
88+
}
89+
90+
class CallInterface14[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
91+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11], p12: Ptr[T12], p13: Ptr[T13], p14: Ptr[T14])(r: Ptr[R]): Ptr[R] = {
92+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14)); r
93+
}
94+
}
95+
96+
class CallInterface15[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
97+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11], p12: Ptr[T12], p13: Ptr[T13], p14: Ptr[T14], p15: Ptr[T15])(r: Ptr[R]): Ptr[R] = {
98+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15)); r
99+
}
100+
}
101+
102+
class CallInterface16[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
103+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11], p12: Ptr[T12], p13: Ptr[T13], p14: Ptr[T14], p15: Ptr[T15], p16: Ptr[T16])(r: Ptr[R]): Ptr[R] = {
104+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16)); r
105+
}
106+
}
107+
108+
class CallInterface17[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
109+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11], p12: Ptr[T12], p13: Ptr[T13], p14: Ptr[T14], p15: Ptr[T15], p16: Ptr[T16], p17: Ptr[T17])(r: Ptr[R]): Ptr[R] = {
110+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17)); r
111+
}
112+
}
113+
114+
class CallInterface18[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
115+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11], p12: Ptr[T12], p13: Ptr[T13], p14: Ptr[T14], p15: Ptr[T15], p16: Ptr[T16], p17: Ptr[T17], p18: Ptr[T18])(r: Ptr[R]): Ptr[R] = {
116+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18)); r
117+
}
118+
}
119+
120+
class CallInterface19[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
121+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11], p12: Ptr[T12], p13: Ptr[T13], p14: Ptr[T14], p15: Ptr[T15], p16: Ptr[T16], p17: Ptr[T17], p18: Ptr[T18], p19: Ptr[T19])(r: Ptr[R]): Ptr[R] = {
122+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19)); r
123+
}
124+
}
125+
126+
class CallInterface20[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
127+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11], p12: Ptr[T12], p13: Ptr[T13], p14: Ptr[T14], p15: Ptr[T15], p16: Ptr[T16], p17: Ptr[T17], p18: Ptr[T18], p19: Ptr[T19], p20: Ptr[T20])(r: Ptr[R]): Ptr[R] = {
128+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20)); r
129+
}
130+
}
131+
132+
class CallInterface21[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
133+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11], p12: Ptr[T12], p13: Ptr[T13], p14: Ptr[T14], p15: Ptr[T15], p16: Ptr[T16], p17: Ptr[T17], p18: Ptr[T18], p19: Ptr[T19], p20: Ptr[T20], p21: Ptr[T21])(r: Ptr[R]): Ptr[R] = {
134+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21)); r
135+
}
136+
}
137+
138+
class CallInterface22[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, R](val cif: FfiCif, fn: Ptr[Byte]) extends CallInterface(cif, fn) {
139+
def apply(p1: Ptr[T1], p2: Ptr[T2], p3: Ptr[T3], p4: Ptr[T4], p5: Ptr[T5], p6: Ptr[T6], p7: Ptr[T7], p8: Ptr[T8], p9: Ptr[T9], p10: Ptr[T10], p11: Ptr[T11], p12: Ptr[T12], p13: Ptr[T13], p14: Ptr[T14], p15: Ptr[T15], p16: Ptr[T16], p17: Ptr[T17], p18: Ptr[T18], p19: Ptr[T19], p20: Ptr[T20], p21: Ptr[T21], p22: Ptr[T22])(r: Ptr[R]): Ptr[R] = {
140+
cif.call(fn, r, Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22)); r
141+
}
29142
}

0 commit comments

Comments
 (0)