Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / XmlUtils / System / Xml / Xsl / Runtime / StringConcat.cs / 1 / 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
- EntityContainerEmitter.cs
- COM2DataTypeToManagedDataTypeConverter.cs
- CaseStatement.cs
- XmlSchemaRedefine.cs
- StructuredType.cs
- UnauthorizedWebPart.cs
- StrictAndMessageFilter.cs
- IntranetCredentialPolicy.cs
- ExtentJoinTreeNode.cs
- LifetimeManager.cs
- Int16.cs
- ValidatorUtils.cs
- VirtualDirectoryMappingCollection.cs
- FixedSOMFixedBlock.cs
- PermissionListSet.cs
- OutgoingWebRequestContext.cs
- mda.cs
- IndexedSelectQueryOperator.cs
- ReadOnlyDictionary.cs
- httpapplicationstate.cs
- SrgsItemList.cs
- ToolTip.cs
- ConfigurationHelpers.cs
- ThreadStateException.cs
- ValidatingPropertiesEventArgs.cs
- DataGridViewTopRowAccessibleObject.cs
- ZoneMembershipCondition.cs
- Win32KeyboardDevice.cs
- SelectionService.cs
- InfoCardBaseException.cs
- HandlerFactoryWrapper.cs
- DBConnection.cs
- FrameDimension.cs
- FocusChangedEventArgs.cs
- PictureBox.cs
- DateTimeConstantAttribute.cs
- BrushMappingModeValidation.cs
- RestClientProxyHandler.cs
- DataBinding.cs
- ContentElement.cs
- SrgsElementFactory.cs
- CapiSymmetricAlgorithm.cs
- SecurityKeyEntropyMode.cs
- ScrollBarAutomationPeer.cs
- TitleStyle.cs
- SQLChars.cs
- ResourceContainer.cs
- TypeListConverter.cs
- XmlUrlResolver.cs
- ToolBar.cs
- NegotiateStream.cs
- MetadataItemEmitter.cs
- FixedSOMPageConstructor.cs
- XmlCustomFormatter.cs
- StreamInfo.cs
- SystemBrushes.cs
- MethodCallConverter.cs
- MdImport.cs
- WindowsTokenRoleProvider.cs
- ApplicationContext.cs
- HttpDebugHandler.cs
- XmlParserContext.cs
- PrinterUnitConvert.cs
- FilePrompt.cs
- StateBag.cs
- HttpListenerRequest.cs
- TabItem.cs
- ComboBoxRenderer.cs
- IPipelineRuntime.cs
- LinqTreeNodeEvaluator.cs
- Int32Converter.cs
- WindowsListBox.cs
- OrderToken.cs
- PopupEventArgs.cs
- TraceHandler.cs
- XDeferredAxisSource.cs
- DataServiceHostFactory.cs
- DeferredElementTreeState.cs
- AddInProcess.cs
- WebBrowserUriTypeConverter.cs
- ParentControlDesigner.cs
- PrimaryKeyTypeConverter.cs
- XMLSchema.cs
- CookieProtection.cs
- X509RawDataKeyIdentifierClause.cs
- ServiceHttpHandlerFactory.cs
- DataPager.cs
- Exception.cs
- SchemaElement.cs
- XmlExtensionFunction.cs
- TraceSection.cs
- ExceptionAggregator.cs
- SecurityChannel.cs
- HtmlInputSubmit.cs
- Geometry3D.cs
- InitializingNewItemEventArgs.cs
- RuntimeWrappedException.cs
- SolidBrush.cs
- TrackBar.cs
- LessThanOrEqual.cs