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 readSequence(int len, Attributes attrs, int sqtag) throws IOException { if (len == 0) { attrs.setNull(sqtag, VR.SQ); return; } Sequence seq = attrs.newSequence(sqtag, 10); String privateCreator = attrs.getPrivateCreator(sqtag); boolean undefLen = len == -1; long endPos = pos + (len & 0xffffffffL); boolean explicitVR0 = explicitVR; boolean bigEndian0 = bigEndian; if (encodedVR == 0x554e // UN && !probeExplicitVR()) { explicitVR = false; bigEndian = false; } for (int i = 0; (undefLen || pos < endPos) && readItemHeader(); ++i) { addItemPointer(sqtag, privateCreator, i); handler.readValue(this, seq); removeItemPointer(); } explicitVR = explicitVR0; bigEndian = bigEndian0; if (seq.isEmpty()) attrs.setNull(sqtag, VR.SQ); else seq.trimToSize(); }