class Lista
Attributes
Se ha incluido el mixin Enumerable
Se ha incluido el mixin Enumerable
Se ha incluido el mixin Enumerable
Public Class Methods
Se asigna la cabeza y la cola de la lista
# File lib/feeding/lista.rb, line 21 def initialize(head, tail) @head = head @tail = tail @size = 0 end
Public Instance Methods
Se incluye el método del mixin Enumerable Se define como una iteración sobre la cabeza de la lista
# File lib/feeding/lista.rb, line 171 def each i = @head while !i.nil? yield i[:value] i = i[:next] end end
Extrae un nodo por la cabeza
# File lib/feeding/lista.rb, line 56 def extract_head if @head.nil? raise "Lista vacía" else if @head == @tail @size = 0 @head = nil @tail = nil else @size -= 1 aux = @head @head = aux[:next] @head[:prev] = nil end end end
Extrae un nodo por la cola
# File lib/feeding/lista.rb, line 74 def extract_tail if @head.nil? raise "Lista vacía" else if @head == @tail @size = 0 @head = nil @tail = nil else @size -= 1 aux = @tail @tail = aux[:prev] @tail[:next] = nil end end end
Devuelve la cantidad de gases anuales que emiten todos los alimentos que contiene la lista
# File lib/feeding/lista.rb, line 137 def gases_anuales(gramos) gases = 0 iterator = 0 aux = @head while !aux.nil? gases += aux[:value].porcion_gases(gramos[iterator]) aux = aux[:next] iterator += 1 end gases.round(2) end
Devuelve la cantidad de gases diarios que emiten todos los alimentos de la lista
# File lib/feeding/lista.rb, line 163 def gases_diarios(gramos) gases = gases_anuales(gramos) gases_d = (gases / 365).round(3) gases_d end
Devuelve el nodo que contiene la cabeza de la lista
# File lib/feeding/lista.rb, line 92 def get_head if @head.nil? raise "Lista vacía" else @head end end
Devuelve el tamaño de la lista
# File lib/feeding/lista.rb, line 110 def get_size @size end
Devuelve el nodo que contiene la cola de la lista
# File lib/feeding/lista.rb, line 101 def get_tail if @head.nil? raise "Lista vacía" else @tail end end
Inserta varios nodos de una vez y se quedan en la lista en el orden en el que llegaron
# File lib/feeding/lista.rb, line 115 def insert_group(v_nodes) v_nodes.each do |nodo| self.insert_tail(nodo) end end
Inserta un nodo por la cabeza
# File lib/feeding/lista.rb, line 28 def insert_head(node) if @head.nil? @size = 1 @head = Node.new(node, nil, nil) @tail = @head else @size += 1 aux = @head @head[:prev] = Node.new(node, aux, nil) @head = @head[:prev] end end
Inserta un nodo por la cola
# File lib/feeding/lista.rb, line 42 def insert_tail(node) if @head.nil? @size = 1 @head = Node.new(node, nil, nil) @tail = @head else @size += 1 aux = @tail @tail[:next] = Node.new(node, nil, aux) @tail = @tail[:next] end end
Muestra la lista formateada
# File lib/feeding/lista.rb, line 122 def show_list lista = "" if @head.nil? raise "Lista vacía" else aux = @head while !aux.nil? lista << aux[:value].to_s + " " aux = aux[:next] end end lista end
Devuelve la cantidad de terreno que usan todos los alimentos de la lista
# File lib/feeding/lista.rb, line 150 def terreno_anual(gramos) terreno = 0 iterator = 0 aux = @head while !aux.nil? terreno += aux[:value].porcion_terreno(gramos[iterator]) aux = aux[:next] iterator += 1 end terreno.round(2) end