1277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross/*
2277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * Copyright (C) 2011-2014 The Android Open Source Project
3277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross *
4277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * Licensed under the Apache License, Version 2.0 (the "License");
5277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * you may not use this file except in compliance with the License.
6277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * You may obtain a copy of the License at
7277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross *
8277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross *      http://www.apache.org/licenses/LICENSE-2.0
9277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross *
10277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * Unless required by applicable law or agreed to in writing, software
11277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * distributed under the License is distributed on an "AS IS" BASIS,
12277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * See the License for the specific language governing permissions and
14277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * limitations under the License.
15277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross */
16277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
17277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross/*
18277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * This file is auto-generated. DO NOT MODIFY!
19277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * The source Renderscript file: reduce_general_result.rs
20277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross */
21277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
22277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grosspackage result;
23277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
24277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grossimport android.renderscript.*;
25277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grossimport result.reduce_general_resultBitCode;
26277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
27277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross/**
28277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross * @hide
29277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross */
30277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Grosspublic class ScriptField_MyStruct extends android.renderscript.Script.FieldBase {
31277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    static public class Item {
32277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
33277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        float f;
34277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        double d;
35277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
36277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Item() {
37277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
38277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
39277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
40277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
41277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private Item mItemArray[];
42277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private FieldPacker mIOBuffer;
43277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private static java.lang.ref.WeakReference<Element> mElementCache = new java.lang.ref.WeakReference<Element>(null);
44277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static Element createElement(RenderScript rs) {
45277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Element.Builder eb = new Element.Builder(rs);
46277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        eb.add(Element.F32(rs), "f");
47277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        eb.add(Element.U32(rs), "#rs_padding_1");
48277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        eb.add(Element.F64(rs), "d");
49277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return eb.create();
50277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
51277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
52277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private  ScriptField_MyStruct(RenderScript rs) {
53277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mItemArray = null;
54277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mIOBuffer = null;
55277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mElement = createElement(rs);
56277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
57277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
58277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public  ScriptField_MyStruct(RenderScript rs, int count) {
59277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mItemArray = null;
60277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mIOBuffer = null;
61277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mElement = createElement(rs);
62277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        init(rs, count);
63277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
64277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
65277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public  ScriptField_MyStruct(RenderScript rs, int count, int usages) {
66277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mItemArray = null;
67277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mIOBuffer = null;
68277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mElement = createElement(rs);
69277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        init(rs, count, usages);
70277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
71277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
72277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static ScriptField_MyStruct create1D(RenderScript rs, int dimX, int usages) {
73277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
74277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        obj.mAllocation = Allocation.createSized(rs, obj.mElement, dimX, usages);
75277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return obj;
76277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
77277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
78277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static ScriptField_MyStruct create1D(RenderScript rs, int dimX) {
79277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return create1D(rs, dimX, Allocation.USAGE_SCRIPT);
80277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
81277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
82277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static ScriptField_MyStruct create2D(RenderScript rs, int dimX, int dimY) {
83277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return create2D(rs, dimX, dimY, Allocation.USAGE_SCRIPT);
84277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
85277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
86277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static ScriptField_MyStruct create2D(RenderScript rs, int dimX, int dimY, int usages) {
87277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
88277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Type.Builder b = new Type.Builder(rs, obj.mElement);
89277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        b.setX(dimX);
90277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        b.setY(dimY);
91277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Type t = b.create();
92277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        obj.mAllocation = Allocation.createTyped(rs, t, usages);
93277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return obj;
94277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
95277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
96277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static Type.Builder createTypeBuilder(RenderScript rs) {
97277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Element e = createElement(rs);
98277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return new Type.Builder(rs, e);
99277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
100277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
101277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public static ScriptField_MyStruct createCustom(RenderScript rs, Type.Builder tb, int usages) {
102277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
103277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        Type t = tb.create();
104277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (t.getElement() != obj.mElement) {
105277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            throw new RSIllegalArgumentException("Type.Builder did not match expected element type.");
106277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
107277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        obj.mAllocation = Allocation.createTyped(rs, t, usages);
108277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return obj;
109277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
110277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
111277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private void copyToArrayLocal(Item i, FieldPacker fp) {
112277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        fp.addF32(i.f);
113277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        fp.skip(4);
114277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        fp.addF64(i.d);
115277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
116277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
117277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    private void copyToArray(Item i, int index) {
118277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
119277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mIOBuffer.reset(index * mElement.getBytesSize());
120277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        copyToArrayLocal(i, mIOBuffer);
121277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
122277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
123277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public synchronized void set(Item i, int index, boolean copyNow) {
124277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
125277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mItemArray[index] = i;
126277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (copyNow)  {
127277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            copyToArray(i, index);
128277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            FieldPacker fp = new FieldPacker(mElement.getBytesSize());
129277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            copyToArrayLocal(i, fp);
130277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mAllocation.setFromFieldPacker(index, fp);
131277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
132277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
133277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
134277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
135277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public synchronized Item get(int index) {
136277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mItemArray == null) return null;
137277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return mItemArray[index];
138277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
139277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
140277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public synchronized void set_f(int index, float v, boolean copyNow) {
141277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
142277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
143277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mItemArray[index] == null) mItemArray[index] = new Item();
144277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mItemArray[index].f = v;
145277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (copyNow)  {
146277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mIOBuffer.reset(index * mElement.getBytesSize());
147277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mIOBuffer.addF32(v);
148277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            FieldPacker fp = new FieldPacker(4);
149277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            fp.addF32(v);
150277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mAllocation.setFromFieldPacker(index, 0, fp);
151277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
152277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
153277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
154277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
155277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public synchronized void set_d(int index, double v, boolean copyNow) {
156277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
157277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
158277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mItemArray[index] == null) mItemArray[index] = new Item();
159277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mItemArray[index].d = v;
160277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (copyNow)  {
161277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mIOBuffer.reset(index * mElement.getBytesSize() + 8);
162277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mIOBuffer.addF64(v);
163277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            FieldPacker fp = new FieldPacker(8);
164277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            fp.addF64(v);
165277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mAllocation.setFromFieldPacker(index, 2, fp);
166277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
167277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
168277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
169277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
170277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public synchronized float get_f(int index) {
171277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mItemArray == null) return 0;
172277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return mItemArray[index].f;
173277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
174277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
175277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public synchronized double get_d(int index) {
176277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mItemArray == null) return 0;
177277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        return mItemArray[index].d;
178277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
179277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
180277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public synchronized void copyAll() {
181277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        for (int ct = 0; ct < mItemArray.length; ct++) copyToArray(mItemArray[ct], ct);
182277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mAllocation.setFromFieldPacker(0, mIOBuffer);
183277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
184277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
185277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    public synchronized void resize(int newSize) {
186277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mItemArray != null)  {
187277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            int oldSize = mItemArray.length;
188277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            int copySize = Math.min(oldSize, newSize);
189277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            if (newSize == oldSize) return;
190277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            Item ni[] = new Item[newSize];
191277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            System.arraycopy(mItemArray, 0, ni, 0, copySize);
192277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross            mItemArray = ni;
193277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        }
194277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
195277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        mAllocation.resize(newSize);
196277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross        if (mIOBuffer != null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
197277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross    }
198277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
199277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross}
200277fd5e6545c8ba1272027ee6e6bc55a96316dc0David Gross
201