Verunchikc / proyecto-Buikuan

0 stars 0 forks source link

Circular Buffer #8

Open juandamonsalve opened 7 months ago

juandamonsalve commented 7 months ago

El programa implementa un buffer circular utilizando la clase Circular Buffer. Este buffer se utiliza para almacenar datos de respiración, y su tamaño máximo está definido por el parámetro max_size proporcionado al iniciar la clase. La lógica del buffer circular se basa en la estructura deque de Micro Python (ucollections.deque). Cuando se añaden nuevos elementos al buffer mediante el método append, el programa maneja la sobrecarga del buffer eliminando el elemento más antiguo. El método pop elimina y devuelve el elemento más antiguo del buffer, y el método clear reinicia el buffer vaciándose.

juandamonsalve commented 7 months ago

from ucollections import deque

class CircularBuffer(object): ''' Very simple implementation of a circular buffer based on deque ''' def init(self, max_size): self.data = deque((), max_size, True) self.max_size = max_size

def __len__(self):
    return len(self.data)

def is_empty(self):
    return not bool(self.data)

def append(self, item):
    try:
        self.data.append(item)
    except IndexError:
        # deque full, popping 1st item out
        self.data.popleft()
        self.data.append(item)

def pop(self):
    return self.data.popleft()

def clear(self):
    self.data = deque((), self.max_size, True)

def pop_head(self):
    buffer_size = len(self.data)
    temp = self.data
    if buffer_size == 1:
        pass
    elif buffer_size > 1:
        self.data.clear()
        for x in range(buffer_size - 1):
            self.data = temp.popleft()
    else:
        return 0
    return temp.popleft()