私はユニットフィールドを持っていますevents
:
events:uint;
の値はevents
、設定されたビットの量ほど興味深いものではありません。の設定ビット量の範囲を制限したいと思いますevents
。それを行う方法はありますか?ご協力ありがとうございました。
私はユニットフィールドを持っていますevents
:
events:uint;
の値はevents
、設定されたビットの量ほど興味深いものではありません。の設定ビット量の範囲を制限したいと思いますevents
。それを行う方法はありますか?ご協力ありがとうございました。
もっと簡単な方法があるかもしれませんが、ビット スライスを使用して uint のリストを変数のビットと等しくなるように制約し、 を使用sum
してそれらの量を制約することができます。
次の例は、必要なことを行います (簡潔にするために 4 ビット変数に制限されています)。
<'
extend sys {
events : uint(bits:4);
b: list of uint(bits:1);
keep b.size() == 4;
keep b[0] == events[0:0];
keep b[1] == events[1:1];
keep b[2] == events[2:2];
keep b[3] == events[3:3];
keep (b.sum(it) == 2);
};
'>
すべての制約を記述するのはおそらく少し見苦しいですが、define as computed
マクロを使用して簡単に行うことができます。