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
- XmlSchemaCompilationSettings.cs
- PeerContact.cs
- ProfessionalColors.cs
- COM2ExtendedTypeConverter.cs
- AxisAngleRotation3D.cs
- StatusBarPanel.cs
- TimeSpanStorage.cs
- MsmqInputMessagePool.cs
- ChannelBinding.cs
- WorkflowFileItem.cs
- IProducerConsumerCollection.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- RijndaelManagedTransform.cs
- ImportedNamespaceContextItem.cs
- ActivityCompletionCallbackWrapper.cs
- XmlElement.cs
- FastEncoderStatics.cs
- MD5.cs
- TypeAccessException.cs
- FieldTemplateFactory.cs
- XmlDataSource.cs
- ExtensionDataReader.cs
- WebPartDisplayModeCollection.cs
- WebPartChrome.cs
- AuthenticationModulesSection.cs
- LayoutTable.cs
- ServiceDiscoveryBehavior.cs
- DataGridCommandEventArgs.cs
- SettingsContext.cs
- TreeViewImageKeyConverter.cs
- LogicalExpr.cs
- ListViewDataItem.cs
- SpecialNameAttribute.cs
- RequestCacheValidator.cs
- TemplateKey.cs
- AppDomainManager.cs
- SqlInfoMessageEvent.cs
- SelectionManager.cs
- altserialization.cs
- Console.cs
- SqlVisitor.cs
- ComponentEditorPage.cs
- TypeUtils.cs
- AppDomainEvidenceFactory.cs
- PointUtil.cs
- XamlFilter.cs
- TextServicesContext.cs
- IpcServerChannel.cs
- UIElement.cs
- DesignSurfaceServiceContainer.cs
- CachedBitmap.cs
- PlatformCulture.cs
- XmlDocumentFragment.cs
- NamespaceQuery.cs
- SemaphoreSecurity.cs
- CurrencyManager.cs
- TableColumn.cs
- StorageEndPropertyMapping.cs
- FormView.cs
- StylesEditorDialog.cs
- SecurityTokenSerializer.cs
- TrackingServices.cs
- TeredoHelper.cs
- ColumnProvider.cs
- MemoryStream.cs
- MatrixCamera.cs
- FileDataSourceCache.cs
- UnionQueryOperator.cs
- InkCanvasFeedbackAdorner.cs
- BackgroundFormatInfo.cs
- StringBuilder.cs
- JsonWriter.cs
- Clipboard.cs
- KeyboardNavigation.cs
- ModelItemDictionary.cs
- RsaEndpointIdentity.cs
- ColorInterpolationModeValidation.cs
- BinaryReader.cs
- WCFModelStrings.Designer.cs
- QuadraticBezierSegment.cs
- storepermissionattribute.cs
- StdValidatorsAndConverters.cs
- StylusDevice.cs
- StreamingContext.cs
- Models.cs
- ScriptDescriptor.cs
- LayoutTableCell.cs
- EncryptedType.cs
- FormViewCommandEventArgs.cs
- EncoderParameters.cs
- Ipv6Element.cs
- DeclarationUpdate.cs
- LookupBindingPropertiesAttribute.cs
- WorkflowMarkupSerializationException.cs
- MemoryPressure.cs
- BufferCache.cs
- CheckableControlBaseAdapter.cs
- SelectionChangedEventArgs.cs
- ListCardsInFileRequest.cs
- XhtmlBasicLinkAdapter.cs