UNPKG

js-dicom

Version:

this is js-dicom

67 lines (52 loc) 2.32 kB
import readDicomElementExplicit from './readDicomElementExplicit.js'; import readDicomElementImplicit from './readDicomElementImplicit.js'; /** * Internal helper functions for parsing implicit and explicit DICOM data sets */ /** * reads an explicit data set * @param byteStream the byte stream to read from * @param maxPosition the maximum position to read up to (optional - only needed when reading sequence items) */ export function parseDicomDataSetExplicit (dataSet, byteStream, maxPosition, options = {}) { maxPosition = (maxPosition === undefined) ? byteStream.byteArray.length : maxPosition; if (byteStream === undefined) { throw 'dicomParser.parseDicomDataSetExplicit: missing required parameter \'byteStream\''; } if (maxPosition < byteStream.position || maxPosition > byteStream.byteArray.length) { throw 'dicomParser.parseDicomDataSetExplicit: invalid value for parameter \'maxP osition\''; } const elements = dataSet.elements; while (byteStream.position < maxPosition) { const element = readDicomElementExplicit(byteStream, dataSet.warnings, options.untilTag); elements[element.tag] = element; if (element.tag === options.untilTag) { return; } } if (byteStream.position > maxPosition) { throw 'dicomParser:parseDicomDataSetExplicit: buffer overrun'; } } /** * reads an implicit data set * @param byteStream the byte stream to read from * @param maxPosition the maximum position to read up to (optional - only needed when reading sequence items) */ export function parseDicomDataSetImplicit (dataSet, byteStream, maxPosition, options = {}) { maxPosition = (maxPosition === undefined) ? dataSet.byteArray.length : maxPosition; if (byteStream === undefined) { throw 'dicomParser.parseDicomDataSetImplicit: missing required parameter \'byteStream\''; } if (maxPosition < byteStream.position || maxPosition > byteStream.byteArray.length) { throw 'dicomParser.parseDicomDataSetImplicit: invalid value for parameter \'maxPosition\''; } const elements = dataSet.elements; while (byteStream.position < maxPosition) { const element = readDicomElementImplicit(byteStream, options.untilTag, options.vrCallback); elements[element.tag] = element; if (element.tag === options.untilTag) { return; } } }