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
- LoginAutoFormat.cs
- Roles.cs
- SqlConnectionPoolProviderInfo.cs
- StringResourceManager.cs
- EventSinkHelperWriter.cs
- RegionData.cs
- StringFunctions.cs
- HttpCacheVaryByContentEncodings.cs
- DataObject.cs
- SrgsRule.cs
- HandlerBase.cs
- NativeMethods.cs
- Missing.cs
- MessageSecurityOverHttpElement.cs
- CorePropertiesFilter.cs
- GetLedgerRequest.cs
- KeyEventArgs.cs
- DataTablePropertyDescriptor.cs
- HorizontalAlignConverter.cs
- PageParserFilter.cs
- BuiltInExpr.cs
- Panel.cs
- ProxyWebPartConnectionCollection.cs
- DbgUtil.cs
- ConfigXmlSignificantWhitespace.cs
- VirtualDirectoryMapping.cs
- ContentFileHelper.cs
- KeyTime.cs
- TrackingProfileDeserializationException.cs
- InfiniteIntConverter.cs
- FacetChecker.cs
- EarlyBoundInfo.cs
- ServiceHostingEnvironment.cs
- DesignerContextDescriptor.cs
- DataGridViewTextBoxColumn.cs
- TranslateTransform.cs
- ValueOfAction.cs
- Cursor.cs
- MetaDataInfo.cs
- ContextQuery.cs
- ClientTargetSection.cs
- XmlMemberMapping.cs
- MatrixIndependentAnimationStorage.cs
- HtmlFormWrapper.cs
- AdPostCacheSubstitution.cs
- XPathCompileException.cs
- TimeZone.cs
- SharedPerformanceCounter.cs
- GridItemPatternIdentifiers.cs
- RegistryKey.cs
- ImmComposition.cs
- mediaeventargs.cs
- GridViewDesigner.cs
- DataGridState.cs
- CacheMemory.cs
- BorderGapMaskConverter.cs
- PageHandlerFactory.cs
- _ConnectOverlappedAsyncResult.cs
- LinearQuaternionKeyFrame.cs
- SortedSet.cs
- InputLangChangeEvent.cs
- EventEntry.cs
- VoiceChangeEventArgs.cs
- TextBoxLine.cs
- XmlSerializerOperationFormatter.cs
- _ConnectOverlappedAsyncResult.cs
- DataGridClipboardCellContent.cs
- ExpressionBindings.cs
- OciHandle.cs
- TraceShell.cs
- FileCodeGroup.cs
- SortableBindingList.cs
- SchemaTableOptionalColumn.cs
- RestHandler.cs
- DynamicMethod.cs
- EditorBrowsableAttribute.cs
- BufferedGraphicsManager.cs
- Size3DConverter.cs
- ConfigurationLocation.cs
- RectValueSerializer.cs
- HttpClientCertificate.cs
- InboundActivityHelper.cs
- RealProxy.cs
- Model3D.cs
- ParallelTimeline.cs
- IndentTextWriter.cs
- StylusPointPropertyInfo.cs
- PrintPreviewDialog.cs
- PackageDigitalSignature.cs
- SatelliteContractVersionAttribute.cs
- DateRangeEvent.cs
- LineMetrics.cs
- SubMenuStyleCollection.cs
- MethodBody.cs
- NodeInfo.cs
- RotateTransform.cs
- EmptyEnumerator.cs
- XmlSchemaException.cs
- XAMLParseException.cs
- SamlAuthenticationStatement.cs