Zagadnienie jest takie - moja usługa pracuje w oparciu o następującą strukturę:
struct filedelays
{
int cat;
int elements;
long time_to;
};
struct filedelays cur_delay[32];
struct reg
{
char ID[7];
char last_val[10];
};
struct reg **registers;
Działa to w taki sposób, że pierwsza tablica stanowi nagłówek, który mówi ile jest elementów w danym zbiorze i jak długo dane mają się przetwarzać, a druga to konkretne adresy oraz wartości, które są pobierane z zewnątrz.
Sęk w tym, że to jest dynamiczne - użytkownik może sobie zażądać dodatkowych danych. Zrobiłem to w taki sposób, że jak dany zbiór się przeterminowuje, to indeks tabel się dekrementuje i pamięć jest realokowana i czyszczona po starych danych - czyli kolejka LIFO w dużym skrócie. Niestety jest problem - jeżeli szybciej się przeterminuje zbiór w środku stosu - w kibel idą wówczas wszystkie zbiory, które powinny być wciąż aktywne. Innymi słowy chodzi o to, żeby wyjąć naleśnik ze środka styrty. Jak w sposób najbardziej elegancki i optymalny rozwiązać to zagadnienie?
Można na chama - dodać flagę IsActive do struktury filedelays i ją gasić przy przeterminowaniu, minus jest taki, że pamięć będzie puchła. Można klasycznie - zrzucać elementy na osobną styrtę zbiór po zbiorze, aż dojdzie się do tego deaktywowanego i potem przerzucić dobre z powrotem - rozwiązanie fajne, ale dosyć skomplikowane jeżeli chodzi o ilość operacji.
A może dałoby się jakoś jeszcze inaczej?
K