private List<int[]> findPositions(final String value) { // PRIM_TYPE IndexIterator iter = getIterator(true); List<int[]> posns = new ArrayList<int[]>(); int[] pos = iter.getPos(); { while (iter.hasNext()) { if (data[iter.index] == value) { posns.add(pos.clone()); } } } return posns; }
@Override public StringDatasetBase setSlice(final Object obj, final IndexIterator siter) { if (obj instanceof IDataset) { final IDataset ds = (IDataset) obj; final int[] oshape = ds.getShape(); if (!areShapesCompatible(siter.getShape(), oshape)) { throw new IllegalArgumentException( String.format( "Input dataset is not compatible with slice: %s cf %s", Arrays.toString(oshape), Arrays.toString(siter.getShape()))); } if (ds instanceof Dataset) { final Dataset ads = (Dataset) ds; final IndexIterator oiter = ads.getIterator(); while (siter.hasNext() && oiter.hasNext()) data[siter.index] = ads.getStringAbs(oiter.index); // GET_ELEMENT_WITH_CAST } else { final IndexIterator oiter = new PositionIterator(oshape); final int[] pos = oiter.getPos(); while (siter.hasNext() && oiter.hasNext()) data[siter.index] = ds.getString(pos); // PRIM_TYPE } } else { try { String v = obj.toString(); // PRIM_TYPE // FROM_OBJECT while (siter.hasNext()) data[siter.index] = v; } catch (IllegalArgumentException e) { throw new IllegalArgumentException("Object for setting slice is not a dataset or number"); } } setDirty(); return this; }
@Override public CompoundIntegerDataset setSlice(final Object o, final SliceIterator siter) { if (o instanceof IDataset) { final IDataset ds = (IDataset) o; final int[] oshape = ds.getShape(); if (!areShapesCompatible(siter.getSliceShape(), oshape)) { throw new IllegalArgumentException( String.format( "Input dataset is not compatible with slice: %s cf %s", Arrays.toString(oshape), Arrays.toString(siter.getSliceShape()))); } if (ds instanceof AbstractDataset) { final AbstractDataset ads = (AbstractDataset) ds; IndexIterator oiter = ads.getIterator(); if (ds instanceof AbstractCompoundDataset) { if (isize != ads.getElementsPerItem()) { throw new IllegalArgumentException("Input dataset is not compatible with slice"); } while (siter.hasNext() && oiter.hasNext()) { for (int i = 0; i < isize; i++) data[siter.index + i] = (int) ads.getElementLongAbs(oiter.index + i); // GET_ELEMENT_WITH_CAST } } else { while (siter.hasNext() && oiter.hasNext()) { data[siter.index] = (int) ads.getElementLongAbs(oiter.index); // GET_ELEMENT_WITH_CAST for (int i = 1; i < isize; i++) data[siter.index + i] = 0; } } } else { final IndexIterator oiter = new PositionIterator(oshape); final int[] pos = oiter.getPos(); if (ds.getElementsPerItem() == 1) { while (siter.hasNext() && oiter.hasNext()) { data[siter.index] = ds.getInt(pos); // PRIM_TYPE for (int i = 1; i < isize; i++) data[siter.index + i] = 0; } } else { while (siter.hasNext() && oiter.hasNext()) { final int[] val = toIntegerArray(ds.getObject(pos), isize); // PRIM_TYPE // CLASS_TYPE for (int i = 0; i < isize; i++) data[siter.index + i] = val[i]; } } } } else { try { final int[] vr = toIntegerArray(o, isize); // PRIM_TYPE // CLASS_TYPE while (siter.hasNext()) { for (int i = 0; i < isize; i++) data[siter.index + i] = vr[i]; } } catch (IllegalArgumentException e) { throw new IllegalArgumentException("Object for setting slice is not a dataset or number"); } } setDirty(); return this; }