Talk given iOSDC Japan 2021. https://fortee.jp/iosdc-japan-2021/proposal/df47003d-68c2-45a1-ba1d-f8d5a400f4cd
Using Eigen from Swift (via C)Using Eigen from Swift (via C)さ のた け と @ t ak e t o 1024͞ͷ͚ͨͱ !UBLFUPJ04%$+BQBO
View Slide
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 1024J04%$.Fさ のた け と @ t ak e t o 1024
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 1024&JHFO&JHFOJTBIJHIMFWFM$MJCSBSZPGUFNQMBUFIFBEFSTGPSMJOFBSBMHFCSB NBUSJYBOEWFDUPSPQFSBUJPOT 'BTU -JHIUXFJHIU &YUFOTJCMF8FXBOUBXSBQQFSMJCSBSZGPS4XJGU
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 10246TJOH&JHFOGSPN4XJGU↟3FRVJSFNFOU4DBMBSUZQFTNVTUCFHFOFSJDlet a = EigenIntMatrix( ... )let b = EigenDoubleMatrix( ... )let c = EigenRationalMatrix( ... )🙅let a = EigenMatrix( ... )let b = EigenMatrix( ... )let c = EigenMatrix( ... )🙆
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 1024)PX4XJGU $ $EigenMatrixEigenMatrixEigen::MatrixEigen::MatrixEigenMatrix Eigen::Matrix
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 10244XJGUprotocol Scalar {static func + (a: Self, b: Self) -> Selfstatic func - (a: Self, b: Self) -> Selfstatic func * (a: Self, b: Self) -> Self…}4XJGUextension Int: Scalar {}extension Double: Scalar {}struct Rational: Scalar {…}4XJGU
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 10244XJGUtypealias EigenMatrixPointer = UnsafeMutableRawPointertypealias EigenMatrixOperation =(EigenMatrixPointer,EigenMatrixPointer,EigenMatrixPointer) -> Voidprotocol EigenCompatibleScalar: Scalar {static var eigen_init: (Int, Int) -> EigenMatrixPointer { get }static var eigen_add: EigenMatrixOperation { get }static var eigen_minus: EigenMatrixOperation { get }static var eigen_mul: EigenMatrixOperation { get }…}4XJGU
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 10244XJGUstruct EigenMatrix {private var ptr: EigenMatrixPointerinit(size: MatrixSize) {let ptr = R.eigen_init(size.rows, size.cols)self.ptr = ptr}static func + (a: Self, b: Self) -> Self {let c = Self(size: a.size)R.eigen_add(a.ptr, b.ptr, c.ptr)return c}…}4XJGU
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 10244XJGU$extension Int: EigenCompatibleScalar {static var eigen_init = eigen_int_initstatic var eigen_add = eigen_int_addstatic var eigen_minus = eigen_int_minusstatic var eigen_mul = eigen_int_mul…}4XJGUvoid *eigen_int_init(int rows, int cols);void eigen_int_add (void *a, void *b, void *c);void eigen_int_minus(void *a, void *b, void *c);void eigen_int_mul (void *a, void *b, void *c);$EigenMatrixPointerEigenMatrixOperation
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 10244XJGU$extension Double: EigenCompatibleScalar {static var eigen_init = eigen_dbl_initstatic var eigen_add = eigen_dbl_addstatic var eigen_minus = eigen_dbl_minusstatic var eigen_mul = eigen_dbl_mul…}4XJGUvoid *eigen_dbl_init(int rows, int cols);void eigen_dbl_add (void *a, void *b, void *c);void eigen_dbl_minus(void *a, void *b, void *c);void eigen_dbl_mul (void *a, void *b, void *c);$
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 1024$$#import using IntMatrix = Eigen::Matrix;void *eigen_int_init(int_t rows, int_t cols) {IntMatrix *A = new IntMatrix(rows, cols);A->setZero();return static_cast(A);} void eigen_int_add(void *a, void *b, void *c) {IntMatrix *A = static_cast(a);IntMatrix *B = static_cast(b);IntMatrix *C = static_cast(c);*C = *A + *B;}$
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 1024$$#import using DoubleMatrix = Eigen::Matrix;void *eigen_dbl_init(int_t rows, int_t cols) {DoubleMatrix *A = new DoubleMatrix(rows, cols);A->setZero();return static_cast(A);} void eigen_dbl_add(void *a, void *b, void *c) {DoubleMatrix *A = static_cast(a);DoubleMatrix *B = static_cast(b);DoubleMatrix *C = static_cast(c);*C = *A + *B;}$
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 1024*UXPSLTlet a: EigenMatrix2x2 = [1, 2, 3, 4]let b: EigenMatrix2x2 = [5, 6, 7, 8]print(a + b)4XJGU[6, 8; 10, 12]DPOTPMFIUUQTHJUIVCDPNUBLFUPTXNFJHFO
Using Eigen from Swift (via C)さ のた け と @ t ak e t o 10245IBOLZPV