1
0
mirror of https://github.com/blupi-games/planetblupi synced 2024-12-30 10:15:36 +01:00
planetblupi/src/fifo.cpp

65 lines
1.1 KiB
C++
Raw Normal View History

2017-01-21 17:27:46 +01:00
// Class CFifo, gestion d'une liste en fifo
2017-01-21 23:43:44 +01:00
#include <stdlib.h>
#include <SDL2/SDL_stdinc.h>
2017-01-21 17:27:46 +01:00
#include "fifo.h"
// gestion d'une pile class<73>e en valeur croissantes
// typiquement reprend les coordonn<6E>es les plus proches
2017-01-21 17:27:46 +01:00
// du but en premier lieu
CPileTriee::CPileTriee(Sint32 taille)
2017-01-21 17:27:46 +01:00
{
m_taille = taille;
m_max = m_out = 0;
m_data = (Element*) malloc (sizeof(Element)*taille);
}
CPileTriee::~CPileTriee()
{
free( m_data );
}
Sint32 CPileTriee::get()
2017-01-21 17:27:46 +01:00
{
if (m_out == m_max) return -1;
Sint32 val = m_data [m_out].pos;
2017-01-21 17:27:46 +01:00
m_out++;
if (m_out>=m_taille) m_out = 0;
return val;
}
void CPileTriee::put(Sint32 pos, Sint32 dist)
2017-01-21 17:27:46 +01:00
{
Sint32 i=m_out;
Sint32 p,d,m;
2017-01-21 17:27:46 +01:00
while (i!=m_max)
{
// le point est-il plus proche que celui-l<> ?
2017-01-21 17:27:46 +01:00
if (dist<m_data[i].dist)
{
// oui, insert et d<>cale le suivant
2017-01-21 17:27:46 +01:00
p = m_data[i].pos;
d = m_data[i].dist;
m_data[i].pos = pos;
m_data[i].dist = dist;
pos = p;
dist = d;
}
i++;
if (i>=m_taille) i=0;
}
// ajoute le point <20>loign<67> <20> la suite
2017-01-21 17:27:46 +01:00
m = m_max+1;
if (m>=m_taille) m=0;
if (m!=m_out)
{
m_data[m_max].pos = pos;
m_data[m_max].dist = dist;
m_max = m;
}
}