logicuit 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -2
  3. data/README.md +161 -14
  4. data/Rakefile +12 -1
  5. data/Steepfile +6 -0
  6. data/lib/logicuit/array_as_signal_group.rb +1 -1
  7. data/lib/logicuit/circuits/combinational/full_adder.rb +6 -2
  8. data/lib/logicuit/circuits/combinational/full_adder_4bit.rb +6 -0
  9. data/lib/logicuit/circuits/combinational/half_adder.rb +4 -0
  10. data/lib/logicuit/circuits/combinational/multiplexer_2to1.rb +5 -1
  11. data/lib/logicuit/circuits/combinational/multiplexer_4to1.rb +5 -1
  12. data/lib/logicuit/circuits/sequential/d_flip_flop.rb +4 -0
  13. data/lib/logicuit/circuits/sequential/one_bit_cpu.rb +4 -0
  14. data/lib/logicuit/circuits/sequential/program_counter.rb +10 -4
  15. data/lib/logicuit/circuits/sequential/register_4bit.rb +6 -0
  16. data/lib/logicuit/circuits/td4/cpu.rb +11 -2
  17. data/lib/logicuit/circuits/td4/decoder.rb +9 -5
  18. data/lib/logicuit/circuits/td4/rom.rb +6 -4
  19. data/lib/logicuit/dsl.rb +47 -18
  20. data/lib/logicuit/gates/and.rb +5 -1
  21. data/lib/logicuit/gates/nand.rb +5 -1
  22. data/lib/logicuit/gates/not.rb +4 -0
  23. data/lib/logicuit/gates/or.rb +5 -1
  24. data/lib/logicuit/gates/xor.rb +5 -1
  25. data/lib/logicuit/runner.rb +1 -1
  26. data/lib/logicuit/signals/clock.rb +1 -1
  27. data/lib/logicuit/signals/signal.rb +12 -0
  28. data/lib/logicuit/signals/signal_group.rb +7 -1
  29. data/lib/logicuit/version.rb +1 -1
  30. data/sig/generated/logicuit/circuits/combinational/full_adder.rbs +20 -0
  31. data/sig/generated/logicuit/circuits/combinational/full_adder_4bit.rbs +38 -0
  32. data/sig/generated/logicuit/circuits/combinational/half_adder.rbs +18 -0
  33. data/sig/generated/logicuit/circuits/combinational/multiplexer_2to1.rbs +18 -0
  34. data/sig/generated/logicuit/circuits/combinational/multiplexer_4to1.rbs +24 -0
  35. data/sig/generated/logicuit/circuits/sequential/d_flip_flop.rbs +14 -0
  36. data/sig/generated/logicuit/circuits/sequential/one_bit_cpu.rbs +16 -0
  37. data/sig/generated/logicuit/circuits/sequential/program_counter.rbs +28 -0
  38. data/sig/generated/logicuit/circuits/sequential/register_4bit.rbs +28 -0
  39. data/sig/generated/logicuit/circuits/td4/cpu.rbs +28 -0
  40. data/sig/generated/logicuit/circuits/td4/decoder.rbs +32 -0
  41. data/sig/generated/logicuit/circuits/td4/rom.rbs +36 -0
  42. data/sig/generated/logicuit/gates/and.rbs +14 -0
  43. data/sig/generated/logicuit/gates/nand.rbs +14 -0
  44. data/sig/generated/logicuit/gates/not.rbs +12 -0
  45. data/sig/generated/logicuit/gates/or.rbs +14 -0
  46. data/sig/generated/logicuit/gates/xor.rbs +14 -0
  47. data/sig/logicuit/array_as_signal_group.rbs +11 -0
  48. data/sig/logicuit/dsl.rbs +35 -0
  49. data/sig/logicuit/runner.rbs +4 -0
  50. data/sig/logicuit/signals/clock.rbs +30 -0
  51. data/sig/logicuit/signals/signal.rbs +32 -0
  52. data/sig/logicuit/signals/signal_group.rbs +20 -0
  53. data/sig/logicuit/version.rbs +3 -0
  54. metadata +28 -4
  55. data/sig/logicuit.rbs +0 -4
data/lib/logicuit/dsl.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # steep:ignore:start
4
+
3
5
  # Logicuit module
4
6
  module Logicuit
5
7
  # base class for all gates and circuits
@@ -26,7 +28,9 @@ module Logicuit
26
28
 
27
29
  def self.inputs(*args, **kwargs)
28
30
  # define getter methods for inputs
29
- attr_reader(*args)
31
+ args.each do |arg|
32
+ attr_reader(arg) unless instance_methods.include?(arg)
33
+ end
30
34
 
31
35
  # define initializer for inputs
32
36
  define_method(:inputs) do |*instance_method_args|
@@ -54,7 +58,9 @@ module Logicuit
54
58
 
55
59
  def self.outputs(*args, **kwargs)
56
60
  # define getter methods for outputs
57
- attr_reader(*(args + kwargs.keys))
61
+ (args + kwargs.keys).each do |arg|
62
+ attr_reader(arg) unless instance_methods.include?(arg)
63
+ end
58
64
 
59
65
  # define initializer for outputs
60
66
  define_method(:outputs) do
@@ -71,19 +77,13 @@ module Logicuit
71
77
  return unless initialized
72
78
 
73
79
  kwargs.each do |output, evaluator|
74
- signal = instance_variable_get("@#{output}")
75
- e_args = if override_args.empty?
76
- @input_targets.map do |input|
77
- instance_variable_get("@#{input}").current
78
- end
79
- else
80
- override_args
81
- end
82
- if @inputs_as_bool_struct.new(*e_args).instance_exec(&evaluator)
83
- signal.on
84
- else
85
- signal.off
86
- end
80
+ ret = if override_args.empty?
81
+ instance_exec(&evaluator)
82
+ else
83
+ o = @inputs_as_bool_struct.new(*override_args)
84
+ o.instance_exec(&evaluator)
85
+ end
86
+ send(output).send(ret.current ? :on : :off)
87
87
  end
88
88
  end
89
89
  end
@@ -91,7 +91,7 @@ module Logicuit
91
91
  def self.assembling(&block)
92
92
  define_method(:assembling) do
93
93
  ret = instance_eval(&block)
94
- ret.each { @components << it } if ret.is_a?(Array)
94
+ ret.each { @components << _1 } if ret.is_a?(Array)
95
95
  end
96
96
  end
97
97
 
@@ -132,8 +132,10 @@ module Logicuit
132
132
  headers.size == values.size
133
133
  end.map do |values|
134
134
  array = [values]
135
- while array.any? { it.any? { |v| v == :any } }
136
- target_index = array.find_index { it.any? { |v| v == :any } }
135
+ while array.any? { _1.any? { |v| v == :any } }
136
+ target_index = array.find_index { _1.any? { |v| v == :any } }
137
+ next if target_index.nil? # avoid rbs error...
138
+
137
139
  target = array[target_index]
138
140
  prop_index = target.find_index { |v| v == :any }
139
141
  array.delete_at(target_index)
@@ -151,8 +153,35 @@ module Logicuit
151
153
  end
152
154
  end
153
155
 
156
+ def self.verify_against_truth_table
157
+ new.truth_table.each do |row|
158
+ args = row.values_at(*new.input_targets).map { _1 ? 1 : 0 }
159
+ subject = new(*args)
160
+
161
+ previous_values = row.reject do |_k, v|
162
+ v == :clock
163
+ end.keys.reduce({}) { |acc, key| acc.merge(key => subject.send(key).current) }
164
+
165
+ Signals::Clock.tick if row.values.find :clock
166
+
167
+ row.each do |key, value|
168
+ next if value == :clock
169
+
170
+ if value.is_a?(Array) && value.first == :ref
171
+ expected = previous_values[value.last]
172
+
173
+ raise "#{self}.new(#{args.join(", ")}).#{key} should be #{expected ? 1 : 0}" unless expected == subject.send(key).current
174
+ else
175
+ raise "#{self}.new(#{args.join(", ")}).#{key} should be #{value ? 1 : 0}" unless value == subject.send(key).current
176
+ end
177
+ end
178
+ end
179
+ end
180
+
154
181
  def self.run(opts = {})
155
182
  ::Logicuit.run(new, **opts)
156
183
  end
157
184
  end
158
185
  end
186
+
187
+ # steep:ignore:end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rbs_inline: enabled
4
+
3
5
  module Logicuit
4
6
  module Gates
5
7
  # AND gate
@@ -10,9 +12,11 @@ module Logicuit
10
12
  (B)-| |
11
13
  DIAGRAM
12
14
 
15
+ attr_reader :a, :b, :y #: Signals::Signal
16
+
13
17
  inputs :a, :b
14
18
 
15
- outputs y: -> { a && b }
19
+ outputs y: -> { a & b }
16
20
 
17
21
  truth_table <<~TRUTH_TABLE
18
22
  | A | B | Y |
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rbs_inline: enabled
4
+
3
5
  module Logicuit
4
6
  module Gates
5
7
  # NAND gate
@@ -10,9 +12,11 @@ module Logicuit
10
12
  (B)-| |
11
13
  DIAGRAM
12
14
 
15
+ attr_reader :a, :b, :y #: Signals::Signal
16
+
13
17
  inputs :a, :b
14
18
 
15
- outputs y: -> { !(a && b) }
19
+ outputs y: -> { !(a & b) }
16
20
 
17
21
  truth_table <<~TRUTH_TABLE
18
22
  | A | B | Y |
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rbs_inline: enabled
4
+
3
5
  module Logicuit
4
6
  module Gates
5
7
  # NOT gate
@@ -8,6 +10,8 @@ module Logicuit
8
10
  (A)-|NOT|-(Y)
9
11
  DIAGRAM
10
12
 
13
+ attr_reader :a, :y #: Signals::Signal
14
+
11
15
  inputs :a
12
16
 
13
17
  outputs y: -> { !a }
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rbs_inline: enabled
4
+
3
5
  module Logicuit
4
6
  module Gates
5
7
  # OR gate
@@ -10,9 +12,11 @@ module Logicuit
10
12
  (B)-| |
11
13
  DIAGRAM
12
14
 
15
+ attr_reader :a, :b, :y #: Signals::Signal
16
+
13
17
  inputs :a, :b
14
18
 
15
- outputs y: -> { a || b }
19
+ outputs y: -> { a | b }
16
20
 
17
21
  truth_table <<~TRUTH_TABLE
18
22
  | A | B | Y |
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rbs_inline: enabled
4
+
3
5
  module Logicuit
4
6
  module Gates
5
7
  # XOR gate
@@ -10,9 +12,11 @@ module Logicuit
10
12
  (B)-| |
11
13
  DIAGRAM
12
14
 
15
+ attr_reader :a, :b, :y #: Signals::Signal
16
+
13
17
  inputs :a, :b
14
18
 
15
- outputs y: -> { (a && !b) || (!a && b) }
19
+ outputs y: -> { (a & !b) | (!a & b) }
16
20
 
17
21
  truth_table <<~TRUTH_TABLE
18
22
  | A | B | Y |
@@ -23,7 +23,7 @@ module Logicuit
23
23
  render.call
24
24
  end
25
25
 
26
- while (input = gets.chomp)
26
+ while (input = gets&.chomp)
27
27
  key = input.to_sym
28
28
  unless circuit.respond_to? key
29
29
  if circuit.clock && hz.zero?
@@ -16,7 +16,7 @@ module Logicuit
16
16
  # Call the `evaluate` method for all components.
17
17
  # However, the input argument values should be bound to the values at the time `tick` is called.
18
18
  @downstreams.map do |component|
19
- args = component.input_targets.map { |input| component.instance_variable_get("@#{input}").current }
19
+ args = component.input_targets.map { |input| Signal.new(component.send(input).current) }
20
20
  -> { component.evaluate(*args) }
21
21
  end.each(&:call)
22
22
  end
@@ -41,6 +41,18 @@ module Logicuit
41
41
  current ? "1" : "0"
42
42
  end
43
43
 
44
+ def &(other)
45
+ Signal.new(current && other.current)
46
+ end
47
+
48
+ def |(other)
49
+ Signal.new(current || other.current)
50
+ end
51
+
52
+ def !
53
+ Signal.new(!current)
54
+ end
55
+
44
56
  private
45
57
 
46
58
  def propagate_current
@@ -19,7 +19,13 @@ module Logicuit
19
19
  alias >> connects_to
20
20
 
21
21
  def to_s
22
- signals.map { it.current ? "1" : "0" }.join
22
+ signals.map { _1.current ? "1" : "0" }.join
23
+ end
24
+
25
+ def set(vals)
26
+ vals.split("").zip(signals).each do |v, o|
27
+ v == "1" ? o&.on : o&.off
28
+ end
23
29
  end
24
30
  end
25
31
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Logicuit
4
- VERSION = "0.3.0"
4
+ VERSION = "0.3.2"
5
5
  end
@@ -0,0 +1,20 @@
1
+ # Generated from lib/logicuit/circuits/combinational/full_adder.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Combinational
6
+ # FullAdder class
7
+ class FullAdder < DSL
8
+ attr_reader cin: Signals::Signal
9
+
10
+ attr_reader a: Signals::Signal
11
+
12
+ attr_reader b: Signals::Signal
13
+
14
+ attr_reader s: Signals::Signal
15
+
16
+ attr_reader c: Signals::Signal
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,38 @@
1
+ # Generated from lib/logicuit/circuits/combinational/full_adder_4bit.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Combinational
6
+ # FullAdder class
7
+ class FullAdder4bit < DSL
8
+ attr_reader cin: Signals::Signal
9
+
10
+ attr_reader a0: Signals::Signal
11
+
12
+ attr_reader b0: Signals::Signal
13
+
14
+ attr_reader a1: Signals::Signal
15
+
16
+ attr_reader b1: Signals::Signal
17
+
18
+ attr_reader a2: Signals::Signal
19
+
20
+ attr_reader b2: Signals::Signal
21
+
22
+ attr_reader a3: Signals::Signal
23
+
24
+ attr_reader b3: Signals::Signal
25
+
26
+ attr_reader s0: Signals::Signal
27
+
28
+ attr_reader s1: Signals::Signal
29
+
30
+ attr_reader s2: Signals::Signal
31
+
32
+ attr_reader s3: Signals::Signal
33
+
34
+ attr_reader c: Signals::Signal
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,18 @@
1
+ # Generated from lib/logicuit/circuits/combinational/half_adder.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Combinational
6
+ # HalfAdder class
7
+ class HalfAdder < DSL
8
+ attr_reader a: Signals::Signal
9
+
10
+ attr_reader b: Signals::Signal
11
+
12
+ attr_reader c: Signals::Signal
13
+
14
+ attr_reader s: Signals::Signal
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # Generated from lib/logicuit/circuits/combinational/multiplexer_2to1.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Combinational
6
+ # A Multiplexer with 2 inputs and 1 output
7
+ class Multiplexer2to1 < DSL
8
+ attr_reader c0: Signals::Signal
9
+
10
+ attr_reader c1: Signals::Signal
11
+
12
+ attr_reader a: Signals::Signal
13
+
14
+ attr_reader y: Signals::Signal
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ # Generated from lib/logicuit/circuits/combinational/multiplexer_4to1.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Combinational
6
+ # A Multiplexer with 4 inputs and 1 output
7
+ class Multiplexer4to1 < DSL
8
+ attr_reader c0: Signals::Signal
9
+
10
+ attr_reader c1: Signals::Signal
11
+
12
+ attr_reader c2: Signals::Signal
13
+
14
+ attr_reader c3: Signals::Signal
15
+
16
+ attr_reader b: Signals::Signal
17
+
18
+ attr_reader a: Signals::Signal
19
+
20
+ attr_reader y: Signals::Signal
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/logicuit/circuits/sequential/d_flip_flop.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Sequential
6
+ # D Flip-Flop
7
+ class DFlipFlop < DSL
8
+ attr_reader d: Signals::Signal
9
+
10
+ attr_reader q: Signals::Signal
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ # Generated from lib/logicuit/circuits/sequential/one_bit_cpu.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Sequential
6
+ # 1 bit CPU with a Multiplexer
7
+ # Input A is H, MOV A,A
8
+ # Input A is L, NOT A
9
+ class OneBitCpu < DSL
10
+ attr_reader a: Signals::Signal
11
+
12
+ attr_reader y: Signals::Signal
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,28 @@
1
+ # Generated from lib/logicuit/circuits/sequential/program_counter.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Sequential
6
+ # Program Counter
7
+ class ProgramCounter < DSL
8
+ attr_reader a: Signals::Signal
9
+
10
+ attr_reader b: Signals::Signal
11
+
12
+ attr_reader c: Signals::Signal
13
+
14
+ attr_reader d: Signals::Signal
15
+
16
+ attr_reader ld: Signals::Signal
17
+
18
+ attr_reader qa: Signals::Signal
19
+
20
+ attr_reader qb: Signals::Signal
21
+
22
+ attr_reader qc: Signals::Signal
23
+
24
+ attr_reader qd: Signals::Signal
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # Generated from lib/logicuit/circuits/sequential/register_4bit.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Sequential
6
+ # 4 bit register
7
+ class Register4bit < DSL
8
+ attr_reader a: Signals::Signal
9
+
10
+ attr_reader b: Signals::Signal
11
+
12
+ attr_reader c: Signals::Signal
13
+
14
+ attr_reader d: Signals::Signal
15
+
16
+ attr_reader ld: Signals::Signal
17
+
18
+ attr_reader qa: Signals::Signal
19
+
20
+ attr_reader qb: Signals::Signal
21
+
22
+ attr_reader qc: Signals::Signal
23
+
24
+ attr_reader qd: Signals::Signal
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # Generated from lib/logicuit/circuits/td4/cpu.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Td4
6
+ # TD4 CPU
7
+ class Cpu < DSL
8
+ attr_reader in0: untyped
9
+
10
+ attr_reader in1: untyped
11
+
12
+ attr_reader in2: untyped
13
+
14
+ attr_reader in3: untyped
15
+
16
+ attr_reader led1: untyped
17
+
18
+ attr_reader led2: untyped
19
+
20
+ attr_reader led3: untyped
21
+
22
+ attr_reader led4: untyped
23
+
24
+ def to_s: () -> untyped
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,32 @@
1
+ # Generated from lib/logicuit/circuits/td4/decoder.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Td4
6
+ # Decoder class
7
+ class Decoder < DSL
8
+ attr_reader op3: Signals::Signal
9
+
10
+ attr_reader op2: Signals::Signal
11
+
12
+ attr_reader op1: Signals::Signal
13
+
14
+ attr_reader op0: Signals::Signal
15
+
16
+ attr_reader c_flag: Signals::Signal
17
+
18
+ attr_reader sel_b: Signals::Signal
19
+
20
+ attr_reader sel_a: Signals::Signal
21
+
22
+ attr_reader ld0: Signals::Signal
23
+
24
+ attr_reader ld1: Signals::Signal
25
+
26
+ attr_reader ld2: Signals::Signal
27
+
28
+ attr_reader ld3: Signals::Signal
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,36 @@
1
+ # Generated from lib/logicuit/circuits/td4/rom.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Td4
6
+ # Timer
7
+ class Rom < DSL
8
+ attr_reader a3: Signals::Signal
9
+
10
+ attr_reader a2: Signals::Signal
11
+
12
+ attr_reader a1: Signals::Signal
13
+
14
+ attr_reader a0: Signals::Signal
15
+
16
+ attr_reader d7: Signals::Signal
17
+
18
+ attr_reader d6: Signals::Signal
19
+
20
+ attr_reader d5: Signals::Signal
21
+
22
+ attr_reader d4: Signals::Signal
23
+
24
+ attr_reader d3: Signals::Signal
25
+
26
+ attr_reader d2: Signals::Signal
27
+
28
+ attr_reader d1: Signals::Signal
29
+
30
+ attr_reader d0: Signals::Signal
31
+
32
+ def evaluate: () -> untyped
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/logicuit/gates/and.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Gates
5
+ # AND gate
6
+ class And < DSL
7
+ attr_reader a: Signals::Signal
8
+
9
+ attr_reader b: Signals::Signal
10
+
11
+ attr_reader y: Signals::Signal
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/logicuit/gates/nand.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Gates
5
+ # NAND gate
6
+ class Nand < DSL
7
+ attr_reader a: Signals::Signal
8
+
9
+ attr_reader b: Signals::Signal
10
+
11
+ attr_reader y: Signals::Signal
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ # Generated from lib/logicuit/gates/not.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Gates
5
+ # NOT gate
6
+ class Not < DSL
7
+ attr_reader a: Signals::Signal
8
+
9
+ attr_reader y: Signals::Signal
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/logicuit/gates/or.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Gates
5
+ # OR gate
6
+ class Or < DSL
7
+ attr_reader a: Signals::Signal
8
+
9
+ attr_reader b: Signals::Signal
10
+
11
+ attr_reader y: Signals::Signal
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/logicuit/gates/xor.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Gates
5
+ # XOR gate
6
+ class Xor < DSL
7
+ attr_reader a: Signals::Signal
8
+
9
+ attr_reader b: Signals::Signal
10
+
11
+ attr_reader y: Signals::Signal
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ # Logicuit module
2
+ module Logicuit
3
+ # Treats Array#>> as SignalGroup#>> for the purpose of connecting signals
4
+ module ArrayAsSignalGroup
5
+ def >>: (untyped other) -> void
6
+ end
7
+ end
8
+
9
+ class Array[unchecked out T]
10
+ def >>: (untyped other) -> void
11
+ end