예제 #1
0
파일: op.py 프로젝트: yeyue910107/MR-Packer
    def preOptimize(self, free_vertexes, minset_map, minset, minset_num):
        _node = self.node_list[0]
        if _node.parent is None:
            minset_map[self] = 0
	    minset[0] = [self]
	else:
            prev = self.getPrevNoneSPOp()
            if isinstance(_node, node.SPNode):
	        if isinstance(_node.child, node.TableNode):
		    minset_map[self] = minset_map[prev]
		    minset[minset_map[prev]].append(self)
		    return
	        self.child_list[0].preOptimize(free_vertexes, minset_map, minset, minset_num)
                return
            if Rule.__pk_compare__(self.pk_list, prev.pk_list):
                if isinstance(_node.parent, node.SPNode):
                    minset_map[self.parent] = minset_map[prev]
                    minset[minset_map[self.parent]].append(self.parent)
                minset_map[self] = minset_map[prev]
                minset[minset_map[prev]].append(self)
            else:
                if isinstance(_node.parent, node.SPNode):
                    self.parent.is_free_vertex = True
                    free_vertexes.append(self.parent)
                minset_num = minset_num + 1
                minset_map[self] = minset_num
                minset[minset_num].append(self)
        for child in self.child_list:
            child.preOptimize(free_vertexes, minset_map, minset, minset_num)