"use strict" var pool = require("typedarray-pool") module.exports = createSurfaceExtractor //Helper macros function array(i) { return "a" + i } function data(i) { return "d" + i } function cube(i,bitmask) { return "c" + i + "_" + bitmask } function shape(i) { return "s" + i } function stride(i,j) { return "t" + i + "_" + j } function offset(i) { return "o" + i } function scalar(i) { return "x" + i } function pointer(i) { return "p" + i } function delta(i,bitmask) { return "d" + i + "_" + bitmask } function index(i) { return "i" + i } function step(i,j) { return "u" + i + "_" + j } function pcube(bitmask) { return "b" + bitmask } function qcube(bitmask) { return "y" + bitmask } function pdelta(bitmask) { return "e" + bitmask } function vert(i) { return "v" + i } var VERTEX_IDS = "V" var PHASES = "P" var VERTEX_COUNT = "N" var POOL_SIZE = "Q" var POINTER = "X" var TEMPORARY = "T" function permBitmask(dimension, mask, order) { var r = 0 for(var i=0; i 0) { stepVal.push(stride(i, order[j-1]) + "*" + shape(order[j-1]) ) } vars.push(step(i,order[j]) + "=(" + stepVal.join("-") + ")|0") } } //Create index variables for(var i=0; i=0; --i) { sizeVariable.push(shape(order[i])) } //Previous phases and vertex_ids vars.push(POOL_SIZE + "=(" + sizeVariable.join("*") + ")|0", PHASES + "=mallocUint32(" + POOL_SIZE + ")", VERTEX_IDS + "=mallocUint32(" + POOL_SIZE + ")", POINTER + "=0") //Create cube variables for phases vars.push(pcube(0) + "=0") for(var j=1; j<(1<=0; --i) { forLoopBegin(i, 0) } var phaseFuncArgs = [] for(var i=0; i0; k=(k-1)&subset) { faceArgs.push(VERTEX_IDS + "[" + POINTER + "+" + pdelta(k) + "]") } faceArgs.push(vert(0)) for(var k=0; k0){", index(order[i]), "=1;") createLoop(i-1, mask|(1< 0") } if(typeof args.vertex !== "function") { error("Must specify vertex creation function") } if(typeof args.cell !== "function") { error("Must specify cell creation function") } if(typeof args.phase !== "function") { error("Must specify phase function") } var getters = args.getters || [] var typesig = new Array(arrays) for(var i=0; i= 0) { typesig[i] = true } else { typesig[i] = false } } return compileSurfaceProcedure( args.vertex, args.cell, args.phase, scalars, order, typesig) }