protected KernelArrayValue(KernelProgramBlock block, ArrayClass arrayCls, KernelParam... allocateDims) { super(block, Operator.COMMON); if(arrayCls.getDimension() < allocateDims.length){ throw new IllegalArgumentException("dimension not enough: array type is " + arrayCls + " and allocate dims is " + ArrayUtils.toString(allocateDims)); } this.arrayCls = arrayCls; this.allocateDims = allocateDims; }
/** * * @param block * @param arrayCls * @param values Parameterized array */ protected KernelArrayValue(KernelProgramBlock block, ArrayClass arrayCls, Object values) { super(block, Operator.COMMON); this.arrayCls = arrayCls; this.values = values; if(values != null && !values.getClass().isArray()){ throw new IllegalArgumentException("values must be an array"); }else{ //check verify int dim = new EachValue(values){ @Override void process(KernelParam para) { //Nothing TO DO } }.process(); if(arrayCls.getDimension() != dim){ throw new IllegalArgumentException("different dimension : value dimension is " + dim + ", class(" + arrayCls + ") dimension is " + arrayCls.getDimension()); } } }
@Override public void doExecute(MethodExecuteContext context) { if(!useByOther){ throw new RuntimeException(this.toString() + " not use by other operator"); } ArrayClass cls = (ArrayClass) arrayRef.getResultType(); if(parDims != null && parDims.length > cls.getDimension()){ throw new ArrayOperatorException(toString() + " dimension not enough!"); } if(LOG.isPrintEnabled()) { LOG.print("start load array value"); } getValue(context); }
superTypes = new IClass[basicElementSuperTypes.length]; for (int i = 0; i < superTypes.length; i++) { superTypes[i] = subType.getClassHolder().getArrayType(basicElementSuperTypes[i], arrayType.getDimension());