class GdbFlasher::IHex::Segment

Attributes

base[RW]
data[RW]

Public Class Methods

new() click to toggle source
# File lib/gdbflasher/ihex.rb, line 52
def initialize
  @base = 0
  @data = ""
end

Public Instance Methods

intersect(region_base, region_end) click to toggle source
# File lib/gdbflasher/ihex.rb, line 61
def intersect(region_base, region_end)
  if region_base == region_end
    raise ArgumentError, "Region is empty"
  end

  segment_range = @base...@base + size
  region_range  = region_base..region_end

  intersection_base = nil, intersection_end = nil

  if segment_range.cover? region_range.min
    intersection_base = region_range.min
  elsif region_range.cover? segment_range.min
    intersection_base = segment_range.min
  else
    return Segment.new
  end

  if segment_range.cover? region_range.max
    intersection_end = region_range.max
  elsif region_range.cover? segment_range.max
    intersection_end = segment_range.max
  else
    return Segment.new
  end

  segment = Segment.new
  segment.base = intersection_base
  segment.data = @data[intersection_base - @base..intersection_end - @base]

  segment
end
pad_segment!(psize, fill_byte = 0x00) click to toggle source
# File lib/gdbflasher/ihex.rb, line 94
def pad_segment!(psize, fill_byte = 0x00)
  if @base % size != 0
    padding = size - (@base % size)

    @base -= padding
    @data = ([ fill_byte ] * padding).pack("C*") + @data
  end

  if @data.size % size != 0
    padding = size - (@data.size % size)

    @data += ([ fill_byte ] * padding).pack "C*"
  end
end
size() click to toggle source
# File lib/gdbflasher/ihex.rb, line 57
def size
  @data.length
end