CMS 3D CMS Logo

Public Member Functions | Private Attributes

SequenceTypes::_CopyAndExcludeSequenceVisitorOld Class Reference

List of all members.

Public Member Functions

def __init__
def didExclude
def enter
def leave
def result

Private Attributes

 __didExclude
 __modulesToIgnore
 __result
 __stack

Detailed Description

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.


Constructor & Destructor Documentation

def SequenceTypes::_CopyAndExcludeSequenceVisitorOld::__init__ (   self,
  modulesToRemove 
)

Definition at line 516 of file SequenceTypes.py.

00517                                      :
00518        self.__modulesToIgnore = modulesToRemove
00519        self.__stack = list()
00520        self.__stack.append(list())
00521        self.__result = None
       self.__didExclude = False

Member Function Documentation

def SequenceTypes::_CopyAndExcludeSequenceVisitorOld::didExclude (   self)

Definition at line 597 of file SequenceTypes.py.

00598                        :
00599        return self.__didExclude
00600 

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.

00588                    :
00589        result = None
00590        for n in (x[0] for x in self.__stack[0]):
00591            if n is None:
00592                continue
00593            if result is None:
00594                result = n
00595            else:
00596                result = result+n
       return result

Member Data Documentation

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.