Specman: Как узнать, существует ли список байтов в другом списке с учетом порядка списка

У меня есть полезная нагрузка, которая представляет собой списки байтов типа:

var payload : list of byte;
payload= {1;2;3;4;5;6};

var item1 :list of byte;
item = {3;4;5};


var item2 :list of byte;
item = {1;4};

Я хотел бы реализовать код, который проверяет, является ли список подсписком другого. Использование «if ..in..» не совсем работает, поскольку оно не учитывает порядок элементов или их последовательное появление или нет. Я хочу что-то, что делает следующее:

  • if (item1 в полезной нагрузке) ...... должен возвращать TRUE. Элементы существуют в полезной нагрузке в одном и том же порядке.

  • if (item2 в полезной нагрузке) ...... должен возвращать FALSE, потому что, хотя каждый элемент в списке существует в полезной нагрузке, но элементы item2 не появляются последовательно в списке полезной нагрузки.

Есть ли простой способ добиться этого? Для этого в specman должна быть встроенная функция.

Спасибо


person bobesfanchi    schedule 23.11.2015    source источник
comment
На самом деле, порядок в item2 тоже такой же (1 стоит перед 4, как и в payload). Возможно, вы имели в виду не только порядок, но и элементы, которые появляются последовательно? Пожалуйста, уточните свой вопрос.   -  person Yuri Tsoglin    schedule 24.11.2015
comment
@YuriTsoglin Я думаю, он имеет в виду, что хочет проверить, является ли список подсписком большего списка.   -  person Tudor Timi    schedule 24.11.2015
comment
@YuriTsoglin Да, я хотел бы проверить, появляются ли элементы последовательно. Спасибо   -  person bobesfanchi    schedule 25.11.2015


Ответы (1)


Следующий код должен работать:

if (item.size()==0) {return TRUE};
for i from 0 to payload.size()-item.size() {
    if (item == payload[i..i+item.size()-1]) {
        return TRUE;
    };
};
return FALSE;

Обратите внимание, что этот код довольно затратен с точки зрения памяти (синтаксис list[a..b] каждый раз создает новый список), поэтому, если у вас есть соображения по поводу памяти, его следует изменить.

person Reuven Naveh    schedule 25.11.2015