class Musicality::CompoundSequence

Public Class Methods

new(combine_method, sequences) click to toggle source
# File lib/musicality/composition/util/compound_sequence.rb, line 4
def initialize combine_method, sequences
  @seqs = sequences
  @comb_meth = combine_method
end

Public Instance Methods

at(offset) { |combine(map {|e| next })| ... } click to toggle source
# File lib/musicality/composition/util/compound_sequence.rb, line 9
def at offset
  if offset.is_a? Enumerable
    return enum_for(:at,offset) unless block_given?
    enums = @seqs.map {|s| s.at(offset) }
    offset.size.times { yield combine(enums.map {|e| e.next }) }
  else
    vals = @seqs.map {|s| s.at(offset) }
    return combine(vals)
  end
end
over(range) { |combine(map {|e| next })| ... } click to toggle source
# File lib/musicality/composition/util/compound_sequence.rb, line 26
def over range
  return enum_for(:over,range) unless block_given?
  enums = @seqs.map {|s| s.over(range) }
  range.size.times { yield combine(enums.map {|e| e.next }) }
end
take(n) { |combine(map {|e| next })| ... } click to toggle source
# File lib/musicality/composition/util/compound_sequence.rb, line 20
def take n
  return enum_for(:take,n) unless block_given?
  enums = @seqs.map {|s| s.take(n) }
  n.times { yield combine(enums.map {|e| e.next }) }
end
take_back(n) { |combine(map {|e| next })| ... } click to toggle source
# File lib/musicality/composition/util/compound_sequence.rb, line 32
def take_back n
  return enum_for(:take_back,n) unless block_given?
  enums = @seqs.map {|s| s.take_back(n) }
  n.times { yield combine(enums.map {|e| e.next }) }
end

Private Instance Methods

combine(vals) click to toggle source
# File lib/musicality/composition/util/compound_sequence.rb, line 39
def combine vals
  vals[1..-1].inject(vals.first,@comb_meth)
end