Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- ManifestSignedXml.cs
- ArrayList.cs
- CryptoKeySecurity.cs
- PerspectiveCamera.cs
- Baml2006Reader.cs
- BindingListCollectionView.cs
- EntityType.cs
- Misc.cs
- XmlNavigatorStack.cs
- ResolveNameEventArgs.cs
- SocketInformation.cs
- BitmapMetadataBlob.cs
- Positioning.cs
- ManagementOptions.cs
- UInt16Converter.cs
- AttributeCollection.cs
- Events.cs
- listitem.cs
- RIPEMD160Managed.cs
- Symbol.cs
- TdsParameterSetter.cs
- IsolatedStorage.cs
- PolygonHotSpot.cs
- TabControlEvent.cs
- WebPartEventArgs.cs
- WebPartAuthorizationEventArgs.cs
- ExtendedPropertyDescriptor.cs
- FloaterBaseParaClient.cs
- PostBackOptions.cs
- EnumerableRowCollectionExtensions.cs
- ListBase.cs
- CancelRequestedQuery.cs
- ServiceDiscoveryElement.cs
- Encoder.cs
- SQLBinaryStorage.cs
- MonitoringDescriptionAttribute.cs
- ReflectionHelper.cs
- DecodeHelper.cs
- ReturnValue.cs
- MetadataItemSerializer.cs
- Activator.cs
- PolicyLevel.cs
- XmlSubtreeReader.cs
- DataGridColumnCollection.cs
- SymDocumentType.cs
- BooleanSwitch.cs
- UIElement.cs
- PathFigureCollection.cs
- QuaternionIndependentAnimationStorage.cs
- MinimizableAttributeTypeConverter.cs
- ProxyHwnd.cs
- AnimatedTypeHelpers.cs
- FtpCachePolicyElement.cs
- CacheManager.cs
- TextMessageEncodingBindingElement.cs
- ComplexBindingPropertiesAttribute.cs
- XmlDocumentFieldSchema.cs
- MsmqAppDomainProtocolHandler.cs
- WindowsRichEditRange.cs
- IdentitySection.cs
- UriExt.cs
- MailBnfHelper.cs
- FileDataSourceCache.cs
- SchemaImporterExtensionElementCollection.cs
- FamilyCollection.cs
- DataViewListener.cs
- WsdlBuildProvider.cs
- WebErrorHandler.cs
- NamedPipeProcessProtocolHandler.cs
- SqlBulkCopyColumnMapping.cs
- EntityDataSourceViewSchema.cs
- UrlAuthFailureHandler.cs
- MissingSatelliteAssemblyException.cs
- RegexMatchCollection.cs
- ProfileGroupSettings.cs
- HttpTransportSecurity.cs
- SizeConverter.cs
- OutputCacheModule.cs
- SerializationInfoEnumerator.cs
- DataAdapter.cs
- FloaterParagraph.cs
- SQLRoleProvider.cs
- ReadContentAsBinaryHelper.cs
- ConfigurationValues.cs
- EventBookmark.cs
- ReadOnlyDictionary.cs
- SudsCommon.cs
- CancellationTokenSource.cs
- NullableBoolConverter.cs
- SymbolType.cs
- AssociationEndMember.cs
- DocumentationServerProtocol.cs
- DispatchWrapper.cs
- GeneralTransformGroup.cs
- BinaryReader.cs
- MasterPageCodeDomTreeGenerator.cs
- StyleHelper.cs
- ColumnTypeConverter.cs
- Visual.cs
- ImageSourceValueSerializer.cs