Esempio n. 1
0
 private TResult DoVisit<TResult, TContext>(TContext context, Delegate visitor)
     where TResult : Value, new()
 {
     ValueVisitorDelegate<TResult> contextFreeVisit = (visitor as ValueVisitorDelegate<TResult>);
     ValueVisitorDelegate<TResult, TContext> contextBoundVisit = (visitor as ValueVisitorDelegate<TResult, TContext>);
     IList<Value> newContent = new List<Value>();
     if (visitor != null)
     {
         TResult changed = ((contextBoundVisit != null) ? contextBoundVisit(context, this, contextBoundVisit) : contextFreeVisit(this, contextFreeVisit));
         if (changed != this)
             return changed;
         foreach (Value value in Content)
         {
             TResult replaced = ((contextBoundVisit != null) ? value.Visit<TResult, TContext>(context, contextBoundVisit) : value.Visit<TResult>(contextFreeVisit));
             if (replaced != null)
                 newContent.Add(replaced);
         }
     }
     if (newContent.Count > 0)
         content = newContent.ToArray();
     return (this as TResult);
 }
Esempio n. 2
0
 public TResult Visit<TResult, TContext>(TContext context, ValueVisitorDelegate<TResult, TContext> visitor)
     where TResult : Value, new()
 {
     return ContextBoundVisit<TResult, TContext>(context, visitor);
 }
Esempio n. 3
0
 public TResult Visit<TResult>(ValueVisitorDelegate<TResult> visitor)
     where TResult : Value, new()
 {
     return ContextFreeVisit<TResult>(visitor);
 }
Esempio n. 4
0
 public Value Visit<TContext>(TContext context, ValueVisitorDelegate<Value, TContext> visitor)
 {
     return Visit<Value, TContext>(context, visitor);
 }
Esempio n. 5
0
 public Value Visit(object context, ValueVisitorDelegate<Value, object> visitor)
 {
     return Visit<object>(context, visitor);
 }
Esempio n. 6
0
 public Value Visit(ValueVisitorDelegate<Value> visitor)
 {
     return Visit<Value>(visitor);
 }
Esempio n. 7
0
 private TResult ContextFreeVisit<TResult>(ValueVisitorDelegate<TResult> visitor)
     where TResult : Value, new()
 {
     return DoVisit<TResult, object>(null, visitor);
 }