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
- NavigationPropertyAccessor.cs
- NamespaceCollection.cs
- Base64Decoder.cs
- URIFormatException.cs
- ReferenceService.cs
- Script.cs
- ComplexObject.cs
- Touch.cs
- GPPOINTF.cs
- KeyEventArgs.cs
- CardSpaceSelector.cs
- DeferredTextReference.cs
- PointHitTestParameters.cs
- _ConnectionGroup.cs
- PrintDialog.cs
- FormatterConverter.cs
- CodeEntryPointMethod.cs
- WebErrorHandler.cs
- BindingGroup.cs
- VisualTreeUtils.cs
- DataGrid.cs
- DefaultValueTypeConverter.cs
- XhtmlMobileTextWriter.cs
- ExtentKey.cs
- ClientConfigPaths.cs
- CookieHandler.cs
- RectIndependentAnimationStorage.cs
- ConnectionStringsExpressionBuilder.cs
- MethodImplAttribute.cs
- ResourceKey.cs
- SystemWebCachingSectionGroup.cs
- CqlWriter.cs
- RepeaterDataBoundAdapter.cs
- SharedStatics.cs
- ControlDesigner.cs
- SqlNotificationEventArgs.cs
- ContextProperty.cs
- TrailingSpaceComparer.cs
- AssemblyBuilder.cs
- QueryStringParameter.cs
- WebReferenceOptions.cs
- TextTreeInsertUndoUnit.cs
- SafeMarshalContext.cs
- Win32MouseDevice.cs
- DirectoryRootQuery.cs
- TypeValidationEventArgs.cs
- ChannelBinding.cs
- KeyEventArgs.cs
- PolyQuadraticBezierSegment.cs
- smtppermission.cs
- SqlCaseSimplifier.cs
- IndexedGlyphRun.cs
- CngKey.cs
- StaticFileHandler.cs
- TableStyle.cs
- ThaiBuddhistCalendar.cs
- ExtentJoinTreeNode.cs
- MemberCollection.cs
- _ConnectionGroup.cs
- CombinedHttpChannel.cs
- ImageAutomationPeer.cs
- EventPropertyMap.cs
- ContextDataSourceContextData.cs
- LinqDataSourceDisposeEventArgs.cs
- ClientBuildManager.cs
- SqlBulkCopyColumnMappingCollection.cs
- RTTypeWrapper.cs
- SettingsSavedEventArgs.cs
- WriteableBitmap.cs
- DescendantQuery.cs
- GroupStyle.cs
- XpsInterleavingPolicy.cs
- WpfXamlType.cs
- TextBoxAutomationPeer.cs
- AttributeSetAction.cs
- CollectionViewSource.cs
- TextureBrush.cs
- ApplicationId.cs
- WindowsGrip.cs
- FontStretchConverter.cs
- ConnectionManager.cs
- WebPartDescriptionCollection.cs
- WebSysDisplayNameAttribute.cs
- DefinitionUpdate.cs
- CryptoApi.cs
- InternalConfigHost.cs
- ListBoxItemWrapperAutomationPeer.cs
- SqlServices.cs
- UnsafeNativeMethods.cs
- RadioButtonRenderer.cs
- MappingModelBuildProvider.cs
- Process.cs
- FillRuleValidation.cs
- ConfigurationValidatorAttribute.cs
- LineGeometry.cs
- SQLBinaryStorage.cs
- SingleAnimation.cs
- CollectionViewGroupInternal.cs
- HttpRequest.cs
- TakeQueryOptionExpression.cs