Initial commit

This commit is contained in:
Bassem Girgis
2018-12-20 17:34:07 -06:00
parent 7a2d899662
commit 81b4b9e273
34743 changed files with 5940233 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
CXXSRCS =
include $(SRCDIR)../example.mk

View File

@@ -0,0 +1,35 @@
/* File : example.h */
#include <math.h>
class ComplexVal {
private:
double rpart, ipart;
public:
ComplexVal(double r = 0, double i = 0) : rpart(r), ipart(i) { }
ComplexVal(const ComplexVal &c) : rpart(c.rpart), ipart(c.ipart) { }
ComplexVal &operator=(const ComplexVal &c) {
rpart = c.rpart;
ipart = c.ipart;
return *this;
}
ComplexVal operator+(const ComplexVal &c) const {
return ComplexVal(rpart+c.rpart, ipart+c.ipart);
}
ComplexVal operator-(const ComplexVal &c) const {
return ComplexVal(rpart-c.rpart, ipart-c.ipart);
}
ComplexVal operator*(const ComplexVal &c) const {
return ComplexVal(rpart*c.rpart - ipart*c.ipart,
rpart*c.ipart + c.rpart*ipart);
}
ComplexVal operator-() const {
return ComplexVal(-rpart, -ipart);
}
double re() const { return rpart; }
double im() const { return ipart; }
};
ComplexVal operator*(const double &s, const ComplexVal &c) {
return ComplexVal(s*c.re(), s*c.im());
}

View File

@@ -0,0 +1,50 @@
/* File : example.i */
%module swigexample
%feature("autodoc", 1);
#pragma SWIG nowarn=SWIGWARN_IGNORE_OPERATOR_EQ
%{
#include "example.h"
%}
/* Rename friend operator */
%rename(op_scalar_mul_ComplexVal) operator*(const double&, const ComplexVal&);
/* Now grab the original header file */
%include "example.h"
/* An output method that turns a complex into a short string */
%extend ComplexVal {
char *__str__() {
static char temp[512];
sprintf(temp,"(%g,%g)", $self->re(), $self->im());
return temp;
}
ComplexVal __paren__(int j) {
return ComplexVal($self->re()*j,$self->im()*j);
}
double __float__() {
return (double) $self->re();
}
double __real__() {
return $self->re();
}
double __imag__() {
return $self->im();
}
double __abs__() {
return sqrt($self->re()*$self->re() + $self->im()*$self->im());
}
ComplexVal __conj__() {
return ComplexVal($self->re(), -$self->im());
}
ComplexVal __exp__() {
return exp($self->re()) * ComplexVal(cos($self->im()), sin($self->im()));
}
};

View File

@@ -0,0 +1,44 @@
# do not dump Octave core
if exist("crash_dumps_octave_core", "builtin")
crash_dumps_octave_core(0);
endif
# Operator overloading example
swigexample
a = swigexample.ComplexVal(2,3);
b = swigexample.ComplexVal(-5,10);
printf("a = %s\n",disp(a));
printf("b = %s\n",disp(b));
c = a + b;
printf("c = %s\n",disp(c));
printf("a*b = %s\n",disp(a*b));
printf("a-c = %s\n",disp(a-c));
e = swigexample.ComplexVal(a-c);
printf("e = %s\n",disp(e));
# Big expression
f = ((a+b)*(c+b*e)) + (-a);
printf("f = %s\n",disp(f));
# paren overloading
printf("a(3)= %s\n",disp(a(3)));
# friend operator
printf("2*a = %s\n",disp(2*a));
# conversions
printf("single(a) = %g\n", single(a));
printf("double(a) = %g\n", double(a));
# unary functions
if swig_octave_prereq(3,8,0)
printf("real(a) = %g\n", real(a));
printf("imag(a) = %g\n", imag(a));
printf("abs(a) = %g\n", abs(a));
printf("conj(a) = %s\n", disp(conj(a)));
printf("exp(a) = %s\n", disp(exp(a)));
endif