198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/*
298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Copyright (C) 2012 The Android Open Source Project
398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * you may not use this file except in compliance with the License.
698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * You may obtain a copy of the License at
798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
1098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Unless required by applicable law or agreed to in writing, software
1198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * See the License for the specific language governing permissions and
1498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * limitations under the License.
1598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */
1698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
1798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspackage android.support.v8.renderscript;
1898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
19ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsimport android.util.SparseArray;
20ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
2198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/**
2298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
2398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams **/
2498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspublic class Script extends BaseObj {
25ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
26ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    /**
27ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * KernelID is an identifier for a Script + root function pair. It is used
28ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * as an identifier for ScriptGroup creation.
29ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     *
30ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * This class should not be directly created. Instead use the method in the
31ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * reflected or intrinsic code "getKernelID_funcname()".
32ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     *
33ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     */
34ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    public static final class KernelID extends BaseObj {
35ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        Script mScript;
36ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        int mSlot;
37ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        int mSig;
38ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        KernelID(int id, RenderScript rs, Script s, int slot, int sig) {
39ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams            super(id, rs);
40ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams            mScript = s;
41ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams            mSlot = slot;
42ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams            mSig = sig;
43ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        }
44ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    }
45ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
46ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    private final SparseArray<KernelID> mKIDs = new SparseArray<KernelID>();
47ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    /**
48ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * Only to be used by generated reflected classes.
49ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     *
50ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     *
51ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * @param slot
52ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * @param sig
53ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * @param ein
54ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * @param eout
55ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     *
56ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * @return KernelID
57ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     */
58ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    protected KernelID createKernelID(int slot, int sig, Element ein, Element eout) {
59ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        KernelID k = mKIDs.get(slot);
60ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        if (k != null) {
61ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams            return k;
62ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        }
63ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
64ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        int id = mRS.nScriptKernelIDCreate(getID(mRS), slot, sig);
65ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        if (id == 0) {
66ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams            throw new RSDriverException("Failed to create KernelID");
67ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        }
68ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
69ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        k = new KernelID(id, mRS, this, slot, sig);
70ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        mKIDs.put(slot, k);
71ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        return k;
72ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    }
73ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
74ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    /**
75ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * FieldID is an identifier for a Script + exported field pair. It is used
76ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * as an identifier for ScriptGroup creation.
77ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     *
78ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * This class should not be directly created. Instead use the method in the
79ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * reflected or intrinsic code "getFieldID_funcname()".
80ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     *
81ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     */
82ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    public static final class FieldID extends BaseObj {
83ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        Script mScript;
84ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        int mSlot;
85ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        FieldID(int id, RenderScript rs, Script s, int slot) {
86ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams            super(id, rs);
87ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams            mScript = s;
88ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams            mSlot = slot;
89ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        }
90ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    }
91ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
92ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    private final SparseArray<FieldID> mFIDs = new SparseArray();
93ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    /**
94ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * Only to be used by generated reflected classes.
95ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     *
96ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * @param slot
97ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * @param e
98ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     *
99ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     * @return FieldID
100ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams     */
101ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    protected FieldID createFieldID(int slot, Element e) {
102ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        FieldID f = mFIDs.get(slot);
103ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        if (f != null) {
104ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams            return f;
105ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        }
106ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
107ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        int id = mRS.nScriptFieldIDCreate(getID(mRS), slot);
108ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        if (id == 0) {
109ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams            throw new RSDriverException("Failed to create FieldID");
110ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        }
111ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
112ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        f = new FieldID(id, mRS, this, slot);
113ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        mFIDs.put(slot, f);
114ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams        return f;
115ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    }
116ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
117ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
11898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
11998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
12098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
12198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param slot
12298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
12398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    protected void invoke(int slot) {
12498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.nScriptInvoke(getID(mRS), slot);
12598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
12698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
12798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
12898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
12998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
13098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param slot
13198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param v
13298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
13398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    protected void invoke(int slot, FieldPacker v) {
13498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (v != null) {
13598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mRS.nScriptInvokeV(getID(mRS), slot, v.getData());
13698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        } else {
13798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mRS.nScriptInvoke(getID(mRS), slot);
13898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
13998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
14098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
14198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
14298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
14398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
14498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param slot
14598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param ain
14698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param aout
14798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param v
14898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
14998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v) {
15098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (ain == null && aout == null) {
15198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSIllegalArgumentException(
15298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams                "At least one of ain or aout is required to be non-null.");
15398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
15498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        int in_id = 0;
15598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (ain != null) {
15698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            in_id = ain.getID(mRS);
15798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
15898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        int out_id = 0;
15998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (aout != null) {
16098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            out_id = aout.getID(mRS);
16198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
16298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        byte[] params = null;
16398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (v != null) {
16498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            params = v.getData();
16598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
16698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.nScriptForEach(getID(mRS), slot, in_id, out_id, params);
16798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
16898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
16998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
17098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    Script(int id, RenderScript rs) {
17198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        super(id, rs);
17298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
17398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
17498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
17598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
17698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
17798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
17898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param va
17998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param slot
18098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
18198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void bindAllocation(Allocation va, int slot) {
18298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.validate();
18398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (va != null) {
18498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mRS.nScriptBindAllocation(getID(mRS), va.getID(mRS), slot);
18598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        } else {
18698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mRS.nScriptBindAllocation(getID(mRS), 0, slot);
18798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
18898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
18998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
19098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
19198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
19298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
19398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param index
19498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param v
19598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
19698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setVar(int index, float v) {
19798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.nScriptSetVarF(getID(mRS), index, v);
19898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
19998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
20098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
20198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
20298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
20398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param index
20498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param v
20598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
20698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setVar(int index, double v) {
20798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.nScriptSetVarD(getID(mRS), index, v);
20898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
20998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
21098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
21198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
21298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
21398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param index
21498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param v
21598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
21698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setVar(int index, int v) {
21798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.nScriptSetVarI(getID(mRS), index, v);
21898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
21998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
22098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
22198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
22298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
22398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param index
22498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param v
22598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
22698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setVar(int index, long v) {
22798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.nScriptSetVarJ(getID(mRS), index, v);
22898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
22998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
23098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
23198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
23298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
23398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param index
23498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param v
23598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
23698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setVar(int index, boolean v) {
23798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.nScriptSetVarI(getID(mRS), index, v ? 1 : 0);
23898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
23998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
24098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
24198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
24298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
24398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param index
24498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param o
24598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
24698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setVar(int index, BaseObj o) {
24798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : o.getID(mRS));
24898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
24998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
25098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
25198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
25298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
25398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param index
25498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param v
25598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
25698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setVar(int index, FieldPacker v) {
25798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.nScriptSetVarV(getID(mRS), index, v.getData());
25898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
25998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
26098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    /**
26198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * Only intended for use by generated reflected code.
26298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     *
26398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param index
26498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param v
26598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param e
26698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     * @param dims
26798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams     */
26898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setVar(int index, FieldPacker v, Element e, int[] dims) {
26998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), e.getID(mRS), dims);
27098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
27198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
27298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void setTimeZone(String timeZone) {
27398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mRS.validate();
27498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        try {
27598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mRS.nScriptSetTimeZone(getID(mRS), timeZone.getBytes("UTF-8"));
27698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        } catch (java.io.UnsupportedEncodingException e) {
27798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RuntimeException(e);
27898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
27998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
28098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
28198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public static class Builder {
28298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        RenderScript mRS;
28398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
28498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        Builder(RenderScript rs) {
28598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mRS = rs;
28698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
28798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
28898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
28998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
29098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public static class FieldBase {
29198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        protected Element mElement;
29298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        protected Allocation mAllocation;
29398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
29498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        protected void init(RenderScript rs, int dimx) {
29598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT);
29698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
29798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
29898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        protected void init(RenderScript rs, int dimx, int usages) {
29998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT | usages);
30098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
30198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
30298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        protected FieldBase() {
30398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
30498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
30598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        public Element getElement() {
30698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            return mElement;
30798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
30898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
30998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        public Type getType() {
31098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            return mAllocation.getType();
31198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
31298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
31398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        public Allocation getAllocation() {
31498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            return mAllocation;
31598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
31698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
31798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        //@Override
31898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        public void updateAllocation() {
31998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
32098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
32198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams}
32298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
323