module BinData::ByteAlignPlugin
Align fields to a multiple of :byte_align
Public Instance Methods
align_obj?(obj)
click to toggle source
# File lib/bindata/struct.rb, line 331 def align_obj?(obj) obj.has_parameter?(:byte_align) end
bytes_to_align(obj, rel_offset)
click to toggle source
# File lib/bindata/struct.rb, line 326 def bytes_to_align(obj, rel_offset) align = obj.eval_parameter(:byte_align) (align - (rel_offset % align)) % align end
do_read(io)
click to toggle source
# File lib/bindata/struct.rb, line 283 def do_read(io) initial_offset = io.offset instantiate_all_objs @field_objs.each do |f| if include_obj?(f) if align_obj?(f) io.seekbytes(bytes_to_align(f, io.offset - initial_offset)) end f.do_read(io) end end end
do_write(io)
click to toggle source
# File lib/bindata/struct.rb, line 296 def do_write(io) initial_offset = io.offset instantiate_all_objs @field_objs.each do |f| if include_obj?(f) if align_obj?(f) io.writebytes("\x00" * bytes_to_align(f, io.offset - initial_offset)) end f.do_write(io) end end end
sum_num_bytes_below_index(index)
click to toggle source
# File lib/bindata/struct.rb, line 309 def sum_num_bytes_below_index(index) sum = 0 (0...@field_objs.length).each do |i| obj = @field_objs[i] if include_obj?(obj) sum = sum.ceil + bytes_to_align(obj, sum.ceil) if align_obj?(obj) break if i >= index nbytes = obj.do_num_bytes sum = (nbytes.is_a?(Integer) ? sum.ceil : sum) + nbytes end end sum end