Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / XmlUtils / System / Xml / Xsl / Xslt / QilStrConcatenator.cs / 1 / QilStrConcatenator.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System.Diagnostics; using System.Xml; using System.Xml.Schema; using System.Xml.Xsl.XPath; using System.Xml.Xsl.Qil; namespace System.Xml.Xsl.Xslt { internal class QilStrConcatenator { private XPathQilFactory f; private BufferBuilder builder; private QilList concat; private bool inUse = false; public QilStrConcatenator(XPathQilFactory f) { this.f = f; builder = new BufferBuilder(); } public void Reset() { Debug.Assert(! inUse); inUse = true; builder.Clear(); concat = null; } private void FlushBuilder() { if (concat == null) { concat = f.BaseFactory.Sequence(); } if (builder.Length != 0) { concat.Add(f.String(builder.ToString())); builder.Length = 0; } } public void Append(string value) { Debug.Assert(inUse, "Reset() wasn't called"); builder.Append(value); } public void Append(char value) { Debug.Assert(inUse, "Reset() wasn't called"); builder.Append(value); } public void Append(QilNode value) { Debug.Assert(inUse, "Reset() wasn't called"); if (value != null) { Debug.Assert(value.XmlType.TypeCode == XmlTypeCode.String); if (value.NodeType == QilNodeType.LiteralString) { builder.Append((string)(QilLiteral)value); } else { FlushBuilder(); concat.Add(value); } } } public QilNode ToQil() { Debug.Assert(inUse); // If we want allow multiple calls to ToQil() this logic should be changed inUse = false; if (concat == null) { return f.String(builder.ToString()); } else { FlushBuilder(); return f.StrConcat(concat); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System.Diagnostics; using System.Xml; using System.Xml.Schema; using System.Xml.Xsl.XPath; using System.Xml.Xsl.Qil; namespace System.Xml.Xsl.Xslt { internal class QilStrConcatenator { private XPathQilFactory f; private BufferBuilder builder; private QilList concat; private bool inUse = false; public QilStrConcatenator(XPathQilFactory f) { this.f = f; builder = new BufferBuilder(); } public void Reset() { Debug.Assert(! inUse); inUse = true; builder.Clear(); concat = null; } private void FlushBuilder() { if (concat == null) { concat = f.BaseFactory.Sequence(); } if (builder.Length != 0) { concat.Add(f.String(builder.ToString())); builder.Length = 0; } } public void Append(string value) { Debug.Assert(inUse, "Reset() wasn't called"); builder.Append(value); } public void Append(char value) { Debug.Assert(inUse, "Reset() wasn't called"); builder.Append(value); } public void Append(QilNode value) { Debug.Assert(inUse, "Reset() wasn't called"); if (value != null) { Debug.Assert(value.XmlType.TypeCode == XmlTypeCode.String); if (value.NodeType == QilNodeType.LiteralString) { builder.Append((string)(QilLiteral)value); } else { FlushBuilder(); concat.Add(value); } } } public QilNode ToQil() { Debug.Assert(inUse); // If we want allow multiple calls to ToQil() this logic should be changed inUse = false; if (concat == null) { return f.String(builder.ToString()); } else { FlushBuilder(); return f.StrConcat(concat); } } } } // 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
- XmlDictionary.cs
- ExpandSegment.cs
- GlyphsSerializer.cs
- DbDeleteCommandTree.cs
- ColumnWidthChangingEvent.cs
- JsonSerializer.cs
- ImageConverter.cs
- Flowchart.cs
- WebServiceData.cs
- SqlTopReducer.cs
- TabletDevice.cs
- QueryStatement.cs
- CodePropertyReferenceExpression.cs
- FilterFactory.cs
- FileDetails.cs
- ConvertBinder.cs
- AuthenticationServiceManager.cs
- CardSpaceSelector.cs
- SendAgentStatusRequest.cs
- HttpEncoder.cs
- CompositeActivityMarkupSerializer.cs
- StringCollectionEditor.cs
- TextInfo.cs
- PageCache.cs
- XmlSchemaComplexContentExtension.cs
- SQLBinaryStorage.cs
- KnowledgeBase.cs
- File.cs
- HierarchicalDataSourceControl.cs
- DBAsyncResult.cs
- SecurityPermission.cs
- StylusPlugInCollection.cs
- ColumnProvider.cs
- BasicExpressionVisitor.cs
- PolicyManager.cs
- FixedTextPointer.cs
- Merger.cs
- CheckBoxPopupAdapter.cs
- HtmlEncodedRawTextWriter.cs
- AdapterUtil.cs
- filewebresponse.cs
- WebHttpSecurityModeHelper.cs
- DockPattern.cs
- ConfigXmlText.cs
- ColumnReorderedEventArgs.cs
- ColorConvertedBitmapExtension.cs
- InstanceDataCollectionCollection.cs
- MethodAccessException.cs
- SqlVersion.cs
- CryptoConfig.cs
- DataContext.cs
- EventlogProvider.cs
- Random.cs
- SupportsEventValidationAttribute.cs
- ConstantSlot.cs
- MailHeaderInfo.cs
- BooleanConverter.cs
- Token.cs
- peersecurityelement.cs
- ProjectionPruner.cs
- ConnectionPool.cs
- FactoryRecord.cs
- NullReferenceException.cs
- MultipartContentParser.cs
- FileEnumerator.cs
- JsonFormatReaderGenerator.cs
- NestedContainer.cs
- Queue.cs
- HttpCapabilitiesSectionHandler.cs
- CodeComment.cs
- BamlResourceSerializer.cs
- RegexGroupCollection.cs
- SessionStateUtil.cs
- TextTreeFixupNode.cs
- BuildProvidersCompiler.cs
- ParameterInfo.cs
- IOThreadTimer.cs
- XmlEncoding.cs
- AuthorizationRuleCollection.cs
- ConditionCollection.cs
- SelectionEditor.cs
- ColumnMapCopier.cs
- JpegBitmapEncoder.cs
- PropertyCondition.cs
- _RequestCacheProtocol.cs
- FormsAuthenticationEventArgs.cs
- XmlDataSource.cs
- PartialTrustVisibleAssembly.cs
- WebPartDescription.cs
- WindowsRegion.cs
- PropagatorResult.cs
- ProcessRequestAsyncResult.cs
- BindingList.cs
- Crc32.cs
- CodePrimitiveExpression.cs
- DWriteFactory.cs
- GraphicsContainer.cs
- SqlEnums.cs
- DragEvent.cs
- RadioButtonPopupAdapter.cs