You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@@ -0,0 +1,202 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="QilNode.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
// <owner current="true" primary="true">[....]</owner>
|
||||
//------------------------------------------------------------------------------
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.Xml;
|
||||
using System.Xml.Schema;
|
||||
using System.Xml.Xsl;
|
||||
|
||||
namespace System.Xml.Xsl.Qil {
|
||||
|
||||
/// <summary>
|
||||
/// A node in the QIL tree.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Don't construct QIL nodes directly; instead, use the <see cref="QilFactory">QilFactory</see>.
|
||||
/// This base internal class is not abstract and may be instantiated in some cases (for example, true/false boolean literals).
|
||||
/// </remarks>
|
||||
internal class QilNode : IList<QilNode> {
|
||||
protected QilNodeType nodeType;
|
||||
protected XmlQueryType xmlType;
|
||||
protected ISourceLineInfo sourceLine;
|
||||
protected object annotation;
|
||||
|
||||
//-----------------------------------------------
|
||||
// Constructor
|
||||
//-----------------------------------------------
|
||||
|
||||
/// <summary>
|
||||
/// Construct a new node
|
||||
/// </summary>
|
||||
public QilNode(QilNodeType nodeType) {
|
||||
this.nodeType = nodeType;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Construct a new node
|
||||
/// </summary>
|
||||
public QilNode(QilNodeType nodeType, XmlQueryType xmlType) {
|
||||
this.nodeType = nodeType;
|
||||
this.xmlType = xmlType;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------
|
||||
// QilNode methods
|
||||
//-----------------------------------------------
|
||||
|
||||
/// <summary>
|
||||
/// Access the QIL node type.
|
||||
/// </summary>
|
||||
public QilNodeType NodeType {
|
||||
get { return this.nodeType; }
|
||||
set { this.nodeType = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Access the QIL type.
|
||||
/// </summary>
|
||||
public virtual XmlQueryType XmlType {
|
||||
get { return this.xmlType; }
|
||||
set { this.xmlType = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Line info information for tools support.
|
||||
/// </summary>
|
||||
public ISourceLineInfo SourceLine {
|
||||
get { return this.sourceLine; }
|
||||
set { this.sourceLine = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Access an annotation which may have been attached to this node.
|
||||
/// </summary>
|
||||
public object Annotation {
|
||||
get { return this.annotation; }
|
||||
set { this.annotation = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new deep copy of this node.
|
||||
/// </summary>
|
||||
public virtual QilNode DeepClone(QilFactory f) {
|
||||
return new QilCloneVisitor(f).Clone(this);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a shallow copy of this node, copying all the fields.
|
||||
/// </summary>
|
||||
public virtual QilNode ShallowClone(QilFactory f) {
|
||||
QilNode n = (QilNode) MemberwiseClone();
|
||||
f.TraceNode(n);
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------
|
||||
// IList<QilNode> methods -- override
|
||||
//-----------------------------------------------
|
||||
|
||||
public virtual int Count {
|
||||
get { return 0; }
|
||||
}
|
||||
|
||||
public virtual QilNode this[int index] {
|
||||
get { throw new IndexOutOfRangeException(); }
|
||||
set { throw new IndexOutOfRangeException(); }
|
||||
}
|
||||
|
||||
public virtual void Insert(int index, QilNode node) {
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
public virtual void RemoveAt(int index) {
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------
|
||||
// IList<QilNode> methods -- no need to override
|
||||
//-----------------------------------------------
|
||||
|
||||
public IEnumerator<QilNode> GetEnumerator() {
|
||||
return new IListEnumerator<QilNode>(this);
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator() {
|
||||
return new IListEnumerator<QilNode>(this);
|
||||
}
|
||||
|
||||
public virtual bool IsReadOnly {
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public virtual void Add(QilNode node) {
|
||||
Insert(Count, node);
|
||||
}
|
||||
|
||||
public virtual void Add(IList<QilNode> list) {
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
Insert(Count, list[i]);
|
||||
}
|
||||
|
||||
public virtual void Clear() {
|
||||
for (int index = Count - 1; index >= 0; index--)
|
||||
RemoveAt(index);
|
||||
}
|
||||
|
||||
public virtual bool Contains(QilNode node) {
|
||||
return IndexOf(node) != -1;
|
||||
}
|
||||
|
||||
public virtual void CopyTo(QilNode[] array, int index) {
|
||||
for (int i = 0; i < Count; i++)
|
||||
array[index + i] = this[i];
|
||||
}
|
||||
|
||||
public virtual bool Remove(QilNode node) {
|
||||
int index = IndexOf(node);
|
||||
if (index >= 0) {
|
||||
RemoveAt(index);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual int IndexOf(QilNode node) {
|
||||
for (int i = 0; i < Count; i++)
|
||||
if (node.Equals(this[i]))
|
||||
return i;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------
|
||||
// Debug
|
||||
//-----------------------------------------------
|
||||
|
||||
#if QIL_TRACE_NODE_CREATION
|
||||
private int nodeId;
|
||||
private string nodeLoc;
|
||||
|
||||
public int NodeId {
|
||||
get { return nodeId; }
|
||||
set { nodeId = value; }
|
||||
}
|
||||
|
||||
public string NodeLocation {
|
||||
get { return nodeLoc; }
|
||||
set { nodeLoc = value; }
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user