// Code generated by gobind. DO NOT EDIT.

// Java class basictypes.Basictypes is a proxy for talking to a Go program.
//
//   autogenerated by gobind -lang=java basictypes
package basictypes;

import go.Seq;

public abstract class Basictypes {
    static {
        Seq.touch(); // for loading the native library
        _init();
    }
    
    private Basictypes() {} // uninstantiable
    
    // touch is called from other bound packages to initialize this package
    public static void touch() {}
    
    private static native void _init();
    
    
    public static final boolean ABool = true;
    public static final double AFloat = 0.2015;
    public static final String ALongString = "LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString";
    public static final int ARune = 32;
    public static final String AString = "a string";
    public static final long AnInt = 7L;
    public static final long AnInt2 = 9223372036854775807L;
    
    public static native boolean bool(boolean p0);
    public static native byte[] byteArrays(byte[] x);
    public static native void error() throws Exception;
    public static native long errorPair() throws Exception;
    public static native void ints(byte x, short y, int z, long t, long u);
}
