Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / clr / src / BCL / System / Globalization / TextElementEnumerator.cs / 1 / TextElementEnumerator.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //////////////////////////////////////////////////////////////////////////// // // Class: TextElementEnumerator // // Purpose: // // Date: [....] 31, 1999 // //////////////////////////////////////////////////////////////////////////// using System.Runtime.Serialization; namespace System.Globalization { using System.Collections; // // This is public because GetTextElement() is public. // [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public class TextElementEnumerator: IEnumerator { private String str; private int index; private int startIndex; [NonSerialized] private int strLen; // This is the length of the total string, counting from the beginning of string. [NonSerialized] private int currTextElementLen; // The current text element lenght after MoveNext() is called. [OptionalField(VersionAdded = 2)] private UnicodeCategory uc; [OptionalField(VersionAdded = 2)] private int charLen; // The next abstract char to look at after MoveNext() is called. It could be 1 or 2, depending on if it is a surrogate or not. internal TextElementEnumerator(String str, int startIndex, int strLen) { BCLDebug.Assert(str != null, "TextElementEnumerator(): str != null"); BCLDebug.Assert(startIndex >= 0 && strLen >= 0, "TextElementEnumerator(): startIndex >= 0 && strLen >= 0"); BCLDebug.Assert(strLen >= startIndex, "TextElementEnumerator(): strLen >= startIndex"); this.str = str; this.startIndex = startIndex; this.strLen = strLen; Reset(); } #region Serialization // the following fields is defined to keep the compatibility with Everett. // don't change/remove the names/types of these fields. private int endIndex; private int nextTextElementLen; [OnDeserializing] private void OnDeserializing(StreamingContext ctx) { charLen = -1; } [OnDeserialized] private void OnDeserialized(StreamingContext ctx) { strLen = endIndex + 1; currTextElementLen = nextTextElementLen; if (charLen == -1) { uc = CharUnicodeInfo.InternalGetUnicodeCategory(str, index, out charLen); } } [OnSerializing] private void OnSerializing(StreamingContext ctx) { endIndex = strLen - 1; nextTextElementLen = currTextElementLen; } #endregion Serialization public bool MoveNext() { if (index >= strLen) { // Make the index to be greater than strLen so that we can throw exception if GetTextElement() is called. index = strLen + 1; return (false); } currTextElementLen = StringInfo.GetCurrentTextElementLen(str, index, strLen, ref uc, ref charLen); index += currTextElementLen; return (true); } // // Get the current text element. // public Object Current { get { return (GetTextElement()); } } // // Get the current text element. // public String GetTextElement() { if (index == startIndex) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumNotStarted")); } if (index > strLen) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumEnded")); } return (str.Substring(index - currTextElementLen, currTextElementLen)); } // // Get the starting index of the current text element. // public int ElementIndex { get { if (index == startIndex) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumNotStarted")); } return (index - currTextElementLen); } } public void Reset() { index = startIndex; if (index < strLen) { // If we have more than 1 character, get the category of the current char. uc = CharUnicodeInfo.InternalGetUnicodeCategory(str, index, out charLen); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //////////////////////////////////////////////////////////////////////////// // // Class: TextElementEnumerator // // Purpose: // // Date: [....] 31, 1999 // //////////////////////////////////////////////////////////////////////////// using System.Runtime.Serialization; namespace System.Globalization { using System.Collections; // // This is public because GetTextElement() is public. // [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public class TextElementEnumerator: IEnumerator { private String str; private int index; private int startIndex; [NonSerialized] private int strLen; // This is the length of the total string, counting from the beginning of string. [NonSerialized] private int currTextElementLen; // The current text element lenght after MoveNext() is called. [OptionalField(VersionAdded = 2)] private UnicodeCategory uc; [OptionalField(VersionAdded = 2)] private int charLen; // The next abstract char to look at after MoveNext() is called. It could be 1 or 2, depending on if it is a surrogate or not. internal TextElementEnumerator(String str, int startIndex, int strLen) { BCLDebug.Assert(str != null, "TextElementEnumerator(): str != null"); BCLDebug.Assert(startIndex >= 0 && strLen >= 0, "TextElementEnumerator(): startIndex >= 0 && strLen >= 0"); BCLDebug.Assert(strLen >= startIndex, "TextElementEnumerator(): strLen >= startIndex"); this.str = str; this.startIndex = startIndex; this.strLen = strLen; Reset(); } #region Serialization // the following fields is defined to keep the compatibility with Everett. // don't change/remove the names/types of these fields. private int endIndex; private int nextTextElementLen; [OnDeserializing] private void OnDeserializing(StreamingContext ctx) { charLen = -1; } [OnDeserialized] private void OnDeserialized(StreamingContext ctx) { strLen = endIndex + 1; currTextElementLen = nextTextElementLen; if (charLen == -1) { uc = CharUnicodeInfo.InternalGetUnicodeCategory(str, index, out charLen); } } [OnSerializing] private void OnSerializing(StreamingContext ctx) { endIndex = strLen - 1; nextTextElementLen = currTextElementLen; } #endregion Serialization public bool MoveNext() { if (index >= strLen) { // Make the index to be greater than strLen so that we can throw exception if GetTextElement() is called. index = strLen + 1; return (false); } currTextElementLen = StringInfo.GetCurrentTextElementLen(str, index, strLen, ref uc, ref charLen); index += currTextElementLen; return (true); } // // Get the current text element. // public Object Current { get { return (GetTextElement()); } } // // Get the current text element. // public String GetTextElement() { if (index == startIndex) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumNotStarted")); } if (index > strLen) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumEnded")); } return (str.Substring(index - currTextElementLen, currTextElementLen)); } // // Get the starting index of the current text element. // public int ElementIndex { get { if (index == startIndex) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumNotStarted")); } return (index - currTextElementLen); } } public void Reset() { index = startIndex; if (index < strLen) { // If we have more than 1 character, get the category of the current char. uc = CharUnicodeInfo.InternalGetUnicodeCategory(str, index, out charLen); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UInt64Storage.cs
- BoundColumn.cs
- CodeDomComponentSerializationService.cs
- LinkUtilities.cs
- MergeFilterQuery.cs
- AuthenticationException.cs
- XmlHierarchicalEnumerable.cs
- DataRow.cs
- FlowLayout.cs
- ThreadStaticAttribute.cs
- LocalizationCodeDomSerializer.cs
- AppDomainManager.cs
- StreamAsIStream.cs
- AnnotationStore.cs
- Decorator.cs
- TimeEnumHelper.cs
- FrameSecurityDescriptor.cs
- NameValueConfigurationElement.cs
- cookieexception.cs
- DecoderBestFitFallback.cs
- AnchoredBlock.cs
- ListBindingConverter.cs
- WebPartCatalogCloseVerb.cs
- UserControl.cs
- GridViewCancelEditEventArgs.cs
- SkinBuilder.cs
- ProgressChangedEventArgs.cs
- DetailsViewDeleteEventArgs.cs
- PersonalizationProviderHelper.cs
- SizeAnimationUsingKeyFrames.cs
- DesignerSerializationOptionsAttribute.cs
- BStrWrapper.cs
- ReceiveMessageContent.cs
- SimpleTypeResolver.cs
- DecimalStorage.cs
- Exceptions.cs
- CorrelationTokenInvalidatedHandler.cs
- SpeechRecognizer.cs
- DefaultParameterValueAttribute.cs
- ExclusiveTcpListener.cs
- InputMethod.cs
- IItemContainerGenerator.cs
- PenCursorManager.cs
- WebPart.cs
- NativeMethods.cs
- StrokeNodeOperations2.cs
- Scalars.cs
- ReceiveErrorHandling.cs
- InputMethodStateChangeEventArgs.cs
- PrintingPermissionAttribute.cs
- ModuleConfigurationInfo.cs
- SoapDocumentMethodAttribute.cs
- AnnotationComponentManager.cs
- ToolboxItemWrapper.cs
- HttpServerVarsCollection.cs
- NeedSkipTokenVisitor.cs
- ConfigurationStrings.cs
- WebBrowserProgressChangedEventHandler.cs
- PlainXmlSerializer.cs
- TreeViewHitTestInfo.cs
- Fx.cs
- COM2Enum.cs
- EntityDescriptor.cs
- VariableBinder.cs
- BreakSafeBase.cs
- X509CertificateTrustedIssuerElementCollection.cs
- IntegerFacetDescriptionElement.cs
- WorkflowViewStateService.cs
- EntityViewGenerator.cs
- RectangleGeometry.cs
- HatchBrush.cs
- FacetChecker.cs
- EventEntry.cs
- HostedHttpContext.cs
- tibetanshape.cs
- GB18030Encoding.cs
- XmlSchemaImport.cs
- ParameterEditorUserControl.cs
- SurrogateEncoder.cs
- LicFileLicenseProvider.cs
- TransformCollection.cs
- RuleDefinitions.cs
- AttributeCollection.cs
- FileLoadException.cs
- FileDetails.cs
- Vector.cs
- Rule.cs
- DataGridLinkButton.cs
- ZoneIdentityPermission.cs
- ControlBindingsCollection.cs
- DbConnectionStringCommon.cs
- CodeTypeConstructor.cs
- CanonicalFontFamilyReference.cs
- MultiTargetingUtil.cs
- InvokeAction.cs
- CodeConditionStatement.cs
- ExpressionHelper.cs
- SevenBitStream.cs
- CoTaskMemHandle.cs
- PeerTransportElement.cs