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
- TextOnlyOutput.cs
- InputReport.cs
- AddingNewEventArgs.cs
- CodeObjectCreateExpression.cs
- RegisteredArrayDeclaration.cs
- ManipulationPivot.cs
- CompositeActivityCodeGenerator.cs
- SiteMapNodeItemEventArgs.cs
- ThemeDictionaryExtension.cs
- XpsSerializerFactory.cs
- GrammarBuilderPhrase.cs
- SqlBooleanizer.cs
- WindowsFormsSynchronizationContext.cs
- CatalogPartCollection.cs
- HwndTarget.cs
- safemediahandle.cs
- WorkflowMarkupSerializationManager.cs
- DataServiceRequest.cs
- ModifyActivitiesPropertyDescriptor.cs
- RetrieveVirtualItemEventArgs.cs
- TypeConverterHelper.cs
- FlowSwitchLink.cs
- BitmapEffectGeneralTransform.cs
- ReversePositionQuery.cs
- MetaModel.cs
- BitmapFrameEncode.cs
- Highlights.cs
- CacheEntry.cs
- HttpCapabilitiesBase.cs
- Renderer.cs
- Quad.cs
- UpDownBase.cs
- SafeArrayTypeMismatchException.cs
- FileLogRecordStream.cs
- ReadWriteObjectLock.cs
- DecimalConstantAttribute.cs
- CardSpaceException.cs
- StrokeFIndices.cs
- MachineKeyConverter.cs
- MenuAdapter.cs
- Canvas.cs
- NativeCompoundFileAPIs.cs
- LazyTextWriterCreator.cs
- CompilerParameters.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- ProviderSettingsCollection.cs
- ListViewDeletedEventArgs.cs
- StylusShape.cs
- SerializationSectionGroup.cs
- EventData.cs
- DecoderFallbackWithFailureFlag.cs
- EncoderBestFitFallback.cs
- MembershipSection.cs
- HTMLTextWriter.cs
- XmlCharType.cs
- IssuanceLicense.cs
- PropertyBuilder.cs
- FillErrorEventArgs.cs
- DecimalConverter.cs
- BitmapEffectInput.cs
- CookieParameter.cs
- Group.cs
- FieldDescriptor.cs
- ConnectionPoint.cs
- TableLayoutSettings.cs
- IItemContainerGenerator.cs
- XamlSerializationHelper.cs
- AlphaSortedEnumConverter.cs
- ISessionStateStore.cs
- CompModSwitches.cs
- UnsafeNativeMethods.cs
- CodeArrayIndexerExpression.cs
- Vector3DCollection.cs
- Helper.cs
- MethodToken.cs
- AttachmentService.cs
- DelegatingTypeDescriptionProvider.cs
- DocumentPage.cs
- FilterQuery.cs
- StringInfo.cs
- SubMenuStyle.cs
- ConnectivityStatus.cs
- ImmutableCollection.cs
- Binding.cs
- MultiTrigger.cs
- FullTextBreakpoint.cs
- DeclarativeCatalogPart.cs
- SystemPens.cs
- StreamingContext.cs
- DataControlFieldCollection.cs
- TemplateComponentConnector.cs
- SQLByteStorage.cs
- ThreadAbortException.cs
- HasRunnableWorkflowEvent.cs
- SudsWriter.cs
- TypeUsage.cs
- HttpHostedTransportConfiguration.cs
- SiteIdentityPermission.cs
- UnsafeNativeMethodsPenimc.cs
- QilChoice.cs