12345678910111213141516171819202122232425262728293031323334353637383940 |
- '''This file is part of AToMPM - A Tool for Multi-Paradigm Modelling
- Copyright 2011 by the AToMPM team and licensed under the LGPL
- See COPYING.lesser and README.md in the root of this project for full details'''
- from ..util.infinity import INFINITY
- from ..tcore.composer import Composer
- from brule import BRule
- class BSRule(Composer):
- '''
- Selects a branch in which the matcher succeeds, as long as matches can be found.
- '''
- def __init__(self, branches, max_iterations=INFINITY):
- '''
- Selects a branch in which the matcher succeeds, as long as matches can be found.
- @param branches: A list of ARules.
- @param max_iterations: The maximum number of times to apply the transformation.
- '''
- super(BSRule, self).__init__()
- self.brule = BRule(branches)
- self.max_iterations = max_iterations
- self.iterations = 0
-
- def packet_in(self, packet):
- self.exception = None
- self.is_success = False
-
- while self.iterations < self.max_iterations:
- # Re-apply the BRule
- packet = self.brule.packet_in(packet)
- if not self.brule.is_success:
- self.exception = self.brule.exception
- return packet
- else:
- self.is_success = True
- self.iterations += 1
-
- return packet
|