def toBDD(self, index): """Construct the ROBDD Parameters ---------- index : int. Used for variable index in ROBDD. Return ------ Return the computed ROBDD """ if self.operator == 'LT': if isinstance(self.v1, Protocol): return Protocol.range2bdd(0, self.v1.get_value(), index) elif isinstance(self.v1, Ip): return Ip.range2bdd(0, self.v1.ip | ~self.v1.mask & 0xFFFFFFFF, index) elif isinstance(self.v1, Port): return Port.range2bdd(0, self.v1.get_value(), index) else: return self.v1.toBDD(index) elif self.operator == 'GT': if isinstance(self.v1, Protocol): return Protocol.range2bdd(self.v1.get_value(), 2**8 - 1, index) elif isinstance(self.v1, Ip): return Ip.range2bdd(self.v1.ip & self.v1.mask, 2**32 - 1, index) elif isinstance(self.v1, Port): return Port.range2bdd(self.v1.get_value(), 2**16 - 1, index) else: return self.v1.toBDD(index) elif self.operator == 'EQ': return self.v1.toBDD(index) elif self.operator == 'NEQ': return negate_bdd(self.v1.toBDD(index)) elif self.operator == 'RANGE': if isinstance(self.v1, Protocol): return Protocol.range2bdd(self.v1.get_value(), self.v2.get_value(), index) elif isinstance(self.v1, Ip): return Ip.range2bdd(self.v1.ip & self.v1.mask, self.v2.ip | ~self.v2.mask & 0xFFFFFFFF, index) elif isinstance(self.v1, Port): return Port.range2bdd(self.v1.get_value(), self.v2.get_value(), index) else: return self.v1.toBDD(index) else: return self.v1.toBDD(index)
def toBDD(self, index): """Construct the ROBDD Parameters ---------- index : int. Used for variable index in ROBDD. Return ------ Return the computed ROBDD """ if self.operator == 'LT': if isinstance(self.v1, Protocol): return Protocol.range2bdd(0, self.v1.get_value(), index) elif isinstance(self.v1, Ip): return Ip.range2bdd(0, self.v1.ip | ~self.v1.mask & 0xFFFFFFFF, index) elif isinstance(self.v1, Port): return Port.range2bdd(0, self.v1.get_value(), index) else: return self.v1.toBDD(index) elif self.operator == 'GT': if isinstance(self.v1, Protocol): return Protocol.range2bdd(self.v1.get_value(), 2**8 - 1, index) elif isinstance(self.v1, Ip): return Ip.range2bdd(self.v1.ip & self.v1.mask, 2**32 - 1, index) elif isinstance(self.v1, Port): return Port.range2bdd(self.v1.get_value(), 2**16 - 1, index) else: return self.v1.toBDD(index) elif self.operator == 'EQ': return self.v1.toBDD(index) elif self.operator == 'NEQ': return negate_bdd(self.v1.toBDD(index)) elif self.operator == 'RANGE': if isinstance(self.v1, Protocol): return Protocol.range2bdd(self.v1.get_value(), self.v2.get_value(), index) elif isinstance(self.v1, Ip): return Ip.range2bdd(self.v1.ip & self.v1.mask, self.v2.ip | ~self.v2.mask & 0xFFFFFFFF, index) elif isinstance(self.v1, Port): return Port.range2bdd(self.v1.get_value(), self.v2.get_value(), index) else: return self.v1.toBDD(index) else: return self.v1.toBDD(index)