constructor(time,
                qubitRow,
                wireCount,
                controls,
                controlsTexture,
                rawControls,
                stateTrader,
                customContextFromGates) {
        /** @type {!number} */
        this.time = time;
        /**
         * The top-level row that we're working relative to.
         * @type {undefined|!int}
         */
        this.row = qubitRow;
        /** @type {!int} */
        this.wireCount = wireCount;
        /** @type {!Controls} */
        this.controls = controls;
        /** @type {!Controls} */
        this.rawControls = rawControls;
        /** @type {!WglTexture} */
        this.controlsTexture = controlsTexture;
        /** @type {!WglTextureTrader} */
        this.stateTrader = stateTrader;
        /** @type {!Map.<!string, *>} */
        this.customContextFromGates = customContextFromGates;
    }
@param {!number} time
@param {undefined|!int} qubitRow
@param {!int} wireCount
@param {!Controls} controls
@param {!WglTexture} controlsTexture
@param {!Controls} rawControls The controls of the gate column, made available so that before/after operations
    can use this information (even though they are not themselves controlled).
@param {!WglTextureTrader} stateTrader
@param {!Map.<!string, *>} customContextFromGates