public static void Add(ref ParseTreeNodes nodes, ParseTreeNode node) { if (node == null) { throw new ArgumentNullException("node"); } var items = nodes.items; if (items != null) { items.Add(node); nodes = new ParseTreeNodes(items); return; } switch (nodes.Count) { case 0: nodes = new ParseTreeNodes(node, null, null); break; case 1: nodes = new ParseTreeNodes(nodes.item0, node, null); break; case 2: nodes = new ParseTreeNodes(nodes.item0, nodes.item1, node); break; case 3: nodes = new ParseTreeNodes(new List <ParseTreeNode> { nodes.item0, nodes.item1, nodes.item2, node }); break; default: throw new ArgumentOutOfRangeException("node", "Unable to add new node. Tree is full."); } }
internal ParseTreeNode(TokenType type, Token lexeme, string value) { this.Type = type; this.Lexeme = lexeme; this.Value = value ?? lexeme.Value; this.nodes = new ParseTreeNodes(); }
private ParseTreeNode(TokenType type, ParseTreeNode otherNode) { if (otherNode == null) { throw new ArgumentNullException("otherNode"); } this.Type = type; this.Lexeme = otherNode.Lexeme; this.Value = otherNode.Value; this.nodes = otherNode.nodes; }
internal ParseTreeNode(Token token, TokenType?type = null, string value = null, IEnumerable <ParseTreeNode> nodes = null) { this.Token = token; this.Type = type ?? token.Type; this.Value = value ?? token.Value; this.nodes = new ParseTreeNodes(); if (nodes != null) { foreach (var node in nodes) { this.Add(node); } } }
public static void RemoveAt(ref ParseTreeNodes nodes, int index) { var items = nodes.items; if (items != null) { items.RemoveAt(index); nodes = new ParseTreeNodes(items); return; } switch (index) { case 0: nodes = new ParseTreeNodes(nodes.item1, nodes.item2, null); break; case 1: nodes = new ParseTreeNodes(nodes.item0, nodes.item2, null); break; case 2: nodes = new ParseTreeNodes(nodes.item0, nodes.item1, null); break; default: throw new ArgumentOutOfRangeException("index"); } }
public static bool Remove(ref ParseTreeNodes nodes, ParseTreeNode node) { if (node == null) { throw new ArgumentNullException("node"); } var items = nodes.items; if (items != null) { if (items.Remove(node) == false) { return(false); } nodes = new ParseTreeNodes(items); return(true); } if (nodes.item2 == node) { nodes = new ParseTreeNodes(nodes.item0, nodes.item1, null); } else if (nodes.item1 == node) { nodes = new ParseTreeNodes(nodes.item0, nodes.item2, null); } else if (nodes.item0 == node) { nodes = new ParseTreeNodes(nodes.item1, nodes.item2, null); } else { return(false); } return(true); }
internal bool Remove(ParseTreeNode node) { return(ParseTreeNodes.Remove(ref this.nodes, node)); }
internal void RemoveAt(int index) { ParseTreeNodes.RemoveAt(ref this.nodes, index); }
internal void Insert(int index, ParseTreeNode node) { ParseTreeNodes.Insert(ref this.nodes, index, node); }
internal void Add(ParseTreeNode node) { ParseTreeNodes.Add(ref this.nodes, node); }
internal void Replace(int index, ParseTreeNode node) { ParseTreeNodes.RemoveAt(ref this.nodes, index); ParseTreeNodes.Insert(ref this.nodes, index, node); }