Source code for sts.headerspace.headerspace.slice

'''
Created on Jan 26, 2011

@author: peymankazemian
'''

from sts.headerspace.headerspace.tf import TF

[docs]class Slice(object): ''' classdocs '''
[docs] def __init__(self, length): ''' Constructor ''' self.length = length self.reservations = [] self.port_to_reservation = {}
[docs] def get_port_reservation(self,port): if "%s"%port in self.port_to_reservation: return self.port_to_reservation["%s"%port] else: return []
[docs] def set_hs_reservation(self, ports, hs): ''' set hs reservation on @port to new_hs NOTE: hs.hs_list MUST have only one wildcard expression ''' if hs.length != self.length: return None hs_copy = hs.copy() port_list = list(ports) self.reservations.append((port_list,hs_copy)) for port in ports: if "%s"%port not in self.port_to_reservation.keys(): self.port_to_reservation["%s"%port] = [] self.port_to_reservation["%s"%port].append(hs)
[docs] def intersect(self,other_slice): result = Slice(self.length) for (port_list1,hs1) in other_slice.reservations: for (port_list2,hs2) in self.reservations: port_isect = [p for p in port_list1 if p in port_list2] if len(port_isect) > 0: ihs = hs1.copy_intersect(hs2) if ihs.count() > 0: result.set_hs_reservation(port_isect, ihs) return result
def __str__(self): result = "" for (p, hs) in self.reservations: result = result + "Port: %s - Header Space:\n %s\n"%(p,hs) return result