/*
 * Copyright (C) 2011-2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * This file is auto-generated. DO NOT MODIFY!
 * The source Renderscript file: reflection3264_divergent.rscript
 */

package foo;

import android.os.Build;
import android.os.Process;
import java.lang.reflect.Field;
import android.renderscript.*;
import foo.reflection3264_divergentBitCode;

/**
 * @hide
 */
public class ScriptC_reflection3264_divergent extends ScriptC {
    private static final String __rs_resource_name = "reflection3264_divergent";
    // Constructor
    public  ScriptC_reflection3264_divergent(RenderScript rs) {
        super(rs,
              __rs_resource_name,
              reflection3264_divergentBitCode.getBitCode32(),
              reflection3264_divergentBitCode.getBitCode64());
        __I32 = Element.I32(rs);
        __@@INVALID@@ = Element.@@INVALID@@(rs);
        __ALLOCATION = Element.ALLOCATION(rs);
        __ScriptField_NonDivergent = ScriptField_NonDivergent.createElement(rs);
        __ScriptField_Divergent = ScriptField_Divergent.createElement(rs);
    }

    private Element __@@INVALID@@;
    private Element __ALLOCATION;
    private Element __I32;
    private Element __ScriptField_Divergent;
    private Element __ScriptField_NonDivergent;
    private FieldPacker __rs_fp_@@INVALID@@;
    private FieldPacker __rs_fp_ALLOCATION;
    private FieldPacker __rs_fp_I32;
    private FieldPacker __rs_fp_ScriptField_Divergent;
    private FieldPacker __rs_fp_ScriptField_NonDivergent;
    private final static int mExportVarIdx_intVar = 0;
    private int mExportVar_intVar;
    public synchronized void set_intVar(int v) {
        setVar(mExportVarIdx_intVar, v);
        mExportVar_intVar = v;
    }

    public int get_intVar() {
        return mExportVar_intVar;
    }

    public Script.FieldID getFieldID_intVar() {
        return createFieldID(mExportVarIdx_intVar, null);
    }

    private final static int mExportVarIdx_intArray = 1;
    private int[] mExportVar_intArray;
    public synchronized void set_intArray(int[] v) {
        mExportVar_intArray = v;
        FieldPacker fp = new FieldPacker(40);
        for (int ct1 = 0; ct1 < 10; ct1++) {
            fp.addI32(v[ct1]);
        }

        int []__dimArr = new int[1];
        __dimArr[0] = 10;
        setVar(mExportVarIdx_intArray, fp, __I32, __dimArr);
    }

    public int[] get_intArray() {
        return mExportVar_intArray;
    }

    public Script.FieldID getFieldID_intArray() {
        return createFieldID(mExportVarIdx_intArray, null);
    }

    private final static int mExportVarIdx_matVar = 2;
    private Matrix2f mExportVar_matVar;
    public synchronized void set_matVar(Matrix2f v) {
        mExportVar_matVar = v;
        FieldPacker fp = new FieldPacker(16);
        fp.addMatrix(v);
        setVar(mExportVarIdx_matVar, fp);
    }

    public Matrix2f get_matVar() {
        return mExportVar_matVar;
    }

    public Script.FieldID getFieldID_matVar() {
        return createFieldID(mExportVarIdx_matVar, null);
    }

    private final static int mExportVarIdx_matArray = 3;
    private Matrix2f[] mExportVar_matArray;
    public synchronized void set_matArray(Matrix2f[] v) {
        mExportVar_matArray = v;
        FieldPacker fp = new FieldPacker(160);
        for (int ct1 = 0; ct1 < 10; ct1++) {
            fp.addMatrix(v[ct1]);
        }

        int []__dimArr = new int[1];
        __dimArr[0] = 10;
        setVar(mExportVarIdx_matArray, fp, __@@INVALID@@, __dimArr);
    }

    public Matrix2f[] get_matArray() {
        return mExportVar_matArray;
    }

    public Script.FieldID getFieldID_matArray() {
        return createFieldID(mExportVarIdx_matArray, null);
    }

    private final static int mExportVarIdx_allocVar = 4;
    private Allocation mExportVar_allocVar;
    public synchronized void set_allocVar(Allocation v) {
        setVar(mExportVarIdx_allocVar, v);
        mExportVar_allocVar = v;
    }

    public Allocation get_allocVar() {
        return mExportVar_allocVar;
    }

    public Script.FieldID getFieldID_allocVar() {
        return createFieldID(mExportVarIdx_allocVar, null);
    }

    private final static int mExportVarIdx_allocArray = 5;
    private Allocation[] mExportVar_allocArray;
    public synchronized void set_allocArray(Allocation[] v) {
        mExportVar_allocArray = v;
        FieldPacker fp = new FieldPacker(sIs64Bit ? 320 : 40);
        for (int ct1 = 0; ct1 < 10; ct1++) {
            fp.addObj(v[ct1]);
        }

        int []__dimArr = new int[1];
        __dimArr[0] = 10;
        setVar(mExportVarIdx_allocArray, fp, __ALLOCATION, __dimArr);
    }

    public Allocation[] get_allocArray() {
        return mExportVar_allocArray;
    }

    public Script.FieldID getFieldID_allocArray() {
        return createFieldID(mExportVarIdx_allocArray, null);
    }

    private final static int mExportVarIdx_ndVar = 6;
    private ScriptField_NonDivergent.Item mExportVar_ndVar;
    public synchronized void set_ndVar(ScriptField_NonDivergent.Item v) {
        mExportVar_ndVar = v;
        FieldPacker fp = new FieldPacker(8);
        fp.addI32(v.i);
        fp.addI32(v.j);
        int []__dimArr = new int[1];
        __dimArr[0] = 1;
        setVar(mExportVarIdx_ndVar, fp, __ScriptField_NonDivergent, __dimArr);
    }

    public ScriptField_NonDivergent.Item get_ndVar() {
        return mExportVar_ndVar;
    }

    public Script.FieldID getFieldID_ndVar() {
        return createFieldID(mExportVarIdx_ndVar, null);
    }

    private final static int mExportVarIdx_ndArray = 7;
    private ScriptField_NonDivergent.Item[] mExportVar_ndArray;
    public synchronized void set_ndArray(ScriptField_NonDivergent.Item[] v) {
        mExportVar_ndArray = v;
        FieldPacker fp = new FieldPacker(80);
        for (int ct1 = 0; ct1 < 10; ct1++) {
            fp.addI32(v[ct1].i);
            fp.addI32(v[ct1].j);
        }

        int []__dimArr = new int[1];
        __dimArr[0] = 10;
        setVar(mExportVarIdx_ndArray, fp, __ScriptField_NonDivergent, __dimArr);
    }

    public ScriptField_NonDivergent.Item[] get_ndArray() {
        return mExportVar_ndArray;
    }

    public Script.FieldID getFieldID_ndArray() {
        return createFieldID(mExportVarIdx_ndArray, null);
    }

    private final static int mExportVarIdx_dVar = 8;
    private ScriptField_Divergent.Item mExportVar_dVar;
    public synchronized void set_dVar(ScriptField_Divergent.Item v) {
        mExportVar_dVar = v;
        FieldPacker fp = new FieldPacker(sIs64Bit ? 48 : 12);
        fp.addI32(v.i);
        fp.skip(sIs64Bit ? 4 : 0);
        fp.addObj(v.a);
        fp.addI32(v.j);
        fp.skip(sIs64Bit ? 4 : 0);
        int []__dimArr = new int[1];
        __dimArr[0] = 1;
        setVar(mExportVarIdx_dVar, fp, __ScriptField_Divergent, __dimArr);
    }

    public ScriptField_Divergent.Item get_dVar() {
        return mExportVar_dVar;
    }

    public Script.FieldID getFieldID_dVar() {
        return createFieldID(mExportVarIdx_dVar, null);
    }

    private final static int mExportVarIdx_dArray = 9;
    private ScriptField_Divergent.Item[] mExportVar_dArray;
    public synchronized void set_dArray(ScriptField_Divergent.Item[] v) {
        mExportVar_dArray = v;
        FieldPacker fp = new FieldPacker(sIs64Bit ? 400 : 120);
        for (int ct1 = 0; ct1 < 10; ct1++) {
            fp.addI32(v[ct1].i);
            fp.skip(sIs64Bit ? 4 : 0);
            fp.addObj(v[ct1].a);
            fp.addI32(v[ct1].j);
            fp.skip(sIs64Bit ? 4 : 0);
        }

        int []__dimArr = new int[1];
        __dimArr[0] = 10;
        setVar(mExportVarIdx_dArray, fp, __ScriptField_Divergent, __dimArr);
    }

    public ScriptField_Divergent.Item[] get_dArray() {
        return mExportVar_dArray;
    }

    public Script.FieldID getFieldID_dArray() {
        return createFieldID(mExportVarIdx_dArray, null);
    }

    //private final static int mExportForEachIdx_root = 0;
    private final static int mExportForEachIdx_dnFe = 1;
    public Script.KernelID getKernelID_dnFe() {
        return createKernelID(mExportForEachIdx_dnFe, 7, null, null);
    }

    public void forEach_dnFe(Allocation ain, Allocation aout, ScriptField_DivergentNest.Item data) {
        forEach_dnFe(ain, aout, data, null);
    }

    public void forEach_dnFe(Allocation ain, Allocation aout, ScriptField_DivergentNest.Item data, Script.LaunchOptions sc) {
        // check ain
        if (!ain.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        // check aout
        if (!aout.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        Type t0, t1;        // Verify dimensions
        t0 = ain.getType();
        t1 = aout.getType();
        if ((t0.getCount() != t1.getCount()) ||
            (t0.getX() != t1.getX()) ||
            (t0.getY() != t1.getY()) ||
            (t0.getZ() != t1.getZ()) ||
            (t0.hasFaces()   != t1.hasFaces()) ||
            (t0.hasMipmaps() != t1.hasMipmaps())) {
            throw new RSRuntimeException("Dimension mismatch between parameters ain and aout!");
        }

        FieldPacker dnFe_fp = new FieldPacker(sIs64Bit ? 64 : 20);
        dnFe_fp.addI32(data.x);
        dnFe_fp.skip(sIs64Bit ? 4 : 0);
        dnFe_fp.addI32(data.d.i);
        dnFe_fp.skip(sIs64Bit ? 4 : 0);
        dnFe_fp.addObj(data.d.a);
        dnFe_fp.addI32(data.d.j);
        dnFe_fp.skip(sIs64Bit ? 4 : 0);
        dnFe_fp.addI32(data.y);
        dnFe_fp.skip(sIs64Bit ? 4 : 0);
        forEach(mExportForEachIdx_dnFe, ain, aout, dnFe_fp, sc);
    }

    private final static int mExportForEachIdx_dFe = 2;
    public Script.KernelID getKernelID_dFe() {
        return createKernelID(mExportForEachIdx_dFe, 7, null, null);
    }

    public void forEach_dFe(Allocation ain, Allocation aout, ScriptField_Divergent.Item data) {
        forEach_dFe(ain, aout, data, null);
    }

    public void forEach_dFe(Allocation ain, Allocation aout, ScriptField_Divergent.Item data, Script.LaunchOptions sc) {
        // check ain
        if (!ain.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        // check aout
        if (!aout.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        Type t0, t1;        // Verify dimensions
        t0 = ain.getType();
        t1 = aout.getType();
        if ((t0.getCount() != t1.getCount()) ||
            (t0.getX() != t1.getX()) ||
            (t0.getY() != t1.getY()) ||
            (t0.getZ() != t1.getZ()) ||
            (t0.hasFaces()   != t1.hasFaces()) ||
            (t0.hasMipmaps() != t1.hasMipmaps())) {
            throw new RSRuntimeException("Dimension mismatch between parameters ain and aout!");
        }

        FieldPacker dFe_fp = new FieldPacker(sIs64Bit ? 48 : 12);
        dFe_fp.addI32(data.i);
        dFe_fp.skip(sIs64Bit ? 4 : 0);
        dFe_fp.addObj(data.a);
        dFe_fp.addI32(data.j);
        dFe_fp.skip(sIs64Bit ? 4 : 0);
        forEach(mExportForEachIdx_dFe, ain, aout, dFe_fp, sc);
    }

    private final static int mExportForEachIdx_ndFe = 3;
    public Script.KernelID getKernelID_ndFe() {
        return createKernelID(mExportForEachIdx_ndFe, 7, null, null);
    }

    public void forEach_ndFe(Allocation ain, Allocation aout, ScriptField_NonDivergent.Item data) {
        forEach_ndFe(ain, aout, data, null);
    }

    public void forEach_ndFe(Allocation ain, Allocation aout, ScriptField_NonDivergent.Item data, Script.LaunchOptions sc) {
        // check ain
        if (!ain.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        // check aout
        if (!aout.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        Type t0, t1;        // Verify dimensions
        t0 = ain.getType();
        t1 = aout.getType();
        if ((t0.getCount() != t1.getCount()) ||
            (t0.getX() != t1.getX()) ||
            (t0.getY() != t1.getY()) ||
            (t0.getZ() != t1.getZ()) ||
            (t0.hasFaces()   != t1.hasFaces()) ||
            (t0.hasMipmaps() != t1.hasMipmaps())) {
            throw new RSRuntimeException("Dimension mismatch between parameters ain and aout!");
        }

        FieldPacker ndFe_fp = new FieldPacker(8);
        ndFe_fp.addI32(data.i);
        ndFe_fp.addI32(data.j);
        forEach(mExportForEachIdx_ndFe, ain, aout, ndFe_fp, sc);
    }

    private final static int mExportForEachIdx_allocFe = 4;
    public Script.KernelID getKernelID_allocFe() {
        return createKernelID(mExportForEachIdx_allocFe, 7, null, null);
    }

    public void forEach_allocFe(Allocation ain, Allocation aout, Allocation data) {
        forEach_allocFe(ain, aout, data, null);
    }

    public void forEach_allocFe(Allocation ain, Allocation aout, Allocation data, Script.LaunchOptions sc) {
        // check ain
        if (!ain.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        // check aout
        if (!aout.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        Type t0, t1;        // Verify dimensions
        t0 = ain.getType();
        t1 = aout.getType();
        if ((t0.getCount() != t1.getCount()) ||
            (t0.getX() != t1.getX()) ||
            (t0.getY() != t1.getY()) ||
            (t0.getZ() != t1.getZ()) ||
            (t0.hasFaces()   != t1.hasFaces()) ||
            (t0.hasMipmaps() != t1.hasMipmaps())) {
            throw new RSRuntimeException("Dimension mismatch between parameters ain and aout!");
        }

        FieldPacker allocFe_fp = new FieldPacker(sIs64Bit ? 32 : 4);
        allocFe_fp.addObj(data);
        forEach(mExportForEachIdx_allocFe, ain, aout, allocFe_fp, sc);
    }

    private final static int mExportForEachIdx_matFe = 5;
    public Script.KernelID getKernelID_matFe() {
        return createKernelID(mExportForEachIdx_matFe, 7, null, null);
    }

    public void forEach_matFe(Allocation ain, Allocation aout, Matrix2f data) {
        forEach_matFe(ain, aout, data, null);
    }

    public void forEach_matFe(Allocation ain, Allocation aout, Matrix2f data, Script.LaunchOptions sc) {
        // check ain
        if (!ain.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        // check aout
        if (!aout.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        Type t0, t1;        // Verify dimensions
        t0 = ain.getType();
        t1 = aout.getType();
        if ((t0.getCount() != t1.getCount()) ||
            (t0.getX() != t1.getX()) ||
            (t0.getY() != t1.getY()) ||
            (t0.getZ() != t1.getZ()) ||
            (t0.hasFaces()   != t1.hasFaces()) ||
            (t0.hasMipmaps() != t1.hasMipmaps())) {
            throw new RSRuntimeException("Dimension mismatch between parameters ain and aout!");
        }

        FieldPacker matFe_fp = new FieldPacker(16);
        matFe_fp.addMatrix(data);
        forEach(mExportForEachIdx_matFe, ain, aout, matFe_fp, sc);
    }

    private final static int mExportForEachIdx_intFe = 6;
    public Script.KernelID getKernelID_intFe() {
        return createKernelID(mExportForEachIdx_intFe, 7, null, null);
    }

    public void forEach_intFe(Allocation ain, Allocation aout, int data) {
        forEach_intFe(ain, aout, data, null);
    }

    public void forEach_intFe(Allocation ain, Allocation aout, int data, Script.LaunchOptions sc) {
        // check ain
        if (!ain.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        // check aout
        if (!aout.getType().getElement().isCompatible(__I32)) {
            throw new RSRuntimeException("Type mismatch with I32!");
        }
        Type t0, t1;        // Verify dimensions
        t0 = ain.getType();
        t1 = aout.getType();
        if ((t0.getCount() != t1.getCount()) ||
            (t0.getX() != t1.getX()) ||
            (t0.getY() != t1.getY()) ||
            (t0.getZ() != t1.getZ()) ||
            (t0.hasFaces()   != t1.hasFaces()) ||
            (t0.hasMipmaps() != t1.hasMipmaps())) {
            throw new RSRuntimeException("Dimension mismatch between parameters ain and aout!");
        }

        FieldPacker intFe_fp = new FieldPacker(4);
        intFe_fp.addI32(data);
        forEach(mExportForEachIdx_intFe, ain, aout, intFe_fp, sc);
    }

    private final static int mExportFuncIdx_ndInv = 0;
    public Script.InvokeID getInvokeID_ndInv() {
        return createInvokeID(mExportFuncIdx_ndInv);
    }

    public void invoke_ndInv(int i, int j) {
        FieldPacker ndInv_fp = new FieldPacker(8);
        ndInv_fp.addI32(i);
        ndInv_fp.addI32(j);
        invoke(mExportFuncIdx_ndInv, ndInv_fp);
    }

    private final static int mExportFuncIdx_dInv = 1;
    public Script.InvokeID getInvokeID_dInv() {
        return createInvokeID(mExportFuncIdx_dInv);
    }

    public void invoke_dInv(int i, Allocation a, int j) {
        FieldPacker dInv_fp = new FieldPacker(sIs64Bit ? 48 : 12);
        dInv_fp.addI32(i);
        dInv_fp.skip(sIs64Bit ? 4 : 0);
        dInv_fp.addObj(a);
        dInv_fp.addI32(j);
        dInv_fp.skip(sIs64Bit ? 4 : 0);
        invoke(mExportFuncIdx_dInv, dInv_fp);
    }

    private final static int mExportFuncIdx_dnInv = 2;
    public Script.InvokeID getInvokeID_dnInv() {
        return createInvokeID(mExportFuncIdx_dnInv);
    }

    public void invoke_dnInv(int x, ScriptField_Divergent.Item d, int y) {
        FieldPacker dnInv_fp = new FieldPacker(sIs64Bit ? 64 : 20);
        dnInv_fp.addI32(x);
        dnInv_fp.skip(sIs64Bit ? 4 : 0);
        dnInv_fp.addI32(d.i);
        dnInv_fp.skip(sIs64Bit ? 4 : 0);
        dnInv_fp.addObj(d.a);
        dnInv_fp.addI32(d.j);
        dnInv_fp.skip(sIs64Bit ? 4 : 0);
        dnInv_fp.addI32(y);
        dnInv_fp.skip(sIs64Bit ? 4 : 0);
        invoke(mExportFuncIdx_dnInv, dnInv_fp);
    }

    private static boolean sIs64Bit;

    static {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            sIs64Bit = Process.is64Bit();
        }

        else {
            try {
                Field f = RenderScript.class.getDeclaredField("sPointerSize");
                f.setAccessible(true);
                sIs64Bit = (f.getInt(null) == 8);
            }

            catch (Throwable e) {
                sIs64Bit = false;
            }

        }

    }

}

