Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- SingleResultAttribute.cs
- MultiPageTextView.cs
- GetLastErrorDetailsRequest.cs
- DispatcherHookEventArgs.cs
- CodeTypeReference.cs
- connectionpool.cs
- webeventbuffer.cs
- Permission.cs
- HttpDictionary.cs
- AuthorizationSection.cs
- WpfPayload.cs
- Thread.cs
- ClientTargetSection.cs
- FileStream.cs
- DiagnosticsConfigurationHandler.cs
- FixedTextPointer.cs
- AuthenticationConfig.cs
- CodeBlockBuilder.cs
- CompleteWizardStep.cs
- AmbiguousMatchException.cs
- Positioning.cs
- MSAANativeProvider.cs
- PersianCalendar.cs
- SQLInt16Storage.cs
- ObjectContext.cs
- MobileTextWriter.cs
- TransactionProtocolConverter.cs
- CombinedGeometry.cs
- HtmlSelect.cs
- MediaScriptCommandRoutedEventArgs.cs
- Button.cs
- CommandManager.cs
- XNodeValidator.cs
- CreateUserWizard.cs
- QilVisitor.cs
- SqlParameterizer.cs
- KeyValueSerializer.cs
- EditorPartCollection.cs
- FormatException.cs
- LineSegment.cs
- SoapDocumentMethodAttribute.cs
- DataKeyCollection.cs
- Size3D.cs
- Menu.cs
- RowVisual.cs
- AdPostCacheSubstitution.cs
- FileDialog.cs
- IUnknownConstantAttribute.cs
- XMLSyntaxException.cs
- SystemIcmpV6Statistics.cs
- OrderedDictionaryStateHelper.cs
- StaticFileHandler.cs
- DuplicateDetector.cs
- RenderData.cs
- CryptographicAttribute.cs
- PointLightBase.cs
- PropertyStore.cs
- InstanceDataCollection.cs
- InputMethodStateTypeInfo.cs
- HttpHandlersSection.cs
- PublisherMembershipCondition.cs
- StructureChangedEventArgs.cs
- WMIInterop.cs
- ValidationResult.cs
- SocketStream.cs
- ImageDrawing.cs
- DataGridViewButtonColumn.cs
- OrderPreservingSpoolingTask.cs
- Operators.cs
- LabelEditEvent.cs
- MessageSecurityProtocolFactory.cs
- WebControlsSection.cs
- MD5.cs
- XmlEncodedRawTextWriter.cs
- File.cs
- BoundsDrawingContextWalker.cs
- XmlCharType.cs
- LoginStatusDesigner.cs
- InstanceView.cs
- ChildDocumentBlock.cs
- XmlRootAttribute.cs
- ContextBase.cs
- _SSPIWrapper.cs
- CallbackValidator.cs
- ResourceDictionary.cs
- TileModeValidation.cs
- DataGridViewElement.cs
- XmlQueryCardinality.cs
- XomlCompiler.cs
- MessageBox.cs
- Comparer.cs
- UniqueID.cs
- PtsContext.cs
- FormatterServices.cs
- CodeDomComponentSerializationService.cs
- WebPartEditVerb.cs
- CookieProtection.cs
- XmlTextReaderImpl.cs
- DrawingBrush.cs
- rsa.cs