In general, who should do more work: popFront or front?

surlymoor surlymoor at cock.li
Tue Jun 15 04:24:09 UTC 2021


All my custom range types perform all their meaningful work in 
their respective popFront methods, in addition to its expected 
source data iteration duties. The reason I do this is because I 
swear I read in a github discussion that front is expected to be 
O(1), and the only way I can think to achieve this is to stash 
the front element of a range in a private field; popFront would 
thus also set this field to a new value upon every call, and 
front would forward to it. (Or front would be the cache itself.)
At the moment, I feel that as long as the stashed front element 
isn't too "big" (For some definition of big, I guess.), that 
built-in caching should be fine. But is this acceptable? What's 
the best practice for determining which range member should 
perform what work? (Other than iterating, of course.)


More information about the Digitalmars-d-learn mailing list