Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Globalization / TextElementEnumerator.cs / 1 / TextElementEnumerator.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //////////////////////////////////////////////////////////////////////////// // // Class: TextElementEnumerator // // Purpose: // // Date: March 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); } } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ObjectSecurityT.cs
- TemplateModeChangedEventArgs.cs
- Shape.cs
- listitem.cs
- OperationAbortedException.cs
- PhotoPrintingIntent.cs
- thaishape.cs
- MultiBindingExpression.cs
- TdsValueSetter.cs
- XslCompiledTransform.cs
- CodeCatchClauseCollection.cs
- DateTimeFormatInfo.cs
- NativeMethods.cs
- SQLDouble.cs
- ReversePositionQuery.cs
- LineSegment.cs
- basenumberconverter.cs
- RelOps.cs
- Clause.cs
- CombinedGeometry.cs
- OdbcConnectionPoolProviderInfo.cs
- DateTimeStorage.cs
- SectionInformation.cs
- StreamGeometry.cs
- ContentOperations.cs
- CustomValidator.cs
- OutputCacheProviderCollection.cs
- ServiceEndpointCollection.cs
- UriTemplateVariableQueryValue.cs
- TabRenderer.cs
- ByteStreamMessageEncoder.cs
- FileDialog_Vista_Interop.cs
- SecurityTokenRequirement.cs
- InkPresenter.cs
- CheckBoxPopupAdapter.cs
- StartUpEventArgs.cs
- IdentityNotMappedException.cs
- DownloadProgressEventArgs.cs
- SortedSetDebugView.cs
- BitmapImage.cs
- MethodToken.cs
- CategoryState.cs
- HandlerMappingMemo.cs
- RedistVersionInfo.cs
- LookupBindingPropertiesAttribute.cs
- TemplateControl.cs
- InternalControlCollection.cs
- path.cs
- XmlWriterDelegator.cs
- ArgIterator.cs
- _NegoStream.cs
- UnmanagedMarshal.cs
- XmlLanguageConverter.cs
- UpdateManifestForBrowserApplication.cs
- X509Certificate2Collection.cs
- SchemaDeclBase.cs
- DataKey.cs
- PropertyFilterAttribute.cs
- TargetPerspective.cs
- SafeFileHandle.cs
- Int32AnimationBase.cs
- StructuredProperty.cs
- ExceptionValidationRule.cs
- loginstatus.cs
- CodeRemoveEventStatement.cs
- Color.cs
- StrokeNodeEnumerator.cs
- DecimalConstantAttribute.cs
- SqlCacheDependency.cs
- NestPullup.cs
- ApplicationContext.cs
- webproxy.cs
- QueryExpr.cs
- ToolboxBitmapAttribute.cs
- SystemUnicastIPAddressInformation.cs
- Block.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- BooleanStorage.cs
- ParameterReplacerVisitor.cs
- _ScatterGatherBuffers.cs
- DateTimeConverter2.cs
- OutputWindow.cs
- ApplicationFileCodeDomTreeGenerator.cs
- ProxyWebPartConnectionCollection.cs
- HyperLinkStyle.cs
- MaskInputRejectedEventArgs.cs
- Signature.cs
- Itemizer.cs
- SiteMapNodeCollection.cs
- LabelEditEvent.cs
- RuleSetCollection.cs
- GatewayDefinition.cs
- MetaTable.cs
- DataGridViewButtonCell.cs
- SortedList.cs
- IItemContainerGenerator.cs
- HttpInputStream.cs
- VolatileEnlistmentMultiplexing.cs
- DbConvert.cs