当前位置: 首页>>代码示例>>C#>>正文


C# IByteSource.HasReachedMilestone方法代码示例

本文整理汇总了C#中IByteSource.HasReachedMilestone方法的典型用法代码示例。如果您正苦于以下问题:C# IByteSource.HasReachedMilestone方法的具体用法?C# IByteSource.HasReachedMilestone怎么用?C# IByteSource.HasReachedMilestone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IByteSource的用法示例。


在下文中一共展示了IByteSource.HasReachedMilestone方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: 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();
				}
			}
		}
开发者ID:peerct,项目名称:fo-dicom,代码行数:86,代码来源:DicomReader.cs

示例2: ParseDataset

		private void ParseDataset(IByteSource source, object state) {
			try {
				_result = DicomReaderResult.Processing;

				while (!source.IsEOF && !source.HasReachedMilestone() && _result == DicomReaderResult.Processing) {
					if (_state == ParseState.Tag) {
						source.Mark();

						if (!source.Require(4, ParseDataset, state)) {
							_result = DicomReaderResult.Suspended;
							return;
						}

						ushort group = source.GetUInt16();
						ushort element = source.GetUInt16();
						DicomPrivateCreator creator = null;

						if (group.IsOdd() && element > 0x00ff) {
							string pvt = null;
							uint card = (uint)(group << 16) + (uint)(element >> 8);
							if (_private.TryGetValue(card, out pvt))
								creator = Dictionary.GetPrivateCreator(pvt);
						}

						_tag = new DicomTag(group, element, creator);

						if (_stop != null && _tag.CompareTo(_stop) >= 0) {
							_result = DicomReaderResult.Stopped;
							return;
						}

						_state = ParseState.VR;
					}

					while (_state == ParseState.VR) {
						if (_tag == DicomTag.Item || _tag == DicomTag.ItemDelimitationItem || _tag == DicomTag.SequenceDelimitationItem) {
							_vr = DicomVR.NONE;
							_state = ParseState.Length;
							break;
						}

						if (IsExplicitVR) {
							if (!source.Require(2, ParseDataset, state)) {
								_result = DicomReaderResult.Suspended;
								return;
							}

							byte[] bytes = source.GetBytes(2);
							string vr = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
							try {
								_vr = DicomVR.Parse(vr);
							} catch {
								// unable to parse VR
								_vr = DicomVR.UN;
							}
						} else {
							DicomDictionaryEntry entry = Dictionary[_tag];
							if (entry != null) {
								if (entry == DicomDictionary.UnknownTag)
									_vr = DicomVR.UN;
								else if (entry.ValueRepresentations.Contains(DicomVR.OB) && entry.ValueRepresentations.Contains(DicomVR.OW))
									_vr = DicomVR.OW; // ???
								else
									_vr = entry.ValueRepresentations.FirstOrDefault();
							}
						}

						if (_vr == null)
							_vr = DicomVR.UN;

						_state = ParseState.Length;

						if (_vr == DicomVR.UN) {
							if (_tag.Element == 0x0000) {
								// Group Length to UL
								_vr = DicomVR.UL;
								break;
							} else if (IsExplicitVR) {
								break;
							}
						}

						if (_tag.IsPrivate) {
							if (_tag.Element != 0x0000 && _tag.Element <= 0x00ff && _vr == DicomVR.UN)
								_vr = DicomVR.LO; // force private creator to LO
						}
					}

					while (_state == ParseState.Length) {
						if (_tag == DicomTag.Item || _tag == DicomTag.ItemDelimitationItem || _tag == DicomTag.SequenceDelimitationItem) {
							if (!source.Require(4, ParseDataset, state)) {
								_result = DicomReaderResult.Suspended;
								return;
							}

							_length = source.GetUInt32();

							_state = ParseState.Value;
							break;
						}
//.........这里部分代码省略.........
开发者ID:peerct,项目名称:fo-dicom,代码行数:101,代码来源:DicomReader.cs

示例3: ParseItemSequenceTag

            private bool ParseItemSequenceTag(IByteSource source)
            {
                if (this.parseStage == ParseStage.Tag)
                {
                    source.Mark();

                    if (!source.Require(8))
                    {
                        this.result = DicomReaderResult.Suspended;
                        return false;
                    }

                    var group = source.GetUInt16();
                    var element = source.GetUInt16();

                    this._tag = new DicomTag(@group, element);

                    if (this._tag != DicomTag.Item && this._tag != DicomTag.SequenceDelimitationItem)
                    {
                        // assume invalid sequence
                        source.Rewind();
                        if (!this._implicit)
                        {
                            source.PopMilestone();
                        }
                        this.observer.OnEndSequence();
                        if (this.badPrivateSequence)
                        {
                            this.isExplicitVR = !this.isExplicitVR;
                            this.badPrivateSequence = false;
                        }
                        return false;
                    }

                    this.length = source.GetUInt32();

                    if (this._tag == DicomTag.SequenceDelimitationItem)
                    {
                        // #64, in case explicit length has been specified despite occurrence of Sequence Delimitation Item
                        if (source.HasReachedMilestone() && source.MilestonesCount > this.sequenceDepth)
                        {
                            this.ResetState();
                            return true;
                        }

                        // end of sequence
                        this.observer.OnEndSequence();
                        if (this.badPrivateSequence)
                        {
                            this.isExplicitVR = !this.isExplicitVR;
                            this.badPrivateSequence = false;
                        }
                        this.ResetState();
                        return false;
                    }

                    this.parseStage = ParseStage.Value;
                }
                return true;
            }
开发者ID:gustavosaita,项目名称:fo-dicom,代码行数:60,代码来源:DicomReader.cs

示例4: ParseItemSequencePostProcess

            private void ParseItemSequencePostProcess(IByteSource source)
            {
                // end of explicit length sequence
                if (source.HasReachedMilestone())
                {
                    source.PopMilestone();
                }

                this.observer.OnEndSequence();
                if (this.badPrivateSequence)
                {
                    this.isExplicitVR = !this.isExplicitVR;
                    this.badPrivateSequence = false;
                }
            }
开发者ID:gustavosaita,项目名称:fo-dicom,代码行数:15,代码来源:DicomReader.cs

示例5: ParseItemSequenceAsync

            private async Task ParseItemSequenceAsync(IByteSource source)
            {
                this.result = DicomReaderResult.Processing;

                while (!source.IsEOF && !source.HasReachedMilestone())
                {
                    if (!this.ParseItemSequenceTag(source)) return;
                    if (!await this.ParseItemSequenceValueAsync(source).ConfigureAwait(false)) return;
                }

                this.ParseItemSequencePostProcess(source);
            }
开发者ID:gustavosaita,项目名称:fo-dicom,代码行数:12,代码来源:DicomReader.cs

示例6: ParseItemSequence

            private void ParseItemSequence(IByteSource source)
            {
                this.result = DicomReaderResult.Processing;

                while (!source.IsEOF && !source.HasReachedMilestone())
                {
                    if (!this.ParseItemSequenceTag(source)) return;
                    if (!this.ParseItemSequenceValue(source)) return;
                }

                this.ParseItemSequencePostProcess(source);
            }
开发者ID:gustavosaita,项目名称:fo-dicom,代码行数:12,代码来源:DicomReader.cs

示例7: ParseDatasetAsync

            private async Task ParseDatasetAsync(IByteSource source)
            {
                this.result = DicomReaderResult.Processing;

                while (!source.IsEOF && !source.HasReachedMilestone() && this.result == DicomReaderResult.Processing)
                {
                    if (!this.ParseTag(source)) return;
                    if (!this.ParseVR(source)) return;
                    if (!this.ParseLength(source)) return;
                    if (!await this.ParseValueAsync(source).ConfigureAwait(false)) return;
                }

                if (source.HasReachedMilestone())
                {
                    // end of explicit length sequence item
                    source.PopMilestone();
                    return;
                }

                if (this.result != DicomReaderResult.Processing) return;

                // end of processing
                this.result = DicomReaderResult.Success;
            }
开发者ID:gustavosaita,项目名称:fo-dicom,代码行数:24,代码来源:DicomReader.cs

示例8: ParseDataset

            private void ParseDataset(IByteSource source)
            {
                this.result = DicomReaderResult.Processing;

                while (!source.IsEOF && !source.HasReachedMilestone() && this.result == DicomReaderResult.Processing)
                {
                    if (!this.ParseTag(source)) return;
                    if (!this.ParseVR(source)) return;
                    if (!this.ParseLength(source)) return;
                    if (!this.ParseValue(source)) return;
                }

                if (source.HasReachedMilestone())
                {
                    // end of explicit length sequence item
                    source.PopMilestone();
                    return;
                }

                if (this.result != DicomReaderResult.Processing) return;

                // end of processing
                this.result = DicomReaderResult.Success;
            }
开发者ID:gustavosaita,项目名称:fo-dicom,代码行数:24,代码来源:DicomReader.cs

示例9: ParseDataset

            private void ParseDataset(IByteSource source)
            {
                if (this.isDeflated)
                {
#if NET35
                    throw new NotSupportedException("Deflated datasets not supported in Unity.");
#else
                    source = this.Decompress(source);
#endif
                }

                this.result = DicomReaderResult.Processing;

                while (!source.IsEOF && !source.HasReachedMilestone() && this.result == DicomReaderResult.Processing)
                {
                    if (!this.ParseTag(source)) return;
                    if (!this.ParseVR(source)) return;
                    if (!this.ParseLength(source)) return;
                    if (!this.ParseValue(source)) return;
                }

                if (source.HasReachedMilestone())
                {
                    // end of explicit length sequence item
                    source.PopMilestone();
                    return;
                }

                if (this.result != DicomReaderResult.Processing) return;

                // end of processing
                this.result = DicomReaderResult.Success;
            }
开发者ID:aerik,项目名称:fo-dicom,代码行数:33,代码来源:DicomReader.cs


注:本文中的IByteSource.HasReachedMilestone方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。