Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 53699ec6 authored by Yang Ni's avatar Yang Ni Committed by Android Git Automerger
Browse files

am d3e6428a: Merge "New API methods for Script Group"

* commit 'd3e6428a':
  New API methods for Script Group
parents 62c595aa d3e6428a
Loading
Loading
Loading
Loading
+52 −1
Original line number Diff line number Diff line
@@ -342,6 +342,18 @@ public class ScriptGroup2 extends BaseObj {
        return outputObjs;
    }

    /**
       @hide Pending Android public API approval.
    */
    public static final class Binding {
        public Script.FieldID mField;
        public Object mValue;
        public Binding(Script.FieldID field, Object value) {
            mField = field;
            mValue = value;
        }
    }

    /**
       @hide Pending Android public API approval.
    */
@@ -349,7 +361,6 @@ public class ScriptGroup2 extends BaseObj {
        RenderScript mRS;
        List<Closure> mClosures;
        List<UnboundValue> mInputs;

        private static final String TAG = "ScriptGroup2.Builder";

        public Builder(RenderScript rs) {
@@ -378,10 +389,50 @@ public class ScriptGroup2 extends BaseObj {
            return unbound;
        }

        public Closure addKernel(Script.KernelID k, Type returnType, Object... argsAndBindings) {
            ArrayList<Object> args = new ArrayList<Object>();
            Map<Script.FieldID, Object> bindingMap = new HashMap<Script.FieldID, Object>();
            if (!seperateArgsAndBindings(argsAndBindings, args, bindingMap)) {
                return null;
            }
            return addKernel(k, returnType, args.toArray(), bindingMap);
        }

        public Closure addInvoke(Script.InvokeID invoke, Object... argsAndBindings) {
            ArrayList<Object> args = new ArrayList<Object>();
            Map<Script.FieldID, Object> bindingMap = new HashMap<Script.FieldID, Object>();
            if (!seperateArgsAndBindings(argsAndBindings, args, bindingMap)) {
                return null;
            }
            return addInvoke(invoke, args.toArray(), bindingMap);
        }

        public ScriptGroup2 create(Future... outputs) {
            ScriptGroup2 ret = new ScriptGroup2(mRS, mClosures, mInputs, outputs);
            return ret;
        }

        private boolean seperateArgsAndBindings(Object[] argsAndBindings,
                                                ArrayList<Object> args,
                                                Map<Script.FieldID, Object> bindingMap) {
            int i;
            for (i = 0; i < argsAndBindings.length; i++) {
                if (argsAndBindings[i] instanceof Binding) {
                    break;
                }
                args.add(argsAndBindings[i]);
            }

            for (; i < argsAndBindings.length; i++) {
                if (!(argsAndBindings[i] instanceof Binding)) {
                    return false;
                }
                Binding b = (Binding)argsAndBindings[i];
                bindingMap.put(b.mField, b.mValue);
            }

            return true;
        }

    }
}