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
- RepeaterItemEventArgs.cs
- RefreshPropertiesAttribute.cs
- EnvelopedPkcs7.cs
- ResourceSetExpression.cs
- InkCanvasSelectionAdorner.cs
- StylusShape.cs
- AsymmetricKeyExchangeFormatter.cs
- XslTransform.cs
- EnlistmentTraceIdentifier.cs
- KerberosRequestorSecurityToken.cs
- DescendentsWalkerBase.cs
- NetworkInformationPermission.cs
- Ref.cs
- QueryResult.cs
- ScriptingWebServicesSectionGroup.cs
- InternalBase.cs
- XmlChildEnumerator.cs
- ProtectedConfigurationSection.cs
- ResourceSet.cs
- SafeFileMappingHandle.cs
- DbDataReader.cs
- JapaneseCalendar.cs
- DocumentPageHost.cs
- TableStyle.cs
- NamespaceList.cs
- DSASignatureDeformatter.cs
- EdmItemCollection.cs
- NamespaceQuery.cs
- ExceptionHandlers.cs
- RequestCacheManager.cs
- ConfigurationSettings.cs
- Int16Storage.cs
- ProfileServiceManager.cs
- TemplateModeChangedEventArgs.cs
- PassportAuthenticationModule.cs
- RolePrincipal.cs
- FramingEncoders.cs
- SafeNativeMethods.cs
- DataGridViewControlCollection.cs
- RelatedCurrencyManager.cs
- TextElementCollection.cs
- ReadOnlyHierarchicalDataSourceView.cs
- FileResponseElement.cs
- RadialGradientBrush.cs
- FixedFlowMap.cs
- Stackframe.cs
- AbstractSvcMapFileLoader.cs
- SqlEnums.cs
- RequestNavigateEventArgs.cs
- SafeBuffer.cs
- EnvelopedPkcs7.cs
- DiffuseMaterial.cs
- WindowVisualStateTracker.cs
- DocumentSequenceHighlightLayer.cs
- PopOutPanel.cs
- Control.cs
- InstanceOwner.cs
- SafeLibraryHandle.cs
- handlecollector.cs
- FileDataSourceCache.cs
- SiteMapProvider.cs
- MonitoringDescriptionAttribute.cs
- WindowsFormsHostAutomationPeer.cs
- FixedPosition.cs
- ReflectionUtil.cs
- NavigatorOutput.cs
- WorkflowServiceOperationListItem.cs
- Expander.cs
- AnnotationHighlightLayer.cs
- FontCacheUtil.cs
- MemberAssignment.cs
- GenerateHelper.cs
- NameValueConfigurationElement.cs
- ToolZoneDesigner.cs
- BinaryMessageEncodingBindingElement.cs
- SqlDataReaderSmi.cs
- FlowLayoutPanel.cs
- DockAndAnchorLayout.cs
- EditorZone.cs
- XomlDesignerLoader.cs
- LambdaReference.cs
- AssemblyLoader.cs
- SafePEFileHandle.cs
- SimpleMailWebEventProvider.cs
- GenericNameHandler.cs
- EntityDataSourceView.cs
- UshortList2.cs
- CommunicationObjectManager.cs
- AsyncStreamReader.cs
- WebPartConnectionsConnectVerb.cs
- URLString.cs
- DecoderBestFitFallback.cs
- PropertyChangingEventArgs.cs
- cookiecollection.cs
- AsyncPostBackTrigger.cs
- BindingRestrictions.cs
- WindowsFormsSectionHandler.cs
- XmlSchemaSet.cs
- KeyTime.cs
- ZoneIdentityPermission.cs