Home Reference Source

src/worker/DataProcessor.js

import { HermiteData } from "../volume/HermiteData";

/**
 * An empty set of Hermite data.
 *
 * @type {HermiteData}
 * @private
 * @final
 */

const data = new HermiteData(false);

/**
 * A volume data processor.
 *
 * @implements {TransferableContainer}
 */

export class DataProcessor {

	/**
	 * Constructs a new data processor.
	 */

	constructor() {

		/**
		 * A set of Hermite data that will be used during processing.
		 *
		 * @type {HermiteData}
		 * @protected
		 */

		this.data = null;

		/**
		 * A container for the data that will be returned to the main thread.
		 *
		 * @type {DataMessage}
		 * @protected
		 */

		this.response = null;

	}

	/**
	 * Returns the data of this processor.
	 *
	 * @return {HermiteData} The data.
	 */

	getData() {

		return this.data;

	}

	/**
	 * Prepares a response that can be send back to the main thread.
	 *
	 * Should be used together with {@link DataProcessor#createTransferList}.
	 *
	 * @return {DataMessage} A response.
	 */

	respond() {

		this.response.data = this.data.serialize();

		return this.response;

	}

	/**
	 * Creates a list of transferable items.
	 *
	 * @param {Array} [transferList] - An optional target list. The transferable items will be added to this list.
	 * @return {Transferable[]} The transfer list.
	 */

	createTransferList(transferList = []) {

		if(this.data !== null) {

			this.data.createTransferList(transferList);

		}

		return transferList;

	}

	/**
	 * Processes the given request.
	 *
	 * @param {DataMessage} request - A request.
	 * @return {DataProcessor} This processor.
	 */

	process(request) {

		this.data = data.deserialize(request.data);

		return this;

	}

}