Class: Ruwi::Utils::Arrays::ArrayWithOriginalIndices
- Inherits:
-
Object
- Object
- Ruwi::Utils::Arrays::ArrayWithOriginalIndices
- Defined in:
- lib/ruwi/runtime/utils/arrays.rb
Instance Attribute Summary collapse
-
#array ⇒ Object
readonly
Returns the value of attribute array.
-
#equal_proc ⇒ Object
readonly
Returns the value of attribute equal_proc.
-
#original_indices ⇒ Object
readonly
Returns the value of attribute original_indices.
Instance Method Summary collapse
- #add_item(item, index) ⇒ Object
-
#initialize(array, equal_proc) ⇒ ArrayWithOriginalIndices
constructor
A new instance of ArrayWithOriginalIndices.
- #is_addition?(item, from_index) ⇒ Boolean
- #is_noop?(index, new_array) ⇒ Boolean
- #is_removal?(index, new_array) ⇒ Boolean
- #move_item(item, to_index) ⇒ Object
- #noop_item(index) ⇒ Object
- #remove_item(index) ⇒ Object
- #remove_item_after(index) ⇒ Object
Constructor Details
#initialize(array, equal_proc) ⇒ ArrayWithOriginalIndices
Returns a new instance of ArrayWithOriginalIndices.
34 35 36 37 38 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 34 def initialize(array, equal_proc) @array = array.dup @original_indices = array.each_index.to_a @equal_proc = equal_proc end |
Instance Attribute Details
#array ⇒ Object (readonly)
Returns the value of attribute array.
23 24 25 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 23 def array @array end |
#equal_proc ⇒ Object (readonly)
Returns the value of attribute equal_proc.
23 24 25 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 23 def equal_proc @equal_proc end |
#original_indices ⇒ Object (readonly)
Returns the value of attribute original_indices.
23 24 25 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 23 def original_indices @original_indices end |
Instance Method Details
#add_item(item, index) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 84 def add_item(item, index) operation = { op: ARRAY_DIFF_OP[:ADD], index:, item: } @array.insert(index, item) @original_indices.insert(index, -1) operation end |
#is_addition?(item, from_index) ⇒ Boolean
58 59 60 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 58 def is_addition?(item, from_index) return find_index_from(item, from_index).nil? end |
#is_noop?(index, new_array) ⇒ Boolean
49 50 51 52 53 54 55 56 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 49 def is_noop?(index, new_array) return false if index >= length item = @array[index] new_item = new_array[index] @equal_proc.call(item, new_item) end |
#is_removal?(index, new_array) ⇒ Boolean
40 41 42 43 44 45 46 47 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 40 def is_removal?(index, new_array) return false if index >= length item = @array[index] index_in_new_array = new_array.find_index { |new_item| @equal_proc.call(new_item, item) } index_in_new_array.nil? end |
#move_item(item, to_index) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 97 def move_item(item, to_index) from_index = find_index_from(item, to_index) operation = { op: ARRAY_DIFF_OP[:MOVE], original_index: original_index_at(from_index), from: from_index, index: to_index, item: @array[from_index] } temp_deleted_item = @array.delete_at(from_index) @array.insert(to_index, temp_deleted_item) temp_deleted_original_index = @original_indices.delete_at(from_index) @original_indices.insert(to_index, temp_deleted_original_index) operation end |
#noop_item(index) ⇒ Object
75 76 77 78 79 80 81 82 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 75 def noop_item(index) { op: ARRAY_DIFF_OP[:NOOP], original_index: original_index_at(index), index:, item: @array[index] } end |
#remove_item(index) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 62 def remove_item(index) operation = { op: ARRAY_DIFF_OP[:REMOVE], index:, item: @array[index] } @array.delete_at(index) @original_indices.delete_at(index) operation end |
#remove_item_after(index) ⇒ Object
117 118 119 120 121 122 123 124 125 |
# File 'lib/ruwi/runtime/utils/arrays.rb', line 117 def remove_item_after(index) operations = [] while index < length operations << remove_item(index) end operations end |