Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- PageFunction.cs
- StreamSecurityUpgradeAcceptor.cs
- StyleBamlRecordReader.cs
- DataServiceHostFactory.cs
- Splitter.cs
- Popup.cs
- VBIdentifierNameEditor.cs
- EntityDataSourceView.cs
- SqlTrackingWorkflowInstance.cs
- PassportAuthenticationModule.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- XmlCDATASection.cs
- InternalDispatchObject.cs
- SqlDataSourceFilteringEventArgs.cs
- ColumnMapCopier.cs
- ProcessModelInfo.cs
- base64Transforms.cs
- DataServiceBehavior.cs
- Visual.cs
- HashHelper.cs
- Light.cs
- ExpressionEditorAttribute.cs
- Type.cs
- Brush.cs
- WeakHashtable.cs
- ResourceFallbackManager.cs
- SchemeSettingElementCollection.cs
- QilBinary.cs
- PropertyPathWorker.cs
- HttpMethodAttribute.cs
- PreviewPrintController.cs
- ResponseStream.cs
- ISessionStateStore.cs
- LinkDescriptor.cs
- ManipulationCompletedEventArgs.cs
- BamlRecords.cs
- PenLineJoinValidation.cs
- InfoCardProofToken.cs
- ConnectionStringEditor.cs
- WorkflowMarkupSerializationManager.cs
- WindowsSolidBrush.cs
- ListBoxAutomationPeer.cs
- StylusEditingBehavior.cs
- MailMessage.cs
- OutputCacheSection.cs
- Converter.cs
- XmlDeclaration.cs
- CornerRadiusConverter.cs
- ObjectDataSourceDisposingEventArgs.cs
- XmlAttributeOverrides.cs
- OleStrCAMarshaler.cs
- PiiTraceSource.cs
- BufferedGraphics.cs
- CryptoApi.cs
- DrawingContextDrawingContextWalker.cs
- DesignerAutoFormatCollection.cs
- ObservableCollection.cs
- WebPartDescription.cs
- HttpCapabilitiesEvaluator.cs
- EncryptedPackageFilter.cs
- GroupQuery.cs
- ButtonBaseAdapter.cs
- CompilationAssemblyInstallComponent.cs
- BaseInfoTable.cs
- ColumnCollection.cs
- RequiredFieldValidator.cs
- ClientProxyGenerator.cs
- DataStorage.cs
- Clause.cs
- BaseCollection.cs
- TranslateTransform3D.cs
- _ScatterGatherBuffers.cs
- IfAction.cs
- FormsAuthenticationCredentials.cs
- __TransparentProxy.cs
- Restrictions.cs
- CoreSwitches.cs
- WindowsAuthenticationModule.cs
- InsufficientMemoryException.cs
- FormsAuthenticationTicket.cs
- NonParentingControl.cs
- Image.cs
- EntityTypeEmitter.cs
- SequenceFullException.cs
- DynamicDataRoute.cs
- BamlResourceContent.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- Debug.cs
- EditorPartCollection.cs
- SiteIdentityPermission.cs
- DataGridViewEditingControlShowingEventArgs.cs
- DotExpr.cs
- ModelUIElement3D.cs
- OutputCacheSettings.cs
- RemotingSurrogateSelector.cs
- RadioButton.cs
- DetailsViewPagerRow.cs
- GPPOINT.cs
- PathFigureCollection.cs
- FormsAuthenticationEventArgs.cs