Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / XmlUtils / System / Xml / Xsl / Runtime / StringConcat.cs / 2 / 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
- PrintDocument.cs
- WebHttpEndpointElement.cs
- FormViewInsertEventArgs.cs
- PageParserFilter.cs
- XPathDocumentNavigator.cs
- XmlQueryType.cs
- WindowsRichEdit.cs
- TagMapInfo.cs
- ConsoleEntryPoint.cs
- SqlDataSource.cs
- __Filters.cs
- IsolatedStorageFileStream.cs
- ValidationEventArgs.cs
- ImmutableObjectAttribute.cs
- ConfigurationSchemaErrors.cs
- SQLBytesStorage.cs
- Utils.cs
- ThreadPool.cs
- X509SecurityTokenProvider.cs
- WebDisplayNameAttribute.cs
- EntityDataSourceQueryBuilder.cs
- FileDialog.cs
- VoiceObjectToken.cs
- GraphicsState.cs
- TrackingWorkflowEventArgs.cs
- DesignerCalendarAdapter.cs
- TextDpi.cs
- PermissionAttributes.cs
- AutomationProperty.cs
- DatatypeImplementation.cs
- DirectoryObjectSecurity.cs
- WinEventHandler.cs
- Win32KeyboardDevice.cs
- SqlIdentifier.cs
- InnerItemCollectionView.cs
- PathData.cs
- COM2PropertyDescriptor.cs
- UniqueContractNameValidationBehavior.cs
- WindowsSlider.cs
- ThreadPool.cs
- TransactionalPackage.cs
- SQLMoneyStorage.cs
- LockCookie.cs
- SchemaTypeEmitter.cs
- EntityReference.cs
- BulletChrome.cs
- Attributes.cs
- CollaborationHelperFunctions.cs
- BatchParser.cs
- UserControl.cs
- PatternMatchRules.cs
- SendKeys.cs
- UnknownWrapper.cs
- Publisher.cs
- AppDomainUnloadedException.cs
- DetailsView.cs
- DocumentEventArgs.cs
- DataGridViewRowPrePaintEventArgs.cs
- NameHandler.cs
- ServiceOperationListItem.cs
- SchemaCollectionCompiler.cs
- TemplatePagerField.cs
- PersianCalendar.cs
- CryptoApi.cs
- ViewBase.cs
- _HTTPDateParse.cs
- CodeSnippetExpression.cs
- ListItemCollection.cs
- Select.cs
- RowSpanVector.cs
- ListViewTableCell.cs
- PreservationFileWriter.cs
- NameTable.cs
- UserControlAutomationPeer.cs
- DCSafeHandle.cs
- RuleSettingsCollection.cs
- IconHelper.cs
- _OverlappedAsyncResult.cs
- AbstractDataSvcMapFileLoader.cs
- Primitive.cs
- EntityTypeEmitter.cs
- SystemIcmpV6Statistics.cs
- WebResourceAttribute.cs
- SystemSounds.cs
- EnumDataContract.cs
- AddInPipelineAttributes.cs
- TextSchema.cs
- DelegateHelpers.Generated.cs
- DesignOnlyAttribute.cs
- VisualBasicDesignerHelper.cs
- SpellCheck.cs
- arabicshape.cs
- DeriveBytes.cs
- ToolStripLabel.cs
- DesignerRegionCollection.cs
- CacheEntry.cs
- EventLogPermissionEntryCollection.cs
- LogicalCallContext.cs
- TransactedBatchContext.cs
- UnsafeNativeMethods.cs