-// ?: always block until there is something to output from the source
-// or return anything that is available, even if it's less than desired?
+ // set the actual # of output items to the 'desired' amount then
+ // verify that data is available; if not enough data is available,
+ // either wait until it is (is "do_block" is true), return (0) is no
+ // data is available and "do_block" is false, or process the actual
+ // amount of available data.