The great merge

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@4141 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2002-11-30 22:01:28 +00:00
commit 516036631c
1508 changed files with 125983 additions and 44037 deletions

View file

@ -0,0 +1,11 @@
*.class
*.java
*_wrap.c
*_wrap.cxx
example.dll
example.dsw
example.ncb
example.opt
example.plg
Release
Debug

View file

@ -0,0 +1,18 @@
TOP = ../..
SWIG = $(TOP)/../swig
SRCS = example.c
TARGET = example
INTERFACE = example.i
SWIGOPT =
all:: java
java::
$(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' java
javac *.java
clean::
$(MAKE) -f $(TOP)/Makefile java_clean
check: all

View file

@ -0,0 +1,53 @@
/* File : example.c */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
/* Compute the greatest common divisor of positive integers */
int gcd(int x, int y) {
int g;
g = y;
while (x > 0) {
g = x;
x = y % x;
y = g;
}
return g;
}
int gcdmain(int argc, char *argv[]) {
int x,y;
if (argc != 3) {
printf("usage: gcd x y\n");
return -1;
}
x = atoi(argv[1]);
y = atoi(argv[2]);
printf("gcd(%d,%d) = %d\n", x,y,gcd(x,y));
return 0;
}
int count(char *bytes, int len, char c) {
int i;
int count = 0;
for (i = 0; i < len; i++) {
if (bytes[i] == c) count++;
}
return count;
}
void capitalize(char *str, int len) {
int i;
for (i = 0; i < len; i++) {
str[i] = toupper(str[i]);
}
}
void circle(double x, double y) {
double a = x*x + y*y;
if (a > 1.0) {
printf("Bad points %g, %g\n", x,y);
} else {
printf("Good points %g, %g\n", x,y);
}
}

View file

@ -0,0 +1,101 @@
/* File : example.i */
%module example
extern int gcd(int x, int y);
%typemap(jni) (int argc, char *argv[]) "jobjectArray"
%typemap(jtype) (int argc, char *argv[]) "String[]"
%typemap(jstype) (int argc, char *argv[]) "String[]"
%typemap(javain) (int argc, char *argv[]) "$javainput"
%typemap(in) (int argc, char *argv[]) (jstring *jsarray) {
int i;
$1 = (*jenv)->GetArrayLength(jenv, $input);
if ($1 == 0) {
SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element");
return $null;
}
$2 = (char **) malloc(($1+1)*sizeof(char *));
jsarray = (jstring *) malloc($1*sizeof(jstring));
for (i = 0; i < $1; i++) {
jsarray[i] = (jstring) (*jenv)->GetObjectArrayElement(jenv, $input, i);
$2[i] = (char *) (*jenv)->GetStringUTFChars(jenv, jsarray[i], 0);
}
$2[i] = 0;
}
%typemap(argout) (int argc, char *argv[]) "" /* override char *[] default */
%typemap(freearg) (int argc, char *argv[]) {
int i;
for (i = 0; i < $1; i++) {
(*jenv)->ReleaseStringUTFChars(jenv, jsarray$argnum[i], $2[i]);
}
free($2);
}
extern int gcdmain(int argc, char *argv[]);
%typemap(jni) (char *bytes, int len) "jstring"
%typemap(jtype) (char *bytes, int len) "String"
%typemap(jstype) (char *bytes, int len) "String"
%typemap(javain) (char *bytes, int len) "$javainput"
%typemap(in) (char *bytes, int len) {
$1 = ($1_type)(*jenv)->GetStringUTFChars(jenv, $input, 0);
$2 = (*jenv)->GetStringUTFLength(jenv, $input);
}
%typemap(freearg) (char *bytes, int len) %{
(*jenv)->ReleaseStringUTFChars(jenv, $input, $1);
%}
extern int count(char *bytes, int len, char c);
/* This example shows how to wrap a function that mutates a c string. A one
* element Java string array is used so that the string can be returned modified.*/
%typemap(jni) (char *str, int len) "jobjectArray"
%typemap(jtype) (char *str, int len) "String[]"
%typemap(jstype) (char *str, int len) "String[]"
%typemap(javain) (char *str, int len) "$javainput"
%typemap(in) (char *str, int len) (jstring js) %{
int index=0;
js = (jstring) (*jenv)->GetObjectArrayElement(jenv, $input, index);
$1 = (char *) (*jenv)->GetStringUTFChars(jenv, js, 0);
$2 = (*jenv)->GetStringUTFLength(jenv, js);
%}
/* Return the mutated string as a modified element in the array. */
%typemap(argout) (char *str, int len) {
jstring newstring = (*jenv)->NewStringUTF(jenv, $1);
(*jenv)->SetObjectArrayElement(jenv, $input, 0, newstring);
}
/* Release memory */
%typemap(freearg) (char *str, int len) {
(*jenv)->ReleaseStringUTFChars(jenv, js$argnum, $1);
}
extern void capitalize(char *str, int len);
/* A multi-valued constraint. Force two arguments to lie
inside the unit circle */
%typemap(check) (double cx, double cy) {
double a = $1*$1 + $2*$2;
if (a > 1.0) {
SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, "$1_name and $2_name must be in unit circle");
return;
}
}
extern void circle(double cx, double cy);

View file

@ -0,0 +1,40 @@
public class main {
static {
try {
System.loadLibrary("example");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
System.exit(1);
}
}
public static void main(String argv[]) {
// Call our gcd() function
int x = 42;
int y = 105;
int g = example.gcd(x,y);
System.out.println("The gcd of " + x + " and " + y + " is " + g);
// Call the gcdmain() function
String[] args = {"gcdmain","42","105"};
example.gcdmain(args);
// Call the count function
System.out.println(example.count("Hello World", 'l'));
// Call the capitalize function
String[] capitalizeMe = {"hello world"};
example.capitalize(capitalizeMe);
System.out.println(capitalizeMe[0]);
}
}