本文整理汇总了C#中IByteSource.PushMilestone方法的典型用法代码示例。如果您正苦于以下问题:C# IByteSource.PushMilestone方法的具体用法?C# IByteSource.PushMilestone怎么用?C# IByteSource.PushMilestone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IByteSource
的用法示例。
在下文中一共展示了IByteSource.PushMilestone方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ParseDataset
//.........这里部分代码省略.........
_vr = DicomVR.SQ;
}
_state = ParseState.Value;
}
if (_state == ParseState.Value) {
// check dictionary for VR after reading length to handle 16-bit lengths
// check before reading value to handle SQ elements
if (_vr == DicomVR.UN && IsExplicitVR) {
var entry = Dictionary[_tag];
if (entry != null)
_vr = entry.ValueRepresentations.FirstOrDefault();
if (_vr == null)
_vr = DicomVR.UN;
}
if (_tag == DicomTag.ItemDelimitationItem) {
// end of sequence item
return;
}
while (_vr == DicomVR.SQ && _tag.IsPrivate) {
if (!IsPrivateSequence(source)) {
_vr = DicomVR.UN;
break;
}
if (IsPrivateSequenceBad(source)) {
_badPrivateSequence = true;
_explicit = !_explicit;
}
break;
}
if (_vr == DicomVR.SQ) {
// start of sequence
_observer.OnBeginSequence(source, _tag, _length);
_state = ParseState.Tag;
if (_length != UndefinedLength) {
_implicit = false;
source.PushMilestone(_length);
} else
_implicit = true;
PushState(state);
ParseItemSequence(source, null);
continue;
}
if (_length == UndefinedLength) {
_observer.OnBeginFragmentSequence(source, _tag, _vr);
_state = ParseState.Tag;
PushState(state);
ParseFragmentSequence(source, null);
continue;
}
if (!source.Require(_length, ParseDataset, state)) {
_result = DicomReaderResult.Suspended;
return;
}
IByteBuffer buffer = source.GetBuffer(_length);
if (!_vr.IsString)
buffer = EndianByteBuffer.Create(buffer, source.Endian, _vr.UnitSize);
_observer.OnElement(source, _tag, _vr, buffer);
// parse private creator value and add to lookup table
if (_tag.IsPrivate && _tag.Element != 0x0000 && _tag.Element <= 0x00ff) {
var creator = DicomEncoding.Default.GetString(buffer.Data, 0, buffer.Data.Length).TrimEnd((char)DicomVR.LO.PaddingValue);
var card = (uint)(_tag.Group << 16) + (uint)(_tag.Element);
_private[card] = creator;
}
ResetState();
}
}
if (source.HasReachedMilestone()) {
// end of explicit length sequence item
source.PopMilestone();
return;
}
if (_result != DicomReaderResult.Processing)
return;
// end of processing
_result = DicomReaderResult.Success;
} catch (Exception e) {
_exception = e;
_result = DicomReaderResult.Error;
} finally {
if (_result != DicomReaderResult.Processing && _result != DicomReaderResult.Suspended) {
_async.Set();
}
}
}
示例2: ParseItemSequence
private void ParseItemSequence(IByteSource source, object state) {
try {
_result = DicomReaderResult.Processing;
while (!source.IsEOF && !source.HasReachedMilestone()) {
if (_state == ParseState.Tag) {
source.Mark();
if (!source.Require(8, ParseItemSequence, state)) {
_result = DicomReaderResult.Suspended;
return;
}
ushort group = source.GetUInt16();
ushort element = source.GetUInt16();
_tag = new DicomTag(group, element);
if (_tag != DicomTag.Item && _tag != DicomTag.SequenceDelimitationItem) {
// assume invalid sequence
source.Rewind();
if (!_implicit)
source.PopMilestone();
_observer.OnEndSequence();
if (_badPrivateSequence) {
_explicit = !_explicit;
_badPrivateSequence = false;
}
return;
}
_length = source.GetUInt32();
if (_tag == DicomTag.SequenceDelimitationItem) {
// end of sequence
_observer.OnEndSequence();
if (_badPrivateSequence) {
_explicit = !_explicit;
_badPrivateSequence = false;
}
ResetState();
return;
}
_state = ParseState.Value;
}
if (_state == ParseState.Value) {
if (_length != UndefinedLength) {
if (!source.Require(_length, ParseItemSequence, state)) {
_result = DicomReaderResult.Suspended;
return;
}
source.PushMilestone(_length);
}
_observer.OnBeginSequenceItem(source, _length);
ResetState();
ParseDataset(source, state);
ResetState();
_observer.OnEndSequenceItem();
continue;
}
}
// end of explicit length sequence
if (source.HasReachedMilestone())
source.PopMilestone();
_observer.OnEndSequence();
if (_badPrivateSequence) {
_explicit = !_explicit;
_badPrivateSequence = false;
}
} catch (Exception e) {
_exception = e;
_result = DicomReaderResult.Error;
} finally {
if (_result != DicomReaderResult.Processing && _result != DicomReaderResult.Suspended) {
_async.Set();
}
}
}
示例3: ParseItemSequenceValue
private bool ParseItemSequenceValue(IByteSource source)
{
if (this.parseStage == ParseStage.Value)
{
if (this.length != UndefinedLength)
{
if (!source.Require(this.length))
{
this.result = DicomReaderResult.Suspended;
return false;
}
source.PushMilestone(this.length);
}
this.observer.OnBeginSequenceItem(source, this.length);
this.ResetState();
++this.sequenceDepth;
this.ParseDataset(source);
--this.sequenceDepth;
this.ResetState();
this.observer.OnEndSequenceItem();
}
return true;
}
示例4: ParseItemSequenceValueAsync
private async Task<bool> ParseItemSequenceValueAsync(IByteSource source)
{
if (this.parseStage == ParseStage.Value)
{
if (this.length != UndefinedLength)
{
if (!source.Require(this.length))
{
this.result = DicomReaderResult.Suspended;
return false;
}
source.PushMilestone(this.length);
}
this.observer.OnBeginSequenceItem(source, this.length);
this.ResetState();
await this.ParseDatasetAsync(source).ConfigureAwait(false);
this.ResetState();
this.observer.OnEndSequenceItem();
}
return true;
}
示例5: ParseValueAsync
private async Task<bool> ParseValueAsync(IByteSource source)
{
if (this.parseStage == ParseStage.Value)
{
// check dictionary for VR after reading length to handle 16-bit lengths
// check before reading value to handle SQ elements
var parsedVR = this._vr;
// check dictionary for VR after reading length to handle 16-bit lengths
// check before reading value to handle SQ elements
if (this._vr == DicomVR.Implicit || (this._vr == DicomVR.UN && this.isExplicitVR))
{
var entry = this.dictionary[this._tag];
if (entry != null)
{
this._vr = entry.ValueRepresentations.FirstOrDefault();
}
if (this._vr == null)
{
this._vr = DicomVR.UN;
}
}
if (this._tag == DicomTag.ItemDelimitationItem)
{
// end of sequence item
return false;
}
while (this._vr == DicomVR.SQ && this._tag.IsPrivate)
{
if (!IsPrivateSequence(source))
{
this._vr = DicomVR.UN;
break;
}
if (IsPrivateSequenceBad(source, this.isExplicitVR))
{
this.badPrivateSequence = true;
this.isExplicitVR = !this.isExplicitVR;
}
break;
}
if (this._vr == DicomVR.SQ)
{
// start of sequence
this.observer.OnBeginSequence(source, this._tag, this.length);
this.parseStage = ParseStage.Tag;
if (this.length != UndefinedLength)
{
this._implicit = false;
source.PushMilestone(this.length);
}
else
{
this._implicit = true;
}
var last = source.Position;
// Conformance with CP-246 (#177)
var needtoChangeEndian = false;
if (parsedVR == DicomVR.UN && !this._tag.IsPrivate)
{
this._implicit = true;
needtoChangeEndian = source.Endian == Endian.Big;
}
if (needtoChangeEndian)
{
source.Endian = Endian.Little;
}
await this.ParseItemSequenceAsync(source).ConfigureAwait(false);
if (needtoChangeEndian)
{
source.Endian = Endian.Big;
}
// Aeric Sylvan - https://github.com/rcd/fo-dicom/issues/62#issuecomment-46248073
// Fix reading of SQ with parsed VR of UN
if (source.Position > last || this.length == 0)
{
return true;
}
this.parseStage = ParseStage.Value;
this._vr = parsedVR;
}
if (this.length == UndefinedLength)
{
this.observer.OnBeginFragmentSequence(source, this._tag, this._vr);
this.parseStage = ParseStage.Tag;
await this.ParseFragmentSequenceAsync(source).ConfigureAwait(false);
return true;
}
//.........这里部分代码省略.........