Class: Contrek::Finder::List
- Inherits:
-
Object
- Object
- Contrek::Finder::List
- Defined in:
- lib/contrek/finder/list.rb
Instance Attribute Summary collapse
-
#end ⇒ Object
readonly
Returns the value of attribute end.
-
#idd ⇒ Object
readonly
Returns the value of attribute idd.
-
#size ⇒ Object
readonly
Returns the value of attribute size.
-
#start ⇒ Object
readonly
Returns the value of attribute start.
Instance Method Summary collapse
- #<<(entry) ⇒ Object
- #contains(entry) ⇒ Object
- #delete(entry) ⇒ Object
- #each ⇒ Object
- #find ⇒ Object
- #first ⇒ Object
- #grab(source_list) ⇒ Object
-
#initialize(id) ⇒ List
constructor
A new instance of List.
- #map ⇒ Object
- #reset ⇒ Object
- #shift ⇒ Object
Constructor Details
#initialize(id) ⇒ List
Returns a new instance of List.
5 6 7 8 9 10 |
# File 'lib/contrek/finder/list.rb', line 5 def initialize(id) @start = nil @end = nil @size = 0 @idd = id end |
Instance Attribute Details
#end ⇒ Object (readonly)
Returns the value of attribute end.
4 5 6 |
# File 'lib/contrek/finder/list.rb', line 4 def end @end end |
#idd ⇒ Object (readonly)
Returns the value of attribute idd.
4 5 6 |
# File 'lib/contrek/finder/list.rb', line 4 def idd @idd end |
#size ⇒ Object (readonly)
Returns the value of attribute size.
4 5 6 |
# File 'lib/contrek/finder/list.rb', line 4 def size @size end |
#start ⇒ Object (readonly)
Returns the value of attribute start.
4 5 6 |
# File 'lib/contrek/finder/list.rb', line 4 def start @start end |
Instance Method Details
#<<(entry) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/contrek/finder/list.rb', line 61 def <<(entry) return if entry.data_pointer[@idd].inside == true if @size > 0 @end.data_pointer[@idd].next = entry entry.data_pointer[@idd].prev = @end else @start = entry end @end = entry entry.data_pointer[@idd].inside = true @size += 1 end |
#contains(entry) ⇒ Object
21 22 23 |
# File 'lib/contrek/finder/list.rb', line 21 def contains(entry) entry.data_pointer[@idd].inside end |
#delete(entry) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/contrek/finder/list.rb', line 107 def delete(entry) return if @size == 0 return if entry.data_pointer[@idd].inside == false next_of_entry = entry.data_pointer[@idd].next prev_of_entry = entry.data_pointer[@idd].prev case entry when @start @start = next_of_entry when @end @end = prev_of_entry end next_of_entry.data_pointer[@idd].prev = prev_of_entry unless next_of_entry.nil? prev_of_entry.data_pointer[@idd].next = next_of_entry unless prev_of_entry.nil? entry.data_pointer[@idd].next = nil entry.data_pointer[@idd].prev = nil @size -= 1 entry.data_pointer[@idd].inside = false end |
#each ⇒ Object
92 93 94 95 96 97 98 99 |
# File 'lib/contrek/finder/list.rb', line 92 def each return if @size == 0 act = @start loop do yield act break if (act = act.data_pointer[@idd].next).nil? end end |
#find ⇒ Object
16 17 18 19 |
# File 'lib/contrek/finder/list.rb', line 16 def find each { |e| return e if yield(e) } nil end |
#first ⇒ Object
12 13 14 |
# File 'lib/contrek/finder/list.rb', line 12 def first @start end |
#grab(source_list) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/contrek/finder/list.rb', line 25 def grab(source_list) return if source_list.size == 0 source_list_idd = source_list.idd source_list_start_entry = source_list.start act = source_list.end loop do break if (act = act.data_pointer[source_list_idd].prev).nil? end source_entry = source_list.start loop do source_entry.data_pointer[@idd] = source_entry.data_pointer[source_list_idd] next_entry = source_entry.data_pointer[source_list_idd].next source_entry.data_pointer[source_list_idd] = Contrek::Finder::Lists::Link.new(nil, nil, false) break if next_entry.nil? source_entry = next_entry end source_list_start_entry.data_pointer[@idd].prev = @end @end.data_pointer[@idd].next = source_list_start_entry unless @end.nil? @end = source_list.end @start = source_list.start if @start.nil? @size += source_list.size source_list.reset end |
#map ⇒ Object
101 102 103 104 105 |
# File 'lib/contrek/finder/list.rb', line 101 def map ary = [] each { |e| ary << yield(e) } ary end |
#reset ⇒ Object
55 56 57 58 59 |
# File 'lib/contrek/finder/list.rb', line 55 def reset @end = nil @start = nil @size = 0 end |
#shift ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/contrek/finder/list.rb', line 75 def shift return nil if @size == 0 retme = @start next_of_retme = retme.data_pointer[@idd].next @start = next_of_retme @end = nil if retme == @end next_of_retme.data_pointer[@idd].prev = nil unless next_of_retme.nil? @size -= 1 retme.data_pointer[@idd].next = nil retme.data_pointer[@idd].prev = nil retme.data_pointer[@idd].inside = false retme end |