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_ |