public IWordState Reduce(IEnumerable <IWordState> set, int len) { if (len == 0) { return(new Chunk("")); } if (len == 1) { return(set.First()); } else { int pivot = len / 2; //var i1 = set.Take(pivot).ToList(); //var i2 = set.Skip(pivot).ToList(); //var t1 = new Task<IWordState>(() => Reduce(i1, pivot)); //var t2 = new Task<IWordState>(() => Reduce(i2, pivot + len % 2)); var firstHalf = Reduce(set.Take(pivot), pivot); var secondHalf = Reduce(set.Skip(pivot), pivot + len % 2); IWordState result = firstHalf.Combine(secondHalf); return(result); } }
public IWordState Combine(IWordState other) { if (other is Chunk) return new Chunk(this, other as Chunk); else { var seg = other as Segment; return new Segment(str + seg.Left, seg.Middle, seg.Right); } }
public IWordState Combine(IWordState other) { if (other is Chunk) { return(new Chunk(this, other as Chunk)); } else { var seg = other as Segment; return(new Segment(str + seg.Left, seg.Middle, seg.Right)); } }
public IWordState Combine(IWordState other) { if (other is Chunk) { return(new Segment(Left, Middle, Right + (other as Chunk).str)); } else { var seg = other as Segment; return(new Segment(Left, Middle.Union(MaybeWord(Right + seg.Left).Union(seg.Middle)), seg.Right)); } }
public void SetState(IWordState newState) { myState = newState; }
public IWordState Combine(IWordState other) { if (other is Chunk) return new Segment(Left, Middle, Right + (other as Chunk).str); else { var seg = other as Segment; return new Segment(Left, Middle.Union(MaybeWord(Right + seg.Left).Union(seg.Middle)), seg.Right); } }