class Depix::Binary::Fields::ArrayField
Wrapper for an array structure
Attributes
members[RW]
Public Instance Methods
consume!(stack)
click to toggle source
# File lib/depix/binary/fields.rb, line 277 def consume!(stack) members.map{|m| m.consume!(stack)} end
explain()
click to toggle source
# File lib/depix/binary/fields.rb, line 285 def explain return 'Empty array' if (!members || members.empty?) tpl = "(Array of %d %s fields)" % [ members.length, members[0].rtype] r = (req? ? "- required" : nil) [tpl, desc, r].compact.join(' ') end
length()
click to toggle source
# File lib/depix/binary/fields.rb, line 269 def length members.inject(0){|_, s| _ + s.length } end
pack(values)
click to toggle source
# File lib/depix/binary/fields.rb, line 300 def pack(values) # For members that are present, get values. For members that are missing, fill with null bytes upto length. # For values that are nil, skip packing members.zip(values).map do |m, v| if !m.req? && v.nil? raise "#{m} needs to provide length" unless m.length "\377" * m.length else v.respond_to?(:pack) ? v.pack : m.pack(v) end end.join end
pattern()
click to toggle source
# File lib/depix/binary/fields.rb, line 273 def pattern members.inject(''){|_, s| _ + s.pattern } end
rtype()
click to toggle source
# File lib/depix/binary/fields.rb, line 281 def rtype Array end
validate!(array)
click to toggle source
# File lib/depix/binary/fields.rb, line 292 def validate!(array) raise "This value would overflow, #{array.length} elements passed but only #{members.length} fit" unless array.length <= members.length raise "This value is required, but the array is empty" if req? && array.empty? array.zip(members).map do | v, m | m.validate!(v) unless (v.nil? && !m.req?) end end