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
- RecordBuilder.cs
- EDesignUtil.cs
- AdornerDecorator.cs
- IISMapPath.cs
- ModuleElement.cs
- DoubleUtil.cs
- FileUpload.cs
- AspNetHostingPermission.cs
- NamedPipeChannelListener.cs
- ArrayWithOffset.cs
- ProcessingInstructionAction.cs
- MessageQuerySet.cs
- Win32Exception.cs
- WebPartVerbsEventArgs.cs
- EntityProxyTypeInfo.cs
- FileReservationCollection.cs
- CodeCommentStatementCollection.cs
- UserPreferenceChangingEventArgs.cs
- ComplexTypeEmitter.cs
- CacheAxisQuery.cs
- DataSet.cs
- HostProtectionException.cs
- ViewCellRelation.cs
- Permission.cs
- WebPermission.cs
- TypedAsyncResult.cs
- EntityReference.cs
- TypeUsageBuilder.cs
- ProviderConnectionPointCollection.cs
- PagerSettings.cs
- SqlDataSourceSelectingEventArgs.cs
- XmlIterators.cs
- AnimationStorage.cs
- Int32Rect.cs
- SetMemberBinder.cs
- infer.cs
- ValueQuery.cs
- MouseButtonEventArgs.cs
- SuppressMessageAttribute.cs
- ColorDialog.cs
- MultipartIdentifier.cs
- TreeNode.cs
- UserPreferenceChangingEventArgs.cs
- DataServiceSaveChangesEventArgs.cs
- DataGridViewCellStyleEditor.cs
- SkinBuilder.cs
- QilName.cs
- PromptBuilder.cs
- XpsTokenContext.cs
- VectorAnimationBase.cs
- DataGridAddNewRow.cs
- QueryExpression.cs
- TrackingServices.cs
- TemplatedMailWebEventProvider.cs
- ReturnValue.cs
- Image.cs
- ReadOnlyObservableCollection.cs
- PenContext.cs
- Matrix.cs
- WCFModelStrings.Designer.cs
- TileModeValidation.cs
- PermissionSetTriple.cs
- EdmProviderManifest.cs
- HttpResponseWrapper.cs
- XslVisitor.cs
- SyndicationElementExtension.cs
- ItemList.cs
- METAHEADER.cs
- Stroke.cs
- WebServicesDescriptionAttribute.cs
- Helper.cs
- XmlLanguageConverter.cs
- AssemblyUtil.cs
- HostUtils.cs
- RouteCollection.cs
- ImageCodecInfo.cs
- DetailsViewDeleteEventArgs.cs
- StylusCollection.cs
- FileDataSourceCache.cs
- VisualTreeUtils.cs
- OperatingSystem.cs
- ThrowHelper.cs
- SerialPort.cs
- PenThreadPool.cs
- HotSpot.cs
- ServiceDescriptionReflector.cs
- ObjectListCommandEventArgs.cs
- Transform.cs
- DataGridViewLayoutData.cs
- DataGrid.cs
- TemplatedMailWebEventProvider.cs
- StringWriter.cs
- StorageMappingFragment.cs
- AutomationPropertyInfo.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- ListViewCancelEventArgs.cs
- ProxyManager.cs
- WeakReferenceList.cs
- HttpStaticObjectsCollectionWrapper.cs
- EditorPartDesigner.cs