public void TestTreeToString() { KevinBst <string> testTree = BuildTestTree(); IVisitor <string> visitor = new StringBuilderVisitor(); testTree.TraverseInOrder(visitor); Console.WriteLine(visitor.ToString()); }
public void RemoveRightChildLeafNode() { KevinBst <string> testTree = BuildTestTree(); testTree.Remove(key: 15); IVisitor <string> visitor = new StringBuilderVisitor(); testTree.TraverseInOrder(visitor); Console.WriteLine(visitor.ToString()); }
public void RemoveLeftChildOnlyHasLeftChild() { KevinBst <string> testTree = BuildTestTree(); testTree.Remove(key: 15); // now 10 only has left child 5 testTree.Remove(key: 10); IVisitor <string> visitor = new StringBuilderVisitor(); testTree.TraverseInOrder(visitor); Console.WriteLine(visitor.ToString()); }
public void RemoveRightChildOnlyHasRightChild() { KevinBst <string> testTree = BuildTestTree(); testTree.Remove(key: 25); // now 30 only has right child 35 testTree.Remove(key: 30); IVisitor <string> visitor = new StringBuilderVisitor(); testTree.TraverseInOrder(visitor); Console.WriteLine(visitor.ToString()); }
public static SearchResult <T> FilterUsingAntlr <T>( this IQueryable <T> query, string queryString, params Expression <Func <T, string> >[] properties) { if (query == null) { throw new ArgumentNullException("query"); } if (properties == null) { throw new ArgumentNullException("properties"); } if (properties.Length == 0) { throw new ArgumentException("At least one property is expected", "properties"); } if (string.IsNullOrWhiteSpace(queryString)) { return(new SearchResult <T>(query, Enumerable.Empty <string>())); } AntlrInputStream input = new AntlrInputStream(queryString); SearchGrammarLexer lexer = new SearchGrammarLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); SearchGrammarParser parser = new SearchGrammarParser(tokens); IParseTree parseTree = parser.prog(); var arg = Expression.Parameter(typeof(T), "p"); MemberExpression[] memberExpressions = new MemberExpression[properties.Length]; for (int i = 0; i < properties.Length; i++) { var propertyMemberExpression = properties[i].Body as MemberExpression; if (propertyMemberExpression == null) { throw new ArgumentException( "The " + i + "th property is invalid. Please provide property member expression like 'o => o.Name'", "properties"); } string propertyString = propertyMemberExpression.ToString(); string name = propertyString.Substring(propertyString.IndexOf('.') + 1); memberExpressions[i] = Expression.Property(arg, name); } #if DEBUG string treeText = new StringBuilderVisitor().Visit(parseTree); System.Diagnostics.Trace.WriteLine(treeText); #endif GrammarResult searchResult = null; try { ExpressionBuilderVisitor visitor = new ExpressionBuilderVisitor(memberExpressions); searchResult = visitor.Visit(parseTree); } catch (InvalidSearchException) { string failedTreeText = new StringBuilderVisitor().Visit(parseTree); System.Diagnostics.Trace.WriteLine("Failed to parse search grammar '" + queryString + "': \r\n" + failedTreeText); throw; } var searchPredicate = Expression.Lambda <Func <T, bool> >(searchResult.Expression, arg); return(new SearchResult <T>(query.Where(searchPredicate), searchResult.Terms)); }
public ConsoleReporter() { builder = new StringBuilder(); visitor = new StringBuilderVisitor(builder); }