merge MarinaFleet and Marina
[fleet.git] / src / edu / berkeley / fleet / util / BitMask.java
1 package edu.berkeley.fleet.util;
2 import edu.berkeley.fleet.api.*;
3 import edu.berkeley.fleet.*;
4 import java.io.*;
5
6 /** A bit mask assigns 1, 0, or dont-care to each bit position */
7 public class BitMask {
8
9     public final BitVector zeroes;
10     public final BitVector ones;
11
12     public BitMask(BitVector zeroes, BitVector ones) {
13         if (ones.length() != zeroes.length())
14             throw new RuntimeException("attempt to invoke BitMask with different-size "+
15                                        "BitVectors: ones="+ones+", zeroes="+zeroes);
16         ones.setImmutable();
17         zeroes.setImmutable();
18         this.ones = ones;
19         this.zeroes = zeroes;
20     }
21
22     public BitVector apply(BitVector bv) {
23         return ones.or(bv).and(zeroes.not());
24     }
25
26     public boolean test(BitVector bv) {
27         throw new RuntimeException("not implemented");
28     }
29
30     public BitMask invert() {
31         return new BitMask(ones, zeroes);
32     }
33
34 }