Module: Kernel
- Defined in:
- lib/lab42/stream/empty.rb,
lib/lab42/stream/kernel.rb,
lib/lab42/stream/auto_import.rb,
lib/lab42/stream/kernel/extensions.rb
Overview
class Empty
Instance Method Summary collapse
- #binop_streams(op, stream1, stream2) ⇒ Object
- #combine_streams(stream, *streams_and_ops, &operation) ⇒ Object
- #cons_stream(head, &tail) ⇒ Object
- #cons_stream_n(first_head, *more_heads, &tail) ⇒ Object
- #const_stream(const) ⇒ Object
- #cyclic_stream(*args) ⇒ Object
- #empty_stream ⇒ Object
- #false ⇒ Object
- #finite_stream(enum) ⇒ Object
- #flatmap(stream, *args, &blk) ⇒ Object
- #iterate(*args, &blk) ⇒ Object (also: #stream_by)
- #iterate_without_block(args) ⇒ Object
- #merge_streams(*streams) ⇒ Object
- #merge_streams_by(*streams_and_beh, &blk) ⇒ Object
- #nil ⇒ Object
- #self ⇒ Object
- #true ⇒ Object
Instance Method Details
#binop_streams(op, stream1, stream2) ⇒ Object
5 6 7 8 9 |
# File 'lib/lab42/stream/kernel.rb', line 5 def binop_streams op, stream1, stream2 combine_streams stream1, stream2 do |e1, e2| e1.send op, e2 end end |
#combine_streams(stream, *streams_and_ops, &operation) ⇒ Object
11 12 13 |
# File 'lib/lab42/stream/kernel.rb', line 11 def combine_streams stream, *streams_and_ops, &operation stream.combine( *streams_and_ops, &operation ) end |
#cons_stream(head, &tail) ⇒ Object
15 16 17 |
# File 'lib/lab42/stream/kernel.rb', line 15 def cons_stream head, &tail Lab42::Stream.new head, tail end |
#cons_stream_n(first_head, *more_heads, &tail) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/lab42/stream/kernel.rb', line 19 def cons_stream_n first_head, *more_heads, &tail return cons_stream( first_head, &tail ) if more_heads.empty? return cons_stream( first_head ){ cons_stream_n( *more_heads, &tail ) } end |
#const_stream(const) ⇒ Object
26 27 28 |
# File 'lib/lab42/stream/kernel.rb', line 26 def const_stream const c = cons_stream( const ){ c } end |
#cyclic_stream(*args) ⇒ Object
30 31 32 33 34 35 |
# File 'lib/lab42/stream/kernel.rb', line 30 def cyclic_stream *args args = args.first if args.size == 1 && Enumerable === args.first finite_stream( args ).make_cyclic end |
#empty_stream ⇒ Object
54 |
# File 'lib/lab42/stream/empty.rb', line 54 def empty_stream; Empty.new end |
#false ⇒ Object
4 |
# File 'lib/lab42/stream/kernel/extensions.rb', line 4 def false; false end |
#finite_stream(enum) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/lab42/stream/kernel.rb', line 37 def finite_stream enum case enum when Range _finite_stream_from_range enum when Array _finite_stream_from_ary enum when Hash _finite_stream_from_hash enum when Enumerator _finite_stream_from_enumerator! enum.to_enum else raise TypeError, "cannot create a finite stream from type #{enum.class.inspect}" end end |
#flatmap(stream, *args, &blk) ⇒ Object
52 53 54 |
# File 'lib/lab42/stream/kernel.rb', line 52 def flatmap stream, *args, &blk stream.flatmap( *args, &blk ) end |
#iterate(*args, &blk) ⇒ Object Also known as: stream_by
69 70 71 72 73 74 75 |
# File 'lib/lab42/stream/kernel.rb', line 69 def iterate *args, &blk if blk cons_stream(*args){ iterate( blk.(*args), &blk ) } else iterate_without_block args end end |
#iterate_without_block(args) ⇒ Object
78 79 80 81 82 83 84 85 |
# File 'lib/lab42/stream/kernel.rb', line 78 def iterate_without_block args rest = args.drop 1 if rest.first && rest.first.respond_to?( :call ) cons_stream( args.first ){ iterate( rest.first.(*([args.first] + rest.drop(1))), *rest ) } else cons_stream( args.first ){ iterate( args.first.send(*rest), *rest ) } end end |
#merge_streams(*streams) ⇒ Object
56 57 58 59 60 61 62 |
# File 'lib/lab42/stream/kernel.rb', line 56 def merge_streams *streams s = streams.reject( &:empty? ) return empty_stream if s.empty? cons_stream s.first.head do merge_streams(*(s.drop(1) + [s.first.tail])) end end |
#merge_streams_by(*streams_and_beh, &blk) ⇒ Object
64 65 66 67 |
# File 'lib/lab42/stream/kernel.rb', line 64 def merge_streams_by *streams_and_beh, &blk beh = Lab42::Stream::Behavior.make1( blk || streams_and_beh.pop, &blk ) __merge_streams_by__ beh, streams_and_beh end |
#nil ⇒ Object
5 |
# File 'lib/lab42/stream/kernel/extensions.rb', line 5 def nil; nil end |
#self ⇒ Object
6 |
# File 'lib/lab42/stream/kernel/extensions.rb', line 6 def self; self end |
#true ⇒ Object
3 |
# File 'lib/lab42/stream/kernel/extensions.rb', line 3 def true; true end |