0

タイプバイトのリストであるペイロードがあります:

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 in payload) ...... は TRUE を返す必要があります。アイテムはペイロードに同じ順序で存在します。

  • if (item2 in payload) ...... は FALSE を返す必要があります。これは、リスト内の各要素がペイロードに存在しますが、item2 要素がペイロード リストに連続して表示されないためです。

これを達成する簡単な方法はありますか?これには、specman に組み込み関数が必要です。

ありがとう

4

1 に答える 1

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] 構文は毎回新しいリストを作成します)。そのため、メモリに関する考慮事項がある場合は変更する必要があります。

于 2015-11-25T10:00:22.277 に答える