Согласно 1800-2012 specs,Как совместить и удалить элемент из очереди?
Queue::delete([input int index])
удаляет элемент очереди в SystemVerilog, кроме того, Очередь может выполнять те же операции, как распакованной Array, давая ему доступ к:
Array::find_first_index()
который возвращает индекс первого элемента, соответствующий определенным критериям. то есть
find_first_index(x) with (x == 3)
Теперь я хотел бы удалить уникальный объект, гарантированный существование, из очереди. Сочетание 1 и 1 дает мне:
queue.delete(queue.find_first_index(x) with (x == obj_to_del));
Компилятор не понятно, что, хотя говорят, что аргумент, передаваемый должен быть либо целым числом или целым числом совместимы. Я мог бы потянуть два друг от друга:
int index = queue.find_first_index(x) with (x == obj_to_del);
queue.delete(index);
или заставить целое число от типажей find_first_index:
queue.delete(int'(queue.find_first_index(x) with (x == obj_to_del))) //Just finished compiling, does not work.
Бывшего не выглядит очень элегантно ко мне, и последние, кажется, несколько вынужден который сделал меня любопытным если есть, возможно, более правильный способ добиться этого. Возможно, find_first_index возвращает массив размером один с индексом в местоположении 0?
EDIT: я сдуру не представила автономный пример: раздели пример того, что я делаю как выглядит:
class parent_task;
endclass;
class child_taskA extends parent_task;
endclass;
class child_taskB extends parent_task;
endclass;
class task_collector;
child_taskA A_queue[$];
child_taskB B_queue[$];
function delete_from_queue(parent_task task_to_del);
case (task_to_del.type):
A: A_queue.delete(A_queue.find_first_index(x) with (x == task_to_del));
B: B_queue.delete(B_queue.find_first_index(x) with (x == task_to_del));
default: $display("This shouldn't happen.");
endfunction
endclass
сообщение об ошибке слово для слова:
Error-[SV-IQDA] Invalid Queue delete argument
"this.A_queue.find_first_index(iterator) with ((iterator == task))"
Queue method delete can take optional integer argument. So, argument passed
to it must be either integer or integer assignment compatible.
Имеются проверки, чтобы убедиться, что эта задача существует до вызова delete_from_queue.
Из дальнейшего анализа действительно выглядит как find_first_index возвращает массив. 'int index = queue.find_first_index (x) где (x == obj_to_del);' жалуется на назначение int $ [$] для int. –