I removed the underscores to comply with the tests already there! On Wed, Feb 25, 2009 at 04:37, webpaul <goo...@webpaul.net> wrote:
> > Excellent, this sounds like what I was after. > > /// <summary> > /// There are several places where we need to iterate over an > enumerable > /// several times, but we cannot assume that it is safe to do so. > /// This class will allow to safely use an enumerable multiple > times, by caching > /// the results after the first iteration. > /// </summary> > > I can only assume ayende will flog you repeatedly for taking the > underscores out of the test names. > > On Feb 24, 7:27 pm, Simone Busoli <simone.bus...@gmail.com> wrote: > > Fixed. > > > > > > > > On Sat, Feb 21, 2009 at 16:48, webpaul <goo...@webpaul.net> wrote: > > > > > Yes, that sounds much better than getting no rows on subsequent > > > iterations > > > > > On Feb 21, 9:25 am, Simone Busoli <simone.bus...@gmail.com> wrote: > > > > Then, I guess that if you want to be able to get the results multiple > > > times > > > > without actually enumerating the original enumerable you need to > cache > > > the > > > > enumerations, so that once it's enumerated for the first time, > subsequent > > > > enumerations go to the cache. Would this make sense? We already have > a > > > > cached enumerator, this would simply mean to swap the > OneTimeEnumerable > > > with > > > > the CachedEnumerator. > > > > > > On Sat, Feb 21, 2009 at 16:19, pb648174 <goo...@webpaul.net> wrote: > > > > > > > I just looked at the change below: > > > > > > > if (alreadyEnumerated) > > > > > return Enumerable.Empty<T>().GetEnumerator(); > > > > > > > Which I think will also lead to unexpected results. For example, if > 3 > > > > > rows, rows.Count() will return 3 the first time and 0 the second > time. > > > > > I would expect to be able to iterate the rows each time and get the > > > > > data but to not suddenly multiple rows in other operations based on > > > > > how many times the rows were iterated. I think if you want to go > this > > > > > route it should either a) throw an exception that the results are > > > > > being enumerated multiple times so these kinds of problems are > found > > > > > faster during development or b) just allow it to be enumerated > > > > > multiple times without duplicating rows in other operations. I'm > not > > > > > sure if b) is possible without losing the benefit of yield return > > > > > flowing through all the operations, that's why I was curious to see > > > > > how you solved it. > > > > > > > On Feb 21, 8:40 am, Simone Busoli <simone.bus...@gmail.com> wrote: > > > > > > Sure, any feedback is welcome, I'm not sure that what I choose to > do > > > is > > > > > the > > > > > > best solution. I simply decorated the enumerable so that it > cannot be > > > > > > iterated more than once. But if you try to do so, it simply > doesn't > > > > > return > > > > > > anything. > > > > > > > > On Sat, Feb 21, 2009 at 15:21, pb648174 <goo...@webpaul.net> > wrote: > > > > > > > > > Ok, that is interesting then, I'll take a look at the changeset > and > > > > > > > see how you did that. > > > > > > > > > On Feb 20, 12:41 pm, Simone Busoli <simone.bus...@gmail.com> > > > wrote: > > > > > > > > No, the fix didn't change this behavior. The > > > > > > > SingleThreadedPipelineExecuter > > > > > > > > is still pulling, while the multi threaded is pushing. > > > > > > > > > > On Fri, Feb 20, 2009 at 2:15 PM, pb648174 < > goo...@webpaul.net> > > > > > wrote: > > > > > > > > > > > The other strange bit of IEnumerable behavior is that if > you > > > don't > > > > > > > > > iterate the rows passed in the Execute method to an > operation, > > > the > > > > > > > > > previous operations won't execute. This makes sense once > you > > > think > > > > > > > > > about how IEnumerable works, but from the context of making > an > > > > > > > > > operation that does something not involving rows (as > perhaps > > > the > > > > > last > > > > > > > > > operation to send an email or something) you can get some > > > > > unexpected > > > > > > > > > results. I made a ProcessAndIgnoreAllInput(rows) { > foreach(var > > > row > > > > > in > > > > > > > > > rows); } to get around this but maybe now I can get rid of > it. > > > > > > > > > > > If you solved this problem by iterating the list no matter > what > > > and > > > > > > > > > making a copy I think you will have also fixed the above > > > scenario, > > > > > > > > > just thought I would mention it. > > > > > > > > > > > On Feb 18, 7:30 pm, Simone Busoli <simone.bus...@gmail.com > > > > > wrote: > > > > > > > > > > Fixed in revision 2044. > > > > > > > > > > > > On Mon, Feb 9, 2009 at 9:27 AM, Ayende Rahien < > > > aye...@ayende.com > > > > > > > > > wrote: > > > > > > > > > > > +1 > > > > > > > > > > > > > On Mon, Feb 9, 2009 at 10:22 AM, Simone Busoli < > > > > > > > > > simone.bus...@gmail.com>wrote: > > > > > > > > > > > > >> If everyone's ok with it I can change the single > threaded > > > > > executer > > > > > > > to > > > > > > > > > > >> avoid iterating the rows twice. > > > > > > > > > > > > >> On Thu, Feb 5, 2009 at 9:19 AM, webpaul < > > > goo...@webpaul.net> > > > > > > > wrote: > > > > > > > > > > > > >>> No, I can't see why anyone would want that behavior, > it > > > can > > > > > lead > > > > > > > to > > > > > > > > > > >>> some unexpected results. If anything I would think > the > > > single > > > > > > > > > threaded > > > > > > > > > > >>> should be made to behave like the multi threaded one. > I > > > think > > > > > if > > > > > > > > > there > > > > > > > > > > >>> was some reason for that behavior then an option > > > defaulted to > > > > > off > > > > > > > > > > >>> would be best. > > > > > > > > > > > > >>> On Feb 4, 11:21 am, Simone Busoli < > > > simone.bus...@gmail.com> > > > > > > > wrote: > > > > > > > > > > >>> > Yes, that sounds reasonable. Do you think it would > be > > > > > useful to > > > > > > > > > enhance > > > > > > > > > > >>> the > > > > > > > > > > >>> > threaded pipeline executer to make it iterable > multiple > > > > > times? > > > > > > > > > > > > >>> > On Wed, Feb 4, 2009 at 3:39 PM, webpaul < > > > > > goo...@webpaul.net> > > > > > > > > > wrote: > > > > > > > > > > >>> > > When I need to do anything like that I just > > > > > > > > > > >>> > > first convert to a List<Row> rowList = new > > > > > List<Row>(rows); > > > > > > > which > > > > > > > > > > >>> > > safely interates it once and then I don't need to > > > worry > > > > > about > > > > > > > > > it.- > > > > > > > > > > >>> Hide quoted text - > > > > > > > > > > > > >>> > - Show quoted text -- Hide quoted text - > > > > > > > > > > > > - Show quoted text -- Hide quoted text - > > > > > > > > > > - Show quoted text -- Hide quoted text - > > > > > > > > - Show quoted text -- Hide quoted text - > > > > > > - Show quoted text -- Hide quoted text - > > > > - Show quoted text - > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Rhino Tools Dev" group. To post to this group, send email to rhino-tools-dev@googlegroups.com To unsubscribe from this group, send email to rhino-tools-dev+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/rhino-tools-dev?hl=en -~----------~----~----~----~------~----~------~--~---