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
- XmlSchemaValidator.cs
- __ConsoleStream.cs
- SerializationObjectManager.cs
- XmlEnumAttribute.cs
- SafeEventHandle.cs
- NoneExcludedImageIndexConverter.cs
- RoleManagerSection.cs
- SharedConnectionInfo.cs
- DesignerVerbCollection.cs
- Span.cs
- SiteMapDataSource.cs
- HtmlControl.cs
- RSACryptoServiceProvider.cs
- Line.cs
- ToReply.cs
- initElementDictionary.cs
- DataListItem.cs
- CodeMemberProperty.cs
- LabelDesigner.cs
- _ConnectionGroup.cs
- Visual3D.cs
- diagnosticsswitches.cs
- ZipIOExtraField.cs
- RightsManagementPermission.cs
- AppDomainFactory.cs
- IsolatedStoragePermission.cs
- UpnEndpointIdentityExtension.cs
- FillBehavior.cs
- X509Utils.cs
- CompositeActivityTypeDescriptor.cs
- FormViewUpdatedEventArgs.cs
- BindableAttribute.cs
- DeadCharTextComposition.cs
- SqlDependencyUtils.cs
- XmlnsDictionary.cs
- ResourceWriter.cs
- Int64AnimationBase.cs
- Condition.cs
- CodeNamespaceCollection.cs
- Int16AnimationUsingKeyFrames.cs
- LogConverter.cs
- TreeViewImageIndexConverter.cs
- SqlFileStream.cs
- AccessibilityHelperForXpWin2k3.cs
- DispatcherOperation.cs
- MaskedTextBox.cs
- BinaryObjectWriter.cs
- HostedNamedPipeTransportManager.cs
- SqlConnectionString.cs
- latinshape.cs
- UpdateManifestForBrowserApplication.cs
- LockedAssemblyCache.cs
- StaticDataManager.cs
- wgx_sdk_version.cs
- ProfileModule.cs
- UriTemplateEquivalenceComparer.cs
- InstancePersistenceCommandException.cs
- DragAssistanceManager.cs
- DetailsViewInsertEventArgs.cs
- NavigationWindow.cs
- ObjectItemAssemblyLoader.cs
- AllMembershipCondition.cs
- ListDictionaryInternal.cs
- _emptywebproxy.cs
- SHA256.cs
- _LocalDataStore.cs
- AbstractExpressions.cs
- ControlAdapter.cs
- ClientScriptManager.cs
- SortDescriptionCollection.cs
- ServicesUtilities.cs
- infer.cs
- SafeBitVector32.cs
- ResourceReader.cs
- GenericTypeParameterBuilder.cs
- KeyProperty.cs
- MSAAWinEventWrap.cs
- Style.cs
- PolyLineSegment.cs
- CharacterBuffer.cs
- StorageEntityTypeMapping.cs
- WindowsListViewGroupSubsetLink.cs
- SerializationInfoEnumerator.cs
- ArraySubsetEnumerator.cs
- DataRowCollection.cs
- GeneralTransform3DTo2DTo3D.cs
- CustomAttributeFormatException.cs
- HttpValueCollection.cs
- AbstractExpressions.cs
- Underline.cs
- DependencyPropertyChangedEventArgs.cs
- AuthenticatedStream.cs
- SerializerWriterEventHandlers.cs
- ScriptingScriptResourceHandlerSection.cs
- CmsInterop.cs
- ByteStreamMessage.cs
- InstanceOwner.cs
- BamlVersionHeader.cs
- BinaryFormatter.cs
- ImageCodecInfo.cs