Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / XmlUtils / System / Xml / Xsl / Runtime / StringConcat.cs / 2 / StringConcat.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; using System.ComponentModel; namespace System.Xml.Xsl.Runtime { ////// Efficiently concatenates strings when the number of string is not known beforehand, and /// yet it is common for only one string to be concatenated. StringBuilder is not good for /// this purpose, since it *always* allocates objects, even if only one string is appended. /// [EditorBrowsable(EditorBrowsableState.Never)] public struct StringConcat { private string s1, s2, s3, s4; private string delimiter; private ListstrList; int idxStr; /// /// Clear the result string. /// public void Clear() { this.idxStr = 0; this.delimiter = null; } ////// Gets or sets the string that delimits concatenated strings. /// public string Delimiter { get { return this.delimiter; } set { this.delimiter = value; } } ////// Return the number of concatenated strings, including delimiters. /// internal int Count { get { return this.idxStr; } } ////// Concatenate a new string to the result. /// public void Concat(string value) { Debug.Assert(value != null); if (this.delimiter != null && this.idxStr != 0) { // Add delimiter ConcatNoDelimiter(this.delimiter); } ConcatNoDelimiter(value); } ////// Get the result string. /// public string GetResult() { switch (this.idxStr) { case 0: return string.Empty; case 1: return this.s1; case 2: return string.Concat(this.s1, this.s2); case 3: return string.Concat(this.s1, this.s2, this.s3); case 4: return string.Concat(this.s1, this.s2, this.s3, this.s4); } return string.Concat(this.strList.ToArray()); } ////// Concatenate a new string to the result without adding a delimiter. /// internal void ConcatNoDelimiter(string s) { switch (this.idxStr) { case 0: this.s1 = s; break; case 1: this.s2 = s; break; case 2: this.s3 = s; break; case 3: this.s4 = s; break; case 4: // Calling Clear() is expensive, allocate a new List instead int capacity = (this.strList == null) ? 8 : this.strList.Count; ListstrList = this.strList = new List (capacity); strList.Add(this.s1); strList.Add(this.s2); strList.Add(this.s3); strList.Add(this.s4); goto default; default: this.strList.Add(s); break; } this.idxStr++; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; using System.ComponentModel; namespace System.Xml.Xsl.Runtime { ////// Efficiently concatenates strings when the number of string is not known beforehand, and /// yet it is common for only one string to be concatenated. StringBuilder is not good for /// this purpose, since it *always* allocates objects, even if only one string is appended. /// [EditorBrowsable(EditorBrowsableState.Never)] public struct StringConcat { private string s1, s2, s3, s4; private string delimiter; private ListstrList; int idxStr; /// /// Clear the result string. /// public void Clear() { this.idxStr = 0; this.delimiter = null; } ////// Gets or sets the string that delimits concatenated strings. /// public string Delimiter { get { return this.delimiter; } set { this.delimiter = value; } } ////// Return the number of concatenated strings, including delimiters. /// internal int Count { get { return this.idxStr; } } ////// Concatenate a new string to the result. /// public void Concat(string value) { Debug.Assert(value != null); if (this.delimiter != null && this.idxStr != 0) { // Add delimiter ConcatNoDelimiter(this.delimiter); } ConcatNoDelimiter(value); } ////// Get the result string. /// public string GetResult() { switch (this.idxStr) { case 0: return string.Empty; case 1: return this.s1; case 2: return string.Concat(this.s1, this.s2); case 3: return string.Concat(this.s1, this.s2, this.s3); case 4: return string.Concat(this.s1, this.s2, this.s3, this.s4); } return string.Concat(this.strList.ToArray()); } ////// Concatenate a new string to the result without adding a delimiter. /// internal void ConcatNoDelimiter(string s) { switch (this.idxStr) { case 0: this.s1 = s; break; case 1: this.s2 = s; break; case 2: this.s3 = s; break; case 3: this.s4 = s; break; case 4: // Calling Clear() is expensive, allocate a new List instead int capacity = (this.strList == null) ? 8 : this.strList.Count; ListstrList = this.strList = new List (capacity); strList.Add(this.s1); strList.Add(this.s2); strList.Add(this.s3); strList.Add(this.s4); goto default; default: this.strList.Add(s); break; } this.idxStr++; } } } // 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
- MatcherBuilder.cs
- TemplatedMailWebEventProvider.cs
- PropertyItemInternal.cs
- GenericWebPart.cs
- XmlSchemaComplexContentExtension.cs
- XmlLangPropertyAttribute.cs
- SocketCache.cs
- XamlWriter.cs
- SqlDataSourceFilteringEventArgs.cs
- RenderOptions.cs
- FrugalMap.cs
- COM2Enum.cs
- ObjectListDesigner.cs
- EncoderNLS.cs
- DataGridCaption.cs
- BuildManager.cs
- SHA256.cs
- SecurityTokenException.cs
- CqlIdentifiers.cs
- SchemaType.cs
- TimerEventSubscription.cs
- SerializationInfo.cs
- FixedSOMLineCollection.cs
- SourceFileBuildProvider.cs
- ComContractElementCollection.cs
- HttpStaticObjectsCollectionBase.cs
- BuilderPropertyEntry.cs
- SecurityRuntime.cs
- PointHitTestResult.cs
- MulticastIPAddressInformationCollection.cs
- MediaContextNotificationWindow.cs
- Timer.cs
- ContainerSelectorBehavior.cs
- TemplatePartAttribute.cs
- PenThread.cs
- Configuration.cs
- ManipulationInertiaStartingEventArgs.cs
- GenerateTemporaryTargetAssembly.cs
- UnknownBitmapEncoder.cs
- SiteMapDataSourceDesigner.cs
- SHA512.cs
- WebBrowserSiteBase.cs
- CompilerState.cs
- DbConnectionOptions.cs
- MsmqIntegrationBindingElement.cs
- ThreadPool.cs
- PropertiesTab.cs
- DefaultDiscoveryServiceExtension.cs
- cryptoapiTransform.cs
- XmlCharacterData.cs
- Function.cs
- ObjectIDGenerator.cs
- HotSpotCollection.cs
- DbDataReader.cs
- DrawingContext.cs
- PagedControl.cs
- GuidConverter.cs
- BooleanFunctions.cs
- dataSvcMapFileLoader.cs
- OracleCommand.cs
- SessionStateModule.cs
- PageOrientation.cs
- TextDecorationCollection.cs
- WSHttpSecurity.cs
- JournalNavigationScope.cs
- SettingsAttributes.cs
- JapaneseCalendar.cs
- Rotation3D.cs
- WebControlAdapter.cs
- QuaternionAnimation.cs
- ToolStripItemImageRenderEventArgs.cs
- BitmapFrameDecode.cs
- SymbolMethod.cs
- RightsManagementEncryptionTransform.cs
- AuthorizationRule.cs
- Inline.cs
- ConditionalDesigner.cs
- SystemKeyConverter.cs
- ServicePointManager.cs
- CodeLinePragma.cs
- ResourcePool.cs
- ControlParameter.cs
- UriTemplateVariableQueryValue.cs
- PropertyMappingExceptionEventArgs.cs
- XmlQueryStaticData.cs
- DataSourceIDConverter.cs
- FixedNode.cs
- SafeNativeMethodsOther.cs
- SqlStream.cs
- Assembly.cs
- GacUtil.cs
- PropertyOrder.cs
- ListViewDeleteEventArgs.cs
- JavaScriptObjectDeserializer.cs
- TableLayoutSettings.cs
- MessageBox.cs
- Buffer.cs
- RadioButton.cs
- SmiRequestExecutor.cs
- WebHeaderCollection.cs