public void trimToSize(boolean recursive) { int oldCapacity = tags.length; if (size < oldCapacity) { tags = Arrays.copyOf(tags, size); vrs = Arrays.copyOf(vrs, size); values = Arrays.copyOf(values, size); } if (recursive) for (Object value : values) { if (value instanceof Sequence) { ((Sequence) value).trimToSize(recursive); } else if (value instanceof Fragments) ((Fragments) value).trimToSize(); } }
private void endDicomAttribute() { if (vr == VR.SQ) { seqs.removeLast().trimToSize(); return; } if (dataFragments != null) { dataFragments.trimToSize(); dataFragments = null; return; } Attributes attrs = items.getLast(); if (TagUtils.isFileMetaInformation(tag)) { if (fmi == null) fmi = new Attributes(); attrs = fmi; } if (bulkData != null) { attrs.setValue(privateCreator, tag, vr, bulkData); bulkData = null; } else if (inlineBinary) { attrs.setBytes(privateCreator, tag, vr, getBytes()); } else { attrs.setString(privateCreator, tag, vr, getStrings()); } }
private void readFragments(Attributes attrs, int fragsTag, VR vr) throws IOException { Fragments frags = new Fragments(vr, attrs.bigEndian(), 10); String privateCreator = attrs.getPrivateCreator(fragsTag); for (int i = 0; readItemHeader(); ++i) { addItemPointer(fragsTag, privateCreator, i); handler.readValue(this, frags); removeItemPointer(); } if (frags.isEmpty()) attrs.setNull(fragsTag, vr); else { frags.trimToSize(); attrs.setValue(fragsTag, vr, frags); } }