class Lista

Attributes

head[RW]

Se ha incluido el mixin Enumerable

node[RW]

Se ha incluido el mixin Enumerable

tail[RW]

Se ha incluido el mixin Enumerable

Public Class Methods

new(head, tail) click to toggle source

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

each() { |i| ... } click to toggle source

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
extract_head() click to toggle source

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
extract_tail() click to toggle source

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
gases_anuales(gramos) click to toggle source

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
gases_diarios(gramos) click to toggle source

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
get_head() click to toggle source

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
get_size() click to toggle source

Devuelve el tamaño de la lista

# File lib/feeding/lista.rb, line 110
def get_size
        @size
end
get_tail() click to toggle source

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
insert_group(v_nodes) click to toggle source

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
insert_head(node) click to toggle source

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
insert_tail(node) click to toggle source

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
show_list() click to toggle source

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
terreno_anual(gramos) click to toggle source

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