| 22 | |
| 23 | |
| 24 | class MemoryMapping: |
| 25 | memory_id: str = None |
| 26 | memory: str = None |
| 27 | valid: bool = None |
| 28 | enable_idxs: List[int] = [] |
| 29 | disable_idx: int = -1 |
| 30 | |
| 31 | def __init__(self, memory_id: str, value: str, enable_idxs: int |
| 32 | or List[int]): |
| 33 | self.memory_id = memory_id |
| 34 | self.value = value |
| 35 | self.valid = True |
| 36 | if isinstance(enable_idxs, int): |
| 37 | enable_idxs = [enable_idxs] |
| 38 | self.enable_idxs = enable_idxs |
| 39 | |
| 40 | def udpate_idxs(self, enable_idxs: int or List[int]): |
| 41 | if isinstance(enable_idxs, int): |
| 42 | enable_idxs = [enable_idxs] |
| 43 | self.enable_idxs.extend(enable_idxs) |
| 44 | |
| 45 | def disable(self, disable_idx: int): |
| 46 | self.valid = False |
| 47 | self.disable_idx = disable_idx |
| 48 | |
| 49 | def try_enable(self, expired_disable_idx: int): |
| 50 | if expired_disable_idx == self.disable_idx: |
| 51 | self.valid = True |
| 52 | self.disable_idx = -1 |
| 53 | |
| 54 | def get(self): |
| 55 | return self.value |
| 56 | |
| 57 | def to_dict(self) -> Dict: |
| 58 | return { |
| 59 | 'memory_id': self.memory_id, |
| 60 | 'value': self.value, |
| 61 | 'valid': self.valid, |
| 62 | 'enable_idxs': self.enable_idxs.copy( |
| 63 | ), # Return a copy to prevent external modification |
| 64 | 'disable_idx': self.disable_idx |
| 65 | } |
| 66 | |
| 67 | @classmethod |
| 68 | def from_dict(cls, data: Dict) -> 'MemoryMapping': |
| 69 | instance = cls( |
| 70 | memory_id=data['memory_id'], |
| 71 | value=data['value'], |
| 72 | enable_idxs=data['enable_idxs']) |
| 73 | instance.valid = data['valid'] |
| 74 | instance.disable_idx = data.get('disable_idx', |
| 75 | -1) # Compatible with old data |
| 76 | return instance |
| 77 | |
| 78 | |
| 79 | class DefaultMemory(Memory): |