class Lab42::Curry::ArgCompiler::Positionals
Attributes
ct_pos[R]
rt_pos[R]
Public Class Methods
new()
click to toggle source
# File lib/lab42/curry/arg_compiler/positionals.rb, line 68 def initialize @args = {} @computations = {} @ct_pos = 0 @rt_pos = 0 @translations = {} end
Public Instance Methods
computations() { |idx, comp| ... }
click to toggle source
# File lib/lab42/curry/arg_compiler/positionals.rb, line 17 def computations @computations.each { |idx, comp| yield idx, comp } end
computed(idx)
click to toggle source
# File lib/lab42/curry/arg_compiler/positionals.rb, line 21 def computed idx @computations[idx] end
export_args()
click to toggle source
# File lib/lab42/curry/arg_compiler/positionals.rb, line 25 def export_args (0...(@args.keys.max&.succ||0)) .inject [] do |result, idx| if @args.has_key?(idx) result << @args[idx] else result << RuntimeArg end result end end
set_computation(comp_arg)
click to toggle source
# File lib/lab42/curry/arg_compiler/positionals.rb, line 37 def set_computation comp_arg @args[comp_arg.position || ct_pos] = comp_arg.class @computations[comp_arg.position || rt_pos] = comp_arg end
set_runtime_arg(rt_arg)
click to toggle source
An rt_arg placeholder
# File lib/lab42/curry/arg_compiler/positionals.rb, line 43 def set_runtime_arg rt_arg @args[ct_pos] = rt_arg.class @translations[rt_arg.position || rt_pos] = ct_pos _update_positions end
set_value!(value, ct_pos=nil)
click to toggle source
A curried value or computation, occurs from `ct_args` or literal values in which case `ct_pos` is `nil`
# File lib/lab42/curry/arg_compiler/positionals.rb, line 50 def set_value! value, ct_pos=nil ct_pos ||= @ct_pos raise Lab42::Curry::DuplicatePositionSpecification, "There is already a curried value #{@args[ct_pos].inspect} at index #{ct_pos}" if _occupied?(ct_pos) @args[ct_pos] = value (@ct_pos..ct_pos.pred).each(&method(:_occupy)) # TODO: Need to check if we have to fill the holes with RuntimeArg # and allow @ct_pos to point to present RuntimeArg values? _update_positions end
translation(idx)
click to toggle source
# File lib/lab42/curry/arg_compiler/positionals.rb, line 63 def translation idx @translations[idx] end
Private Instance Methods
_occupied?(key)
click to toggle source
# File lib/lab42/curry/arg_compiler/positionals.rb, line 76 def _occupied? key @args.has_key?(key) && @args[key] != RuntimeArg end
_occupy(idx)
click to toggle source
# File lib/lab42/curry/arg_compiler/positionals.rb, line 80 def _occupy idx @args[idx] = RuntimeArg unless @args.has_key?(idx) end
_update_positions()
click to toggle source
# File lib/lab42/curry/arg_compiler/positionals.rb, line 84 def _update_positions while @args.has_key?(@ct_pos) @ct_pos += 1 end while @translations.has_key?(@rt_pos) @rt_pos += 1 end end