    001/*-
    002 * Copyright 2015, 2016 Diamond Light Source Ltd.
    003 *
    004 * All rights reserved. This program and the accompanying materials
    005 * are made available under the terms of the Eclipse Public License v1.0
    006 * which accompanies this distribution, and is available at
    007 * http://www.eclipse.org/legal/epl-v10.html
    008 */
    009
    010package org.eclipse.january.dataset;
    011
    012import org.eclipse.january.DatasetException;
    013import org.eclipse.january.IMonitor;
    014import org.eclipse.january.io.ILazySaver;
    015
    016/**
    017 * This sub-interface adds the ability to write to a lazy dataset slice-by-slice
    018 */
    019public interface ILazyWriteableDataset extends IDynamicDataset {
    020
    021        /**
    022         * See {@link IDynamicDataset#UNLIMITED}
    023         */
    024        public static final int UNLIMITED = IDynamicDataset.UNLIMITED;
    025
    026        /**
    027         * Get chunking
    028         * @return chunks (can be null)
    029         */
    030        public int[] getChunking();
    031
    032        /**
    033         * Set chunking
    034         * @param chunks chunk shape
    035         */
    036        public void setChunking(int... chunks);
    037
    038        /**
    039         * Set saver
    040         * @param saver
    041         */
    042        public void setSaver(ILazySaver saver);
    043
    044        /**
    045         * Set a slice of the dataset
    046         *
    047         * @param monitor
    048         * @param data
    049         * @param slice an n-D slice
    050         * @throws DatasetException
    051         */
    052        public void setSlice(final IMonitor monitor, final IDataset data, final SliceND slice) throws DatasetException;
    053
    054        /**
    055         * Set a slice of the dataset
    056         *
    057         * @param monitor
    058         * @param data
    059         * @param start
    060         *            specifies the starting indexes (can be null for origin)
    061         * @param stop
    062         *            specifies the stopping indexes (can be null for end)
    063         * @param step
    064         *            specifies the steps in the slice (can be null for unit steps)
    065         * @throws DatasetException
    066         */
    067        public void setSlice(final IMonitor monitor, final IDataset data, final int[] start, final int[] stop, final int[] step) throws DatasetException;
    068
    069        /**
    070         * Set a slice of the dataset synchronously
    071         *
    072         * @param monitor
    073         * @param data
    074         * @param slice an n-D slice
    075         * @throws DatasetException
    076         */
    077        public void setSliceSync(final IMonitor monitor, final IDataset data, final SliceND slice) throws DatasetException;
    078
    079        /**
    080         * Set writing slices as asynchronous
    081         * @param async
    082         */
    083        public void setWritingAsync(boolean async);
    084
    085        /**
    086         * Get the value used to fill an un-initialized dataset
    087         * @return fill value
    088         */
    089        public Object getFillValue();
    090
    091        /**
    092         * Set the value used to fill an un-initialized dataset
    093         * @param fill
    094         */
    095        public void setFillValue(Object fill);
    096}