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
- RectangleGeometry.cs
- TransactionScope.cs
- SystemIPv6InterfaceProperties.cs
- CheckBox.cs
- DPTypeDescriptorContext.cs
- LineUtil.cs
- FilteredAttributeCollection.cs
- DictionaryItemsCollection.cs
- QilValidationVisitor.cs
- XmlCustomFormatter.cs
- EmbeddedMailObject.cs
- EFDataModelProvider.cs
- TemplateField.cs
- RefreshEventArgs.cs
- DesignerInterfaces.cs
- FileDialog_Vista_Interop.cs
- VersionUtil.cs
- RtfToXamlLexer.cs
- WmpBitmapEncoder.cs
- AuthenticationModuleElementCollection.cs
- ScriptBehaviorDescriptor.cs
- JavaScriptSerializer.cs
- Bold.cs
- CalendarDataBindingHandler.cs
- EntityType.cs
- FixedElement.cs
- DataSysAttribute.cs
- SByte.cs
- PhoneCall.cs
- StatusBarItem.cs
- BitmapEffectInputData.cs
- BigInt.cs
- ToolStripOverflowButton.cs
- EncoderReplacementFallback.cs
- ListViewItem.cs
- DataRowComparer.cs
- SSmlParser.cs
- XmlNamespaceMappingCollection.cs
- LocatorPartList.cs
- AlignmentYValidation.cs
- PrintingPermissionAttribute.cs
- WindowsListBox.cs
- ClientConfigurationSystem.cs
- KnownTypeAttribute.cs
- PassportPrincipal.cs
- AttachedPropertyDescriptor.cs
- DrawingVisual.cs
- SessionStateModule.cs
- NativeMethods.cs
- UrlUtility.cs
- Point3DCollection.cs
- RawStylusActions.cs
- TimerExtension.cs
- TabletDeviceInfo.cs
- IteratorDescriptor.cs
- DBSqlParserTableCollection.cs
- DetailsViewDeleteEventArgs.cs
- XmlSchemaRedefine.cs
- SQLChars.cs
- OpenFileDialog.cs
- Error.cs
- FrameworkContextData.cs
- TypeContext.cs
- SafeNativeMethods.cs
- Switch.cs
- QilBinary.cs
- CompilationUnit.cs
- SafePointer.cs
- HasCopySemanticsAttribute.cs
- XmlLoader.cs
- FilteredXmlReader.cs
- Cursor.cs
- CodeDomConfigurationHandler.cs
- ContractAdapter.cs
- BuildResult.cs
- bidPrivateBase.cs
- BinaryFormatter.cs
- WebBrowserEvent.cs
- HMACSHA512.cs
- TextEndOfLine.cs
- DeviceContexts.cs
- TypeExtensions.cs
- WebServiceTypeData.cs
- CodeCommentStatement.cs
- CssTextWriter.cs
- ToolStripItemCollection.cs
- RelationshipManager.cs
- ConnectionInterfaceCollection.cs
- MsmqActivation.cs
- RegexTree.cs
- Pair.cs
- Quad.cs
- EntityDataSourceSelectingEventArgs.cs
- BindingBase.cs
- ValidatedMobileControlConverter.cs
- TemplateControlBuildProvider.cs
- AQNBuilder.cs
- BoolExpressionVisitors.cs
- MdImport.cs
- BinHexEncoder.cs