57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from abc import ABC
							 | 
						||
| 
								 | 
							
								from typing import Tuple
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from BaseClasses import CollectionState
							 | 
						||
| 
								 | 
							
								from .protocol import StardewRule
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class LiteralStardewRule(StardewRule, ABC):
							 | 
						||
| 
								 | 
							
								    value: bool
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def evaluate_while_simplifying(self, state: CollectionState) -> Tuple[StardewRule, bool]:
							 | 
						||
| 
								 | 
							
								        return self, self.value
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __call__(self, state: CollectionState) -> bool:
							 | 
						||
| 
								 | 
							
								        return self.value
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __repr__(self):
							 | 
						||
| 
								 | 
							
								        return str(self.value)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class True_(LiteralStardewRule):  # noqa
							 | 
						||
| 
								 | 
							
								    value = True
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __new__(cls, _cache=[]):  # noqa
							 | 
						||
| 
								 | 
							
								        # Only one single instance will be ever created.
							 | 
						||
| 
								 | 
							
								        if not _cache:
							 | 
						||
| 
								 | 
							
								            _cache.append(super(True_, cls).__new__(cls))
							 | 
						||
| 
								 | 
							
								        return _cache[0]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __or__(self, other) -> StardewRule:
							 | 
						||
| 
								 | 
							
								        return self
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __and__(self, other) -> StardewRule:
							 | 
						||
| 
								 | 
							
								        return other
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class False_(LiteralStardewRule):  # noqa
							 | 
						||
| 
								 | 
							
								    value = False
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __new__(cls, _cache=[]):  # noqa
							 | 
						||
| 
								 | 
							
								        # Only one single instance will be ever created.
							 | 
						||
| 
								 | 
							
								        if not _cache:
							 | 
						||
| 
								 | 
							
								            _cache.append(super(False_, cls).__new__(cls))
							 | 
						||
| 
								 | 
							
								        return _cache[0]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __or__(self, other) -> StardewRule:
							 | 
						||
| 
								 | 
							
								        return other
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __and__(self, other) -> StardewRule:
							 | 
						||
| 
								 | 
							
								        return self
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								false_ = False_()
							 | 
						||
| 
								 | 
							
								true_ = True_()
							 | 
						||
| 
								 | 
							
								assert false_
							 | 
						||
| 
								 | 
							
								assert true_
							 |