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
- ServiceInstanceProvider.cs
- XmlSchemaValidator.cs
- SerializationObjectManager.cs
- ClientData.cs
- PropertyDescriptor.cs
- TextTreePropertyUndoUnit.cs
- PnrpPermission.cs
- SourceSwitch.cs
- DispatcherOperation.cs
- SecureStringHasher.cs
- CryptoKeySecurity.cs
- TreeNodeBindingCollection.cs
- DataServices.cs
- ScriptHandlerFactory.cs
- SqlPersonalizationProvider.cs
- FileSecurity.cs
- DirectoryObjectSecurity.cs
- WindowsListViewGroupHelper.cs
- CachingHintValidation.cs
- BaseTreeIterator.cs
- FaultCallbackWrapper.cs
- Package.cs
- ProjectionAnalyzer.cs
- OdbcCommandBuilder.cs
- TraceListeners.cs
- BitmapImage.cs
- ResourceAttributes.cs
- Action.cs
- MetadataPropertyCollection.cs
- ListViewGroupItemCollection.cs
- recordstatefactory.cs
- Util.cs
- httpserverutility.cs
- MetaModel.cs
- Helper.cs
- webclient.cs
- SecurityTokenParameters.cs
- BindingManagerDataErrorEventArgs.cs
- SchemaNamespaceManager.cs
- CallSiteOps.cs
- NullableDoubleAverageAggregationOperator.cs
- PowerModeChangedEventArgs.cs
- RegexEditorDialog.cs
- LinkLabel.cs
- wgx_sdk_version.cs
- Mappings.cs
- ColumnResizeAdorner.cs
- PostBackOptions.cs
- TemplateXamlTreeBuilder.cs
- FunctionParameter.cs
- InteropAutomationProvider.cs
- EllipseGeometry.cs
- XmlDesigner.cs
- Int64Converter.cs
- MenuDesigner.cs
- MimeFormImporter.cs
- EncodingInfo.cs
- Span.cs
- ADConnectionHelper.cs
- SystemIcmpV6Statistics.cs
- ClientBuildManager.cs
- XmlQueryTypeFactory.cs
- ContainerUtilities.cs
- InstanceHandleConflictException.cs
- UniqueIdentifierService.cs
- FormatConvertedBitmap.cs
- FlowLayoutPanel.cs
- FormsAuthenticationConfiguration.cs
- Propagator.Evaluator.cs
- ComAdminWrapper.cs
- UnionExpr.cs
- PopupRoot.cs
- HttpHandlersSection.cs
- UIPermission.cs
- InstalledFontCollection.cs
- ForEachAction.cs
- ObjectListCommand.cs
- SafeHandles.cs
- ChangeProcessor.cs
- OdbcEnvironment.cs
- PageThemeCodeDomTreeGenerator.cs
- GridLengthConverter.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- JsonEnumDataContract.cs
- RootContext.cs
- MembershipValidatePasswordEventArgs.cs
- DataTemplateKey.cs
- ServerValidateEventArgs.cs
- DataGridViewSelectedRowCollection.cs
- WindowsStatic.cs
- EventRecord.cs
- BackEase.cs
- BrushConverter.cs
- PeerMaintainer.cs
- GeneratedView.cs
- ValueType.cs
- MediaContext.cs
- EmbeddedMailObjectsCollection.cs
- XmlBoundElement.cs
- WebPartCollection.cs