internal virtual void swap_index(int i, int j)
{
if (i == j)
return;
if (head[i].len > 0)
lru_delete(head[i]);
if (head[j].len > 0)
lru_delete(head[j]);
do
{
float[] _ = head[i].data;
head[i].data = head[j].data;
head[j].data = _;
} while (false);
do
{
int _ = head[i].len;
head[i].len = head[j].len;
head[j].len = _;
} while (false);
if (head[i].len > 0)
lru_insert(head[i]);
if (head[j].len > 0)
lru_insert(head[j]);
if (i > j)
do
{
int _ = i;
i = j;
j = _;
} while (false);
for (head_t h = lru_head.next; h != lru_head; h = h.next)
{
if (h.len > i)
{
if (h.len > j)
do
{
float _ = h.data[i];
h.data[i] = h.data[j];
h.data[j] = _;
} while (false);
else
{
// give up
lru_delete(h);
size += h.len;
h.data = null;
h.len = 0;
}
}
}
}