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
- PluralizationService.cs
- CreateSequenceResponse.cs
- OdbcUtils.cs
- DependencyObject.cs
- XmlSchemaAnnotation.cs
- IOException.cs
- PaintValueEventArgs.cs
- SymDocumentType.cs
- DataGridViewRowsAddedEventArgs.cs
- RunWorkerCompletedEventArgs.cs
- documentation.cs
- SQLRoleProvider.cs
- KeyFrames.cs
- DbConnectionPoolGroupProviderInfo.cs
- AsyncPostBackErrorEventArgs.cs
- XmlElementCollection.cs
- XmlBinaryReader.cs
- QueryCursorEventArgs.cs
- WebPartConnectionsConfigureVerb.cs
- BaseDataBoundControl.cs
- TypographyProperties.cs
- CellIdBoolean.cs
- XslVisitor.cs
- SqlFileStream.cs
- _ListenerAsyncResult.cs
- BindingContext.cs
- IPipelineRuntime.cs
- ApplicationSettingsBase.cs
- SoapFault.cs
- StylusDownEventArgs.cs
- OdbcConnectionHandle.cs
- QilReference.cs
- DynamicObjectAccessor.cs
- ResourceBinder.cs
- LeftCellWrapper.cs
- ToolboxComponentsCreatedEventArgs.cs
- CriticalFinalizerObject.cs
- Timer.cs
- RequestNavigateEventArgs.cs
- InternalBase.cs
- HitTestWithPointDrawingContextWalker.cs
- Enlistment.cs
- StyleSheetDesigner.cs
- ObjectDataSourceDisposingEventArgs.cs
- Compilation.cs
- DataGridViewComboBoxColumn.cs
- TemplatePagerField.cs
- DispatcherExceptionFilterEventArgs.cs
- Pen.cs
- KnownColorTable.cs
- BuilderInfo.cs
- BindingExpressionUncommonField.cs
- CollectionContainer.cs
- WindowsMenu.cs
- PageRanges.cs
- Rights.cs
- EventDescriptorCollection.cs
- ControlCachePolicy.cs
- DataGridPreparingCellForEditEventArgs.cs
- Funcletizer.cs
- ClientSponsor.cs
- ResourceType.cs
- FormViewUpdateEventArgs.cs
- X509ChainPolicy.cs
- EntitySqlException.cs
- sqlnorm.cs
- RowUpdatedEventArgs.cs
- PlatformCulture.cs
- RoleManagerModule.cs
- XmlNullResolver.cs
- ButtonFlatAdapter.cs
- StandardCommands.cs
- AdornerHitTestResult.cs
- ControlPersister.cs
- LoadRetryHandler.cs
- EdmToObjectNamespaceMap.cs
- filewebresponse.cs
- DataGridColumnCollectionEditor.cs
- PageEventArgs.cs
- SpellCheck.cs
- ScriptingRoleServiceSection.cs
- ScrollEvent.cs
- DataGridRow.cs
- SettingsPropertyCollection.cs
- RelatedCurrencyManager.cs
- MenuBindingsEditor.cs
- Brush.cs
- DataGridViewTopLeftHeaderCell.cs
- Win32.cs
- WebPartCatalogCloseVerb.cs
- OpenFileDialog.cs
- QueryOutputWriter.cs
- Point3D.cs
- ping.cs
- HMACSHA384.cs
- CommonProperties.cs
- DictionaryTraceRecord.cs
- HttpCookieCollection.cs
- MergeFilterQuery.cs
- PresentationAppDomainManager.cs