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.
7 8 9 10 11 12 |
# File 'lib/contrek/finder/list.rb', line 7 def initialize(id) @start = nil @end = nil @size = 0 @idd = id end |
Instance Attribute Details
#end ⇒ Object (readonly)
Returns the value of attribute end.
6 7 8 |
# File 'lib/contrek/finder/list.rb', line 6 def end @end end |
#idd ⇒ Object (readonly)
Returns the value of attribute idd.
6 7 8 |
# File 'lib/contrek/finder/list.rb', line 6 def idd @idd end |
#size ⇒ Object (readonly)
Returns the value of attribute size.
6 7 8 |
# File 'lib/contrek/finder/list.rb', line 6 def size @size end |
#start ⇒ Object (readonly)
Returns the value of attribute start.
6 7 8 |
# File 'lib/contrek/finder/list.rb', line 6 def start @start end |
Instance Method Details
#<<(entry) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/contrek/finder/list.rb', line 63 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
23 24 25 |
# File 'lib/contrek/finder/list.rb', line 23 def contains(entry) entry.data_pointer[@idd].inside end |
#delete(entry) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/contrek/finder/list.rb', line 109 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
94 95 96 97 98 99 100 101 |
# File 'lib/contrek/finder/list.rb', line 94 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
18 19 20 21 |
# File 'lib/contrek/finder/list.rb', line 18 def find each { |e| return e if yield(e) } nil end |
#first ⇒ Object
14 15 16 |
# File 'lib/contrek/finder/list.rb', line 14 def first @start end |
#grab(source_list) ⇒ Object
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 54 55 |
# File 'lib/contrek/finder/list.rb', line 27 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
103 104 105 106 107 |
# File 'lib/contrek/finder/list.rb', line 103 def map ary = [] each { |e| ary << yield(e) } ary end |
#reset ⇒ Object
57 58 59 60 61 |
# File 'lib/contrek/finder/list.rb', line 57 def reset @end = nil @start = nil @size = 0 end |
#shift ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/contrek/finder/list.rb', line 77 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 |