/* * Copyright 1998, University Corporation for Atmospheric Research * All Rights Reserved. * See file LICENSE for copying and redistribution conditions. * * $Id: Context.java,v 1.2 2000-06-08 19:13:43 steve Exp $ */ package visad.data.netcdf.in; /** * Provides support for the context in which data values are retrieved. * * Instances are mutable. */ public class Context { /** * The indexes of this context. */ private int[] indexes; /** * Constructs from nothing. */ public Context() { indexes = new int[0]; } /** * Constructs from the number of indexes. */ private Context(int n) { indexes = new int[n]; } /** * Gets a new (sub) context based on this context. * * @return A (sub) context. * @postcondition <code>depth() == </code>INITIAL(<code>depth() * </code>)<code> + 1</code> */ public Context newSubContext() { Context subContext = new Context(indexes.length + 1); System.arraycopy(indexes, 0, subContext.indexes, 0, indexes.length); subContext.indexes[indexes.length] = 0; return subContext; } /** * Sets the current (sub) context. * * @param index The current (sub) context. */ public void setSubContext(int index) { indexes[indexes.length-1] = index; } /** * Returns the current context. * * @return The current context. */ public int[] getContext() { int[] context = new int[indexes.length]; System.arraycopy(indexes, 0, context, 0, indexes.length); return context; } /** * Returns a string representation of this context. */ public String toString() { StringBuffer buf = new StringBuffer(128); buf.append("{"); for (int i = 0; i < indexes.length; ++i) { if (i > 0) buf.append(", "); buf.append(indexes[i]); } buf.append("}"); return buf.toString(); } /** * Returns a clone of this instance. * * @return A clone of this instance. */ public Object clone() { Context clone = new Context(); clone.indexes = (int[])indexes.clone(); return clone; } }