internal virtual int get_data(int index, float[][] data, int len)
{
head_t h = head[index];
if (h.len > 0)
lru_delete(h);
int more = len - h.len;
if (more > 0)
{
// free old space
while (size < more)
{
head_t old = lru_head.next;
lru_delete(old);
size += old.len;
old.data = null;
old.len = 0;
}
// allocate new space
var new_data = new float[len];
if (h.data != null)
Array.Copy(h.data, 0, new_data, 0, h.len);
h.data = new_data;
size -= more;
do
{
int _ = h.len;
h.len = len;
len = _;
} while (false);
}
lru_insert(h);
data[0] = h.data;
return len;
}