Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / Runtime / StringConcat.cs / 1305376 / 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
- CallInfo.cs
- MatrixAnimationBase.cs
- RepeaterItemEventArgs.cs
- XmlNavigatorStack.cs
- PeerApplication.cs
- XsdBuildProvider.cs
- RelatedEnd.cs
- VerificationAttribute.cs
- ColumnProvider.cs
- XPathConvert.cs
- ProviderCommandInfoUtils.cs
- OptimizerPatterns.cs
- ZipIOBlockManager.cs
- ErrorHandlingReceiver.cs
- WebPartEditorOkVerb.cs
- CompilerCollection.cs
- QueryPageSettingsEventArgs.cs
- CookieParameter.cs
- ServiceHttpModule.cs
- CommonRemoteMemoryBlock.cs
- IconBitmapDecoder.cs
- AQNBuilder.cs
- MimeWriter.cs
- PrimitiveXmlSerializers.cs
- HttpCapabilitiesEvaluator.cs
- EmissiveMaterial.cs
- PeerCollaborationPermission.cs
- GenericIdentity.cs
- TdsRecordBufferSetter.cs
- BaseCollection.cs
- NGCSerializationManagerAsync.cs
- DataBoundControl.cs
- HiddenFieldPageStatePersister.cs
- PriorityBinding.cs
- Int32.cs
- DataStreams.cs
- NumberFunctions.cs
- CellParaClient.cs
- SerializerWriterEventHandlers.cs
- TableLayoutStyleCollection.cs
- RangeContentEnumerator.cs
- StandardTransformFactory.cs
- PaperSize.cs
- EdmValidator.cs
- SelectionChangedEventArgs.cs
- _IPv6Address.cs
- Helper.cs
- ToolboxItem.cs
- Pen.cs
- UTF32Encoding.cs
- BufferAllocator.cs
- WpfXamlLoader.cs
- PrimitiveRenderer.cs
- RtType.cs
- WindowsToolbarAsMenu.cs
- ASCIIEncoding.cs
- Soap.cs
- DataGridCellInfo.cs
- COM2PropertyBuilderUITypeEditor.cs
- OdbcConnectionHandle.cs
- ReturnEventArgs.cs
- HtmlInputReset.cs
- BrowserDefinitionCollection.cs
- DispatcherHookEventArgs.cs
- EntityDataSourceMemberPath.cs
- DesignerActionUIService.cs
- CodeTryCatchFinallyStatement.cs
- ISAPIApplicationHost.cs
- InheritanceContextChangedEventManager.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- TdsParserSessionPool.cs
- OdbcConnection.cs
- DoubleConverter.cs
- SimpleLine.cs
- parserscommon.cs
- ConstraintConverter.cs
- HtmlInputControl.cs
- XmlChildNodes.cs
- QueryConverter.cs
- XPathMultyIterator.cs
- XNodeValidator.cs
- BigInt.cs
- SqlExpander.cs
- SecureEnvironment.cs
- Point3DAnimationUsingKeyFrames.cs
- SerialStream.cs
- tooltip.cs
- ApplicationTrust.cs
- Vector3D.cs
- PageStatePersister.cs
- ContextMenuStrip.cs
- LineProperties.cs
- RNGCryptoServiceProvider.cs
- ControlLocalizer.cs
- EventManager.cs
- DeviceContext2.cs
- GeometryModel3D.cs
- ConnectionManagementSection.cs
- DetailsViewModeEventArgs.cs
- EntityObject.cs