Script.java revision 8919a441f977cb787d244aa42cc2d4dda1cbfa11
145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams/*
245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Copyright (C) 2012 The Android Open Source Project
345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams *
445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * you may not use this file except in compliance with the License.
645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * You may obtain a copy of the License at
745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams *
845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams *
1045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Unless required by applicable law or agreed to in writing, software
1145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * See the License for the specific language governing permissions and
1445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * limitations under the License.
1545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */
1645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
1745d443665f5ce7efa934706a89883f0cc87f3513Jason Samspackage android.support.v8.renderscript;
1845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
19a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Samsimport android.util.SparseArray;
20a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams
2145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams/**
22032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * The parent class for all executable scripts. This should not be used by
23032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * applications.
2445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams **/
2545d443665f5ce7efa934706a89883f0cc87f3513Jason Samspublic class Script extends BaseObj {
26a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    /**
276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang     * Determine if Incremental Intrinsic Support is needed
286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang     *
296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang     */
306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang    private boolean mUseIncSupp;
316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang    protected void setIncSupp(boolean useInc) {
326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        mUseIncSupp = useInc;
336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang    }
346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang    protected boolean isIncSupp() {
356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        return mUseIncSupp;
366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang    }
376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang    /**
386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang     * An allocation for the compat context will be created when needed
396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang     * e.g. foreach(ain, aout), setVar(ain);
406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang     *
416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang     */
428919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang    long getDummyAlloc(Allocation ain) {
436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        long dInElement = 0;
446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        long dInType = 0;
456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        long dummyAlloc = 0;
466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        if (ain != null) {
476f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            dInElement = ain.getType().getElement().getDummyElement(mRS);
486f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            dInType = ain.getType().getDummyType(mRS, dInElement);
496f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            dummyAlloc = mRS.nIncAllocationCreateTyped(ain.getID(mRS), dInType);
506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            ain.setIncAllocID(dummyAlloc);
516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        }
526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang
536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        return dummyAlloc;
546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang    }
556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang    /**
56a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * KernelID is an identifier for a Script + root function pair. It is used
57a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * as an identifier for ScriptGroup creation.
58a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     *
59a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * This class should not be directly created. Instead use the method in the
60a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * reflected or intrinsic code "getKernelID_funcname()".
61a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     *
62a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     */
63a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    public static final class KernelID extends BaseObj {
64baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray        android.renderscript.Script.KernelID mN;
65a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        Script mScript;
66a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        int mSlot;
67a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        int mSig;
68bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        KernelID(long id, RenderScript rs, Script s, int slot, int sig) {
69a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams            super(id, rs);
70a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams            mScript = s;
71a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams            mSlot = slot;
72a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams            mSig = sig;
73a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        }
74a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    }
75a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams
76a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    private final SparseArray<KernelID> mKIDs = new SparseArray<KernelID>();
77a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    /**
78a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * Only to be used by generated reflected classes.
79a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     *
80a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     *
81a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * @param slot
82a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * @param sig
83a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * @param ein
84a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * @param eout
85a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     *
86a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * @return KernelID
87a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     */
88a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    protected KernelID createKernelID(int slot, int sig, Element ein, Element eout) {
89a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        KernelID k = mKIDs.get(slot);
90a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        if (k != null) {
91a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams            return k;
92a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        }
936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang
946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        long id = mRS.nScriptKernelIDCreate(getID(mRS), slot, sig, mUseIncSupp);
95a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        if (id == 0) {
96a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams            throw new RSDriverException("Failed to create KernelID");
97a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        }
98a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams
99a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        k = new KernelID(id, mRS, this, slot, sig);
100baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray
101a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        mKIDs.put(slot, k);
102a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        return k;
103a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    }
104a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams
105a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    /**
106086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni     * InvokeID is an identifier for a invoke function. It is used
107086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni     * as an identifier for ScriptGroup creation.
108086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni     *
109086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni     * This class should not be directly created. Instead use the method in the
110086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni     * reflected or intrinsic code "getInvokeID_funcname()".
111086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni     *
112086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni     * @hide
113086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni     */
114086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    public static final class InvokeID extends BaseObj {
115086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        Script mScript;
116086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        int mSlot;
117086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        InvokeID(long id, RenderScript rs, Script s, int slot) {
118086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni            super(id, rs);
119086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni            mScript = s;
120086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni            mSlot = slot;
121086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        }
122086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    }
123086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni
124086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    private final SparseArray<InvokeID> mIIDs = new SparseArray<InvokeID>();
125086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    /**
126086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni     * Only to be used by generated reflected classes.
127086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni     */
128086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    protected InvokeID createInvokeID(int slot) {
129086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        InvokeID i = mIIDs.get(slot);
130086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        if (i != null) {
131086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni            return i;
132086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        }
133086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni
134086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        long id = mRS.nScriptInvokeIDCreate(getID(mRS), slot);
135086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        if (id == 0) {
136086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni            throw new RSDriverException("Failed to create KernelID");
137086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        }
138086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni
139086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        i = new InvokeID(id, mRS, this, slot);
140086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        mIIDs.put(slot, i);
141086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni        return i;
142086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    }
143086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni
144086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni    /**
145a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * FieldID is an identifier for a Script + exported field pair. It is used
146a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * as an identifier for ScriptGroup creation.
147a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     *
148a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * This class should not be directly created. Instead use the method in the
149a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * reflected or intrinsic code "getFieldID_funcname()".
150a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     *
151a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     */
152a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    public static final class FieldID extends BaseObj {
153baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray        android.renderscript.Script.FieldID mN;
154a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        Script mScript;
155a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        int mSlot;
156bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        FieldID(long id, RenderScript rs, Script s, int slot) {
157a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams            super(id, rs);
158a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams            mScript = s;
159a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams            mSlot = slot;
160a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        }
161a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    }
162a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams
163a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    private final SparseArray<FieldID> mFIDs = new SparseArray();
164a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    /**
165a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * Only to be used by generated reflected classes.
166a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     *
167a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * @param slot
168a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * @param e
169a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     *
170a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     * @return FieldID
171a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams     */
172a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    protected FieldID createFieldID(int slot, Element e) {
173a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        FieldID f = mFIDs.get(slot);
174a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        if (f != null) {
175a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams            return f;
176a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        }
177a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams
1786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        long id = mRS.nScriptFieldIDCreate(getID(mRS), slot, mUseIncSupp);
179a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        if (id == 0) {
180a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams            throw new RSDriverException("Failed to create FieldID");
181a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        }
182a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams
183a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        f = new FieldID(id, mRS, this, slot);
184a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        mFIDs.put(slot, f);
185a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams        return f;
186a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams    }
187a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams
18845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    /**
18945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * Only intended for use by generated reflected code.
19045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     *
19145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param slot
19245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     */
19345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    protected void invoke(int slot) {
1946f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        mRS.nScriptInvoke(getID(mRS), slot, mUseIncSupp);
19545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
19645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
19745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    /**
19845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * Only intended for use by generated reflected code.
19945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     *
20045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param slot
20145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param v
20245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     */
20345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    protected void invoke(int slot, FieldPacker v) {
20445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        if (v != null) {
2056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptInvokeV(getID(mRS), slot, v.getData(), mUseIncSupp);
20645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        } else {
2076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptInvoke(getID(mRS), slot, mUseIncSupp);
20845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
20945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
21045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
21145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    /**
21245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * Only intended for use by generated reflected code.
21345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     *
214baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray     * @param va
215baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray     * @param slot
216baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray     */
217baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray    public void bindAllocation(Allocation va, int slot) {
218baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray        mRS.validate();
219baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray        if (va != null) {
2206f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptBindAllocation(getID(mRS), va.getID(mRS), slot, mUseIncSupp);
221baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray        } else {
2226f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptBindAllocation(getID(mRS), 0, slot, mUseIncSupp);
223baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray        }
224baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray    }
225baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray
226baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray    public void setTimeZone(String timeZone) {
227baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray        mRS.validate();
228baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray        try {
2296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptSetTimeZone(getID(mRS), timeZone.getBytes("UTF-8"), mUseIncSupp);
230baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray        } catch (java.io.UnsupportedEncodingException e) {
231baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray            throw new RuntimeException(e);
232baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray        }
233baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray    }
234baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray
235baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray
236baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray    /**
237baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray     * Only intended for use by generated reflected code.
238baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray     *
23945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param slot
24045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param ain
24145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param aout
24245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param v
24345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     */
24445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v) {
24545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        if (ain == null && aout == null) {
24645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams            throw new RSIllegalArgumentException(
24745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams                "At least one of ain or aout is required to be non-null.");
24845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
249bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        long in_id = 0;
2506f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        long out_id = 0;
25145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        if (ain != null) {
25245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams            in_id = ain.getID(mRS);
25345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
25445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        if (aout != null) {
25545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams            out_id = aout.getID(mRS);
25645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
2576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang
25845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        byte[] params = null;
25945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        if (v != null) {
26045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams            params = v.getData();
26145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
2626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang
2636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        if (mUseIncSupp) {
2646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            long ainInc = getDummyAlloc(ain);
2656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            long aoutInc = getDummyAlloc(aout);
2666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptForEach(getID(mRS), slot, ainInc, aoutInc, params, mUseIncSupp);
2676f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        } else {
2686f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptForEach(getID(mRS), slot, in_id, out_id, params, mUseIncSupp);
2696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        }
27045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
27145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
272032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines    /**
273032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     * Only intended for use by generated reflected code.
274032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     *
275032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     * @param slot
276032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     * @param ain
277032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     * @param aout
278032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     * @param v
279032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     * @param sc
280032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     */
281e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray    protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v, LaunchOptions sc) {
282e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        if (ain == null && aout == null) {
283dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines            throw new RSIllegalArgumentException(
284dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines                "At least one of ain or aout is required to be non-null.");
285dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines        }
286dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines
287dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines        if (sc == null) {
288dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines            forEach(slot, ain, aout, v);
289dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines            return;
290e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
291bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang        long in_id = 0;
2926f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        long out_id = 0;
293e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        if (ain != null) {
294e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            in_id = ain.getID(mRS);
295e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
296e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        if (aout != null) {
297e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            out_id = aout.getID(mRS);
298e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
2996f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang
300e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        byte[] params = null;
301e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        if (v != null) {
302e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            params = v.getData();
303e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
3046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        if (mUseIncSupp) {
3056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            long ainInc = getDummyAlloc(ain);
3066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            long aoutInc = getDummyAlloc(aout);
3076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptForEachClipped(getID(mRS), slot, ainInc, aoutInc, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend, mUseIncSupp);
3086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        } else {
3096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptForEachClipped(getID(mRS), slot, in_id, out_id, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend, mUseIncSupp);
3106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        }
311e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray    }
312e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray
313bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang    Script(long id, RenderScript rs) {
31445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        super(id, rs);
3156f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        mUseIncSupp = false;
31645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
31745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
31845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    /**
31945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * Only intended for use by generated reflected code.
32045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     *
32145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param index
32245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param v
32345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     */
32445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    public void setVar(int index, float v) {
3256f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        mRS.nScriptSetVarF(getID(mRS), index, v, mUseIncSupp);
32645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
32745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
32845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    /**
32945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * Only intended for use by generated reflected code.
33045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     *
33145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param index
33245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param v
33345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     */
33445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    public void setVar(int index, double v) {
3356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        mRS.nScriptSetVarD(getID(mRS), index, v, mUseIncSupp);
33645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
33745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
33845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    /**
33945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * Only intended for use by generated reflected code.
34045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     *
34145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param index
34245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param v
34345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     */
34445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    public void setVar(int index, int v) {
3456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        mRS.nScriptSetVarI(getID(mRS), index, v, mUseIncSupp);
34645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
34745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
34845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    /**
34945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * Only intended for use by generated reflected code.
35045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     *
35145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param index
35245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param v
35345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     */
35445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    public void setVar(int index, long v) {
35569331f9e1951415062a79181551abbfc440e6b35Miao Wang        mRS.nScriptSetVarJ(getID(mRS), index, v, mUseIncSupp);
35645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
35745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
35845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    /**
35945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * Only intended for use by generated reflected code.
36045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     *
36145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param index
36245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param v
36345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     */
36445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    public void setVar(int index, boolean v) {
3656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        mRS.nScriptSetVarI(getID(mRS), index, v ? 1 : 0, mUseIncSupp);
36645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
36745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
36845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    /**
36945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * Only intended for use by generated reflected code.
37045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     *
37145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param index
37245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param o
37345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     */
37445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    public void setVar(int index, BaseObj o) {
3756f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        if (mUseIncSupp) {
3766f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            long oInc = getDummyAlloc((Allocation)o);
3776f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : oInc, mUseIncSupp);
3786f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        } else {
3796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : o.getID(mRS), mUseIncSupp);
3806f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        }
38145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
38245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
38345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    /**
38445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * Only intended for use by generated reflected code.
38545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     *
38645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param index
38745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param v
38845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     */
38945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    public void setVar(int index, FieldPacker v) {
3906f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        mRS.nScriptSetVarV(getID(mRS), index, v.getData(), mUseIncSupp);
39145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
39245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
39345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    /**
39445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * Only intended for use by generated reflected code.
39545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     *
39645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param index
39745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param v
39845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param e
39945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     * @param dims
40045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams     */
40145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    public void setVar(int index, FieldPacker v, Element e, int[] dims) {
4026f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        if (mUseIncSupp) {
4036f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            long dElement = e.getDummyElement(mRS);
4046f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), dElement, dims, mUseIncSupp);
4056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        } else {
4066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang            mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), e.getID(mRS), dims, mUseIncSupp);
4076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang        }
40845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
40945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
410032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines    /**
411032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     * Only intended for use by generated reflected code.
412032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     *
413032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     */
41445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    public static class Builder {
41545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        RenderScript mRS;
41645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
41745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        Builder(RenderScript rs) {
41845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams            mRS = rs;
41945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
42045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
42145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
42245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
423032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines    /**
424032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     * Only intended for use by generated reflected code.
425032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     *
426032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     */
42745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    public static class FieldBase {
42845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        protected Element mElement;
42945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        protected Allocation mAllocation;
43045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
43145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        protected void init(RenderScript rs, int dimx) {
43245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams            mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT);
43345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
43445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
43545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        protected void init(RenderScript rs, int dimx, int usages) {
43645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams            mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT | usages);
43745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
43845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
43945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        protected FieldBase() {
44045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
44145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
44245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        public Element getElement() {
44345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams            return mElement;
44445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
44545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
44645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        public Type getType() {
44745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams            return mAllocation.getType();
44845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
44945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
45045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        public Allocation getAllocation() {
45145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams            return mAllocation;
45245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
45345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams
45445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        //@Override
45545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        public void updateAllocation() {
45645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams        }
45745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams    }
458e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray
459e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray
460032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines    /**
461032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     * Class used to specify clipping for a kernel launch.
462032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     *
463032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines     */
464032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines    public static final class LaunchOptions {
465032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        private int xstart = 0;
466032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        private int ystart = 0;
467032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        private int xend = 0;
468032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        private int yend = 0;
469032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        private int zstart = 0;
470032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        private int zend = 0;
471032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        private int strategy;
472032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines
473032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        /**
474032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * Set the X range.  If the end value is set to 0 the X dimension is not
475032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * clipped.
476032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
477032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @param xstartArg Must be >= 0
478032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @param xendArg Must be >= xstartArg
479032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
480032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @return LaunchOptions
481032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         */
482e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        public LaunchOptions setX(int xstartArg, int xendArg) {
483e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            if (xstartArg < 0 || xendArg <= xstartArg) {
484e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray                throw new RSIllegalArgumentException("Invalid dimensions");
485e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            }
486e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            xstart = xstartArg;
487e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            xend = xendArg;
488e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            return this;
489e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
490e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray
491032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        /**
492032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * Set the Y range.  If the end value is set to 0 the Y dimension is not
493032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * clipped.
494032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
495032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @param ystartArg Must be >= 0
496032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @param yendArg Must be >= ystartArg
497032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
498032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @return LaunchOptions
499032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         */
500e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        public LaunchOptions setY(int ystartArg, int yendArg) {
501e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            if (ystartArg < 0 || yendArg <= ystartArg) {
502e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray                throw new RSIllegalArgumentException("Invalid dimensions");
503e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            }
504e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            ystart = ystartArg;
505e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            yend = yendArg;
506e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            return this;
507e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
508e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray
509032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        /**
510032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * Set the Z range.  If the end value is set to 0 the Z dimension is not
511032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * clipped.
512032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
513032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @param zstartArg Must be >= 0
514032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @param zendArg Must be >= zstartArg
515032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
516032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @return LaunchOptions
517032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         */
518e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        public LaunchOptions setZ(int zstartArg, int zendArg) {
519e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            if (zstartArg < 0 || zendArg <= zstartArg) {
520e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray                throw new RSIllegalArgumentException("Invalid dimensions");
521e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            }
522e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            zstart = zstartArg;
523e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            zend = zendArg;
524e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            return this;
525e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
526e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray
527e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray
528032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        /**
529032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * Returns the current X start
530032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
531032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @return int current value
532032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         */
533e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        public int getXStart() {
534e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            return xstart;
535e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
536032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        /**
537032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * Returns the current X end
538032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
539032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @return int current value
540032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         */
541e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        public int getXEnd() {
542e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            return xend;
543e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
544032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        /**
545032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * Returns the current Y start
546032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
547032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @return int current value
548032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         */
549e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        public int getYStart() {
550e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            return ystart;
551e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
552032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        /**
553032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * Returns the current Y end
554032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
555032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @return int current value
556032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         */
557e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        public int getYEnd() {
558e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            return yend;
559e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
560032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        /**
561032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * Returns the current Z start
562032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
563032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @return int current value
564032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         */
565e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        public int getZStart() {
566e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            return zstart;
567e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
568032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines        /**
569032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * Returns the current Z end
570032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         *
571032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         * @return int current value
572032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines         */
573e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        public int getZEnd() {
574e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray            return zend;
575e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray        }
576e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray
577e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray    }
57845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams}
579