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
- BorderGapMaskConverter.cs
- Label.cs
- SwitchElementsCollection.cs
- ClientSettingsProvider.cs
- ReplacementText.cs
- CellTreeSimplifier.cs
- IntranetCredentialPolicy.cs
- ResourcePermissionBaseEntry.cs
- ProcessHostConfigUtils.cs
- GrowingArray.cs
- DebuggerAttributes.cs
- HttpCachePolicyBase.cs
- XmlSerializerNamespaces.cs
- SimpleType.cs
- RadioButtonBaseAdapter.cs
- MasterPageParser.cs
- PageSetupDialog.cs
- ButtonFieldBase.cs
- FileSecurity.cs
- ScriptResourceInfo.cs
- ContextMenu.cs
- ExtentKey.cs
- BaseCodePageEncoding.cs
- BitmapPalettes.cs
- ErrorWrapper.cs
- WebPartMinimizeVerb.cs
- RichTextBox.cs
- HttpModuleActionCollection.cs
- XPathAxisIterator.cs
- EDesignUtil.cs
- FixedBufferAttribute.cs
- ScriptResourceAttribute.cs
- InputScope.cs
- Visual3DCollection.cs
- ProxyWebPartManager.cs
- WebConvert.cs
- PngBitmapDecoder.cs
- XmlCharCheckingReader.cs
- TreeNodeBindingCollection.cs
- DecimalMinMaxAggregationOperator.cs
- Timer.cs
- CompModSwitches.cs
- TargetPerspective.cs
- QueryResponse.cs
- WebServiceHandlerFactory.cs
- MeasureItemEvent.cs
- RTLAwareMessageBox.cs
- BitmapEffectGroup.cs
- SchemaComplexType.cs
- StreamAsIStream.cs
- ClonableStack.cs
- TableRowGroup.cs
- DashStyles.cs
- MsmqProcessProtocolHandler.cs
- InfocardInteractiveChannelInitializer.cs
- CqlQuery.cs
- UIElement3D.cs
- SQLInt32Storage.cs
- TemplateControl.cs
- TableRowGroup.cs
- GridViewAutomationPeer.cs
- _SafeNetHandles.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- ShaderRenderModeValidation.cs
- Pen.cs
- SelectionListComponentEditor.cs
- DoubleCollectionConverter.cs
- IpcChannel.cs
- XXXOnTypeBuilderInstantiation.cs
- CompilationSection.cs
- SmtpMail.cs
- ButtonPopupAdapter.cs
- precedingquery.cs
- XmlText.cs
- BufferCache.cs
- PrivilegeNotHeldException.cs
- TypeUnloadedException.cs
- RegexCode.cs
- ParameterToken.cs
- ProcessManager.cs
- UpdatableGenericsFeature.cs
- FixedFlowMap.cs
- ThemeableAttribute.cs
- PropertyInfoSet.cs
- LiteralControl.cs
- PrtCap_Builder.cs
- OutputCacheProfile.cs
- HybridDictionary.cs
- StringUtil.cs
- ImageCodecInfoPrivate.cs
- BinaryWriter.cs
- ComponentChangedEvent.cs
- SecureStringHasher.cs
- SafeRightsManagementSessionHandle.cs
- _Connection.cs
- HtmlSelect.cs
- UpdateExpressionVisitor.cs
- SmiEventSink_DeferedProcessing.cs
- OdbcConnectionOpen.cs
- SessionPageStateSection.cs