js-dicom
Version:
this is js-dicom
67 lines (52 loc) • 2.32 kB
JavaScript
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;
}
}
}