Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- WebConfigurationFileMap.cs
- RIPEMD160Managed.cs
- BinaryFormatterWriter.cs
- TileModeValidation.cs
- SqlRetyper.cs
- ValidatorUtils.cs
- TextBoxAutomationPeer.cs
- UserValidatedEventArgs.cs
- EntityDataSourceState.cs
- AsymmetricKeyExchangeDeformatter.cs
- ListItemParagraph.cs
- AdornerPresentationContext.cs
- LoadGrammarCompletedEventArgs.cs
- CompositionTarget.cs
- OleDbError.cs
- LogicalExpressionTypeConverter.cs
- SessionPageStatePersister.cs
- XamlSerializer.cs
- MailMessageEventArgs.cs
- BaseTemplateParser.cs
- HostedHttpRequestAsyncResult.cs
- BasicHttpBindingCollectionElement.cs
- TrustManager.cs
- XmlMapping.cs
- SqlDataSourceEnumerator.cs
- ApplicationHost.cs
- EdmConstants.cs
- DetailsViewRowCollection.cs
- EmptyQuery.cs
- FunctionDetailsReader.cs
- DocobjHost.cs
- SynchronizingStream.cs
- ToolboxComponentsCreatingEventArgs.cs
- RuntimeHelpers.cs
- TextRangeEditLists.cs
- UpdateTracker.cs
- URLAttribute.cs
- followingquery.cs
- MimeParameter.cs
- XPathParser.cs
- ClaimComparer.cs
- ConstructorArgumentAttribute.cs
- VBIdentifierName.cs
- AsmxEndpointPickerExtension.cs
- SafeNativeMethods.cs
- Transform.cs
- EDesignUtil.cs
- UserUseLicenseDictionaryLoader.cs
- XmlSchemaSimpleTypeUnion.cs
- PrimitiveDataContract.cs
- NonSerializedAttribute.cs
- LocalizabilityAttribute.cs
- RichTextBoxConstants.cs
- TrackBar.cs
- NameValueSectionHandler.cs
- DataGridViewRowPrePaintEventArgs.cs
- DbConnectionClosed.cs
- DesignerForm.cs
- CaseExpr.cs
- SoapExtensionTypeElement.cs
- XPathScanner.cs
- ToolBar.cs
- HostAdapter.cs
- InfoCardCryptoHelper.cs
- EdmScalarPropertyAttribute.cs
- ArgumentException.cs
- Scripts.cs
- XXXOnTypeBuilderInstantiation.cs
- FixedPageStructure.cs
- TextServicesDisplayAttributePropertyRanges.cs
- SequentialUshortCollection.cs
- XmlSubtreeReader.cs
- InvalidProgramException.cs
- QilValidationVisitor.cs
- SqlClientFactory.cs
- PatternMatcher.cs
- DescendantOverDescendantQuery.cs
- KeyBinding.cs
- UrlMappingsModule.cs
- ReadOnlyCollection.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- UrlPath.cs
- _NTAuthentication.cs
- ModelFunction.cs
- WebServiceMethodData.cs
- CompilerLocalReference.cs
- DescendentsWalkerBase.cs
- QilTypeChecker.cs
- ObjectStateManager.cs
- HealthMonitoringSection.cs
- ComPlusDiagnosticTraceRecords.cs
- IIS7UserPrincipal.cs
- CodeArrayIndexerExpression.cs
- VerificationAttribute.cs
- SimpleWebHandlerParser.cs
- RtfFormatStack.cs
- CheckPair.cs
- IIS7ConfigurationLoader.cs
- EventMappingSettingsCollection.cs
- PropertyDescriptor.cs