Class: Ecu::SignalListComparison

Inherits:
Object
  • Object
show all
Defined in:
lib/ecu/signals/signal_list_comparison.rb

Instance Method Summary collapse

Constructor Details

#initialize(left, right) ⇒ SignalListComparison

Returns a new instance of SignalListComparison.



4
5
6
7
8
9
10
11
12
13
14
# File 'lib/ecu/signals/signal_list_comparison.rb', line 4

def initialize(left, right)
  unless left.is_a?(SignalList) && right.is_a?(SignalList)
    fail "Can only merge SignalLists (left: #{left.class}, right: #{right.class})!"
  end

  @left               = left.map(&:name)
  @right              = right.map(&:name)
  @unified_headers    = left.headers + right.headers
  @unified_subheaders = left.subheaders + right.subheaders
  @names              = Hash.new
end

Instance Method Details

#left_exclusiveObject



28
29
30
# File 'lib/ecu/signals/signal_list_comparison.rb', line 28

def left_exclusive
  names(:left_exclusive).map { |name| left.fetch(name) }
end

#merge(priority: :right) ⇒ Object



36
37
38
39
40
41
42
43
44
45
# File 'lib/ecu/signals/signal_list_comparison.rb', line 36

def merge(priority: :right)
  SignalList.new \
    (
     names(:left_exclusive).map  { |n| left.fetch(n) } +
     names(:right_exclusive).map { |n| right.fetch(n) } +
     names(:common).map { |n| left.fetch(n) }
    ),
    @unified_headers,
    @unified_subheaders
end

#names(criterion) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/ecu/signals/signal_list_comparison.rb', line 16

def names(criterion)
  @names[criterion] ||= \
    case criterion
    when :left_exclusive  then left - right
    when :right_exclusive then right - left
    when :common          then left & right
    when :equal           then left & right
    when :nonequal        then []
    else fail "Unknown criterion #{criterion}"
    end
end

#right_exclusiveObject



32
33
34
# File 'lib/ecu/signals/signal_list_comparison.rb', line 32

def right_exclusive
  names(:right_exclusive).map { |name| right.fetch(name) }
end