![]() |
![]() |
Public Member Functions | |
def | __init__ |
def | didExclude |
def | enter |
def | leave |
def | result |
Private Attributes | |
__didExclude | |
__modulesToIgnore | |
__result | |
__stack |
Traverses a Sequence and constructs a new sequence which does not contain modules from the specified list
Definition at line 514 of file SequenceTypes.py.
def SequenceTypes::_CopyAndExcludeSequenceVisitorOld::__init__ | ( | self, | |
modulesToRemove | |||
) |
Definition at line 516 of file SequenceTypes.py.
def SequenceTypes::_CopyAndExcludeSequenceVisitorOld::didExclude | ( | self | ) |
Definition at line 597 of file SequenceTypes.py.
def SequenceTypes::_CopyAndExcludeSequenceVisitorOld::enter | ( | self, | |
visitee | |||
) |
Definition at line 522 of file SequenceTypes.py.
00523 : 00524 if len(self.__stack) > 0: 00525 #add visitee to its parent's stack entry 00526 self.__stack[-1].append([visitee,False]) 00527 if isinstance(visitee,_SequenceLeaf): 00528 if visitee in self.__modulesToIgnore: 00529 self.__didExclude = True 00530 self.__stack[-1][-1]=[None,True] 00531 elif isinstance(visitee, Sequence): 00532 if visitee in self.__modulesToIgnore: 00533 self.__didExclude = True 00534 self.__stack[-1][-1]=[None,True] 00535 self.__stack.append(list()) 00536 else: 00537 #need to add a stack entry to keep track of children self.__stack.append(list())
def SequenceTypes::_CopyAndExcludeSequenceVisitorOld::leave | ( | self, | |
visitee | |||
) |
Definition at line 538 of file SequenceTypes.py.
00539 : 00540 node = visitee 00541 if not isinstance(visitee,_SequenceLeaf): 00542 #were any children changed? 00543 l = self.__stack[-1] 00544 changed = False 00545 countNulls = 0 00546 nonNulls = list() 00547 for c in l: 00548 if c[1] == True: 00549 changed = True 00550 if c[0] is None: 00551 countNulls +=1 00552 else: 00553 nonNulls.append(c[0]) 00554 if changed: 00555 self.__didExclude = True 00556 if countNulls != 0: 00557 #this node must go away 00558 if len(nonNulls) == 0: 00559 #all subnodes went away 00560 node = None 00561 else: 00562 node = nonNulls[0] 00563 for n in nonNulls[1:]: 00564 node = node+n 00565 else: 00566 #some child was changed so we need to clone 00567 # this node and replace it with one that holds 00568 # the new child(ren) 00569 children = [x[0] for x in l ] 00570 if not isinstance(visitee,Sequence): 00571 node = visitee.__new__(type(visitee)) 00572 node.__init__(*children) 00573 else: 00574 node = nonNulls[0] 00575 if node != visitee: 00576 #we had to replace this node so now we need to 00577 # change parent's stack entry as well 00578 if len(self.__stack) > 1: 00579 p = self.__stack[-2] 00580 #find visitee and replace 00581 for i,c in enumerate(p): 00582 if c[0]==visitee: 00583 c[0]=node 00584 c[1]=True 00585 break 00586 if not isinstance(visitee,_SequenceLeaf): self.__stack = self.__stack[:-1]
def SequenceTypes::_CopyAndExcludeSequenceVisitorOld::result | ( | self | ) |
Definition at line 587 of file SequenceTypes.py.
Definition at line 516 of file SequenceTypes.py.
Definition at line 516 of file SequenceTypes.py.
Definition at line 516 of file SequenceTypes.py.
Definition at line 516 of file SequenceTypes.py.