Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / Runtime / StringConcat.cs / 1305376 / 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
- MemoryStream.cs
- ChunkedMemoryStream.cs
- MatcherBuilder.cs
- DataDocumentXPathNavigator.cs
- InvalidDataException.cs
- WorkflowPrinting.cs
- IndicFontClient.cs
- IChannel.cs
- RelationshipDetailsRow.cs
- HMACSHA512.cs
- WeakEventTable.cs
- DATA_BLOB.cs
- UserControl.cs
- WindowsFormsSectionHandler.cs
- ThreadAttributes.cs
- XmlStreamStore.cs
- UniformGrid.cs
- RectangleGeometry.cs
- Color.cs
- StylusPointProperty.cs
- HtmlImage.cs
- EmptyEnumerator.cs
- XmlNotation.cs
- TextMetrics.cs
- CodeArrayCreateExpression.cs
- GlobalProxySelection.cs
- _AuthenticationState.cs
- ConnectionPoolManager.cs
- metadatamappinghashervisitor.cs
- AsymmetricKeyExchangeFormatter.cs
- SafeCryptoHandles.cs
- RemotingSurrogateSelector.cs
- TemplateKey.cs
- Base64Decoder.cs
- DynamicHyperLink.cs
- SimpleHandlerBuildProvider.cs
- DetailsViewUpdateEventArgs.cs
- JobDuplex.cs
- ConnectionPoolManager.cs
- RootNamespaceAttribute.cs
- HttpChannelHelper.cs
- ExplicitDiscriminatorMap.cs
- HttpBufferlessInputStream.cs
- ActiveXHelper.cs
- DesignerSerializationOptionsAttribute.cs
- SqlDataSourceView.cs
- PageStatePersister.cs
- XamlPointCollectionSerializer.cs
- TrackingServices.cs
- AssemblyCollection.cs
- SqlDataSourceQuery.cs
- ProviderConnectionPoint.cs
- GroupQuery.cs
- DataSourceIDConverter.cs
- ConfigurationHelpers.cs
- PeerTransportCredentialType.cs
- GridView.cs
- EventHandlerService.cs
- TextInfo.cs
- ResourceDictionary.cs
- ConfigXmlSignificantWhitespace.cs
- __Filters.cs
- __Filters.cs
- SkinBuilder.cs
- RichTextBoxAutomationPeer.cs
- MimeTypeAttribute.cs
- ObjectManager.cs
- HeaderUtility.cs
- ContentType.cs
- CompositionCommandSet.cs
- ManagedFilter.cs
- BitmapSourceSafeMILHandle.cs
- RegexCompiler.cs
- BuildProviderUtils.cs
- InputScopeAttribute.cs
- Style.cs
- Configuration.cs
- PtsCache.cs
- Rectangle.cs
- LookupBindingPropertiesAttribute.cs
- EventsTab.cs
- DateTimeConstantAttribute.cs
- SiteMembershipCondition.cs
- Single.cs
- GlyphCache.cs
- HotSpotCollection.cs
- BamlRecordReader.cs
- BufferedStream2.cs
- OleDbPropertySetGuid.cs
- _DisconnectOverlappedAsyncResult.cs
- Highlights.cs
- CodeSnippetStatement.cs
- DesignerForm.cs
- XmlSerializationWriter.cs
- QueryOperationResponseOfT.cs
- MultipleViewPattern.cs
- ClaimSet.cs
- SqlProviderManifest.cs
- Image.cs
- BamlTreeNode.cs