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
- InvalidFilterCriteriaException.cs
- DataSet.cs
- SqlTypeConverter.cs
- SoapFormatExtensions.cs
- UnsafeNativeMethods.cs
- QilName.cs
- UpDownBase.cs
- EventMappingSettingsCollection.cs
- SequentialOutput.cs
- Literal.cs
- DBParameter.cs
- AbandonedMutexException.cs
- LineProperties.cs
- WebReference.cs
- Label.cs
- AuthenticationException.cs
- PropertyGeneratedEventArgs.cs
- DockProviderWrapper.cs
- XPathNodeIterator.cs
- CompilerGeneratedAttribute.cs
- ResourceExpressionEditor.cs
- PropertyInfoSet.cs
- UrlMappingCollection.cs
- UnaryNode.cs
- XmlSchemaAttribute.cs
- SymbolTable.cs
- LineBreak.cs
- FormsAuthenticationEventArgs.cs
- ConcurrencyMode.cs
- ClientBuildManager.cs
- ReflectionUtil.cs
- DrawingVisualDrawingContext.cs
- SqlUDTStorage.cs
- XmlStringTable.cs
- ToolStripScrollButton.cs
- NativeWindow.cs
- PageOutputColor.cs
- SqlCommand.cs
- TextAdaptor.cs
- DoubleLinkList.cs
- PrinterUnitConvert.cs
- SafeTimerHandle.cs
- MethodInfo.cs
- DelegatedStream.cs
- SamlSecurityTokenAuthenticator.cs
- ToolboxService.cs
- StringValidatorAttribute.cs
- NetworkCredential.cs
- RijndaelManagedTransform.cs
- XmlBinaryReaderSession.cs
- SiteMapDataSourceView.cs
- SyndicationFeed.cs
- WindowsGrip.cs
- PublisherMembershipCondition.cs
- SqlMetaData.cs
- ContextMenuStripGroup.cs
- ArrayList.cs
- DataConnectionHelper.cs
- TableRow.cs
- AmbientProperties.cs
- UrlPath.cs
- SoapSchemaMember.cs
- DataGridParentRows.cs
- UIElement.cs
- DrawingContextDrawingContextWalker.cs
- MessageDesigner.cs
- DataGridViewCell.cs
- BitArray.cs
- DynamicQueryableWrapper.cs
- ConnectionStringSettings.cs
- RegexCompiler.cs
- EventHandlingScope.cs
- PermissionToken.cs
- ProvideValueServiceProvider.cs
- HtmlGenericControl.cs
- ReliableOutputConnection.cs
- TreeViewHitTestInfo.cs
- AttributeProviderAttribute.cs
- StyleTypedPropertyAttribute.cs
- StrongNamePublicKeyBlob.cs
- WindowPattern.cs
- GenericRootAutomationPeer.cs
- EqualityComparer.cs
- MimeMultiPart.cs
- UInt16Converter.cs
- NavigationProperty.cs
- HttpListenerPrefixCollection.cs
- MessagePartDescription.cs
- SvcMapFileSerializer.cs
- ConversionValidationRule.cs
- PlanCompiler.cs
- EntryPointNotFoundException.cs
- ItemsControlAutomationPeer.cs
- AuthenticationConfig.cs
- ReservationCollection.cs
- LocalFileSettingsProvider.cs
- DataGridViewEditingControlShowingEventArgs.cs
- PriorityChain.cs
- DynamicMetaObjectBinder.cs
- XmlMapping.cs