public DSNumber sibling() { int[] newIndex = new int[index.length]; for (int i = 0; i < index.length; ++i) newIndex[i] = index[i]; newIndex[index.length - 1]++; return new DSNumber(newIndex); }
/** * Create an index based on a parent index, e.g, 1.1, 1.2, 1.1.1, 1.1.2, * ..etc. * * @param parent * @param childIndex */ public DSNumber(DSNumber parent, int childIndex) { if (parent == null) { this.index = new int[1]; this.index[0] = childIndex; } else { this.index = new int[parent.size() + 1]; for (int i = 0; i < parent.size(); ++i) index[i] = parent.get(i); index[parent.size()] = childIndex; } }
public DSNumber tail() { if (index.length < 2) return null; int[] newIndex = new int[index.length - 1]; for (int i = 1; i < index.length; ++i) newIndex[i - 1] = index[i]; return new DSNumber(newIndex); }
public DSNumber parent() { if (index.length <= 1) return null; int[] newIndex = new int[index.length - 1]; for (int i = 0; i < index.length - 1; ++i) newIndex[i] = index[i]; return new DSNumber(newIndex); }
public static DSNumber root() { return new DSNumber(0); }
public static DSNumber parse(String indexStr) { if (indexStr == null) throw new NullPointerException("indexStr"); String[] component = indexStr.split("\\."); if (component == null) throw new XerialError(XerialErrorCode.INVALID_INPUT, "invalid format:" + indexStr); int[] index = new int[component.length]; for (int i = 0; i < component.length; ++i) index[i] = Integer.parseInt(component[i]); return new DSNumber(index); }