Enrico Granata | 3f1052b | 2012-03-13 21:52:00 +0000 | [diff] [blame] | 1 | """ |
| 2 | Objective-C runtime wrapper for use by LLDB Python formatters |
| 3 | |
| 4 | part of The LLVM Compiler Infrastructure |
| 5 | This file is distributed under the University of Illinois Open Source |
| 6 | License. See LICENSE.TXT for details. |
| 7 | """ |
Enrico Granata | cfdafa3 | 2012-03-05 19:56:33 +0000 | [diff] [blame] | 8 | class AttributesDictionary: |
| 9 | def __init__(self, allow_reset = True): |
| 10 | self.__dict__['_dictionary'] = {} # need to do it this way to prevent endless recursion |
| 11 | self.__dict__['_allow_reset'] = allow_reset |
| 12 | |
| 13 | def __getattr__(self,name): |
| 14 | if not self._check_exists(name): |
| 15 | return None |
| 16 | value = self._dictionary[name] |
| 17 | return value |
| 18 | |
| 19 | def _set_impl(self,name,value): |
| 20 | self._dictionary[name] = value |
| 21 | |
| 22 | def _check_exists(self,name): |
| 23 | return name in self._dictionary |
| 24 | |
| 25 | def __setattr__(self,name,value): |
| 26 | if self._allow_reset: |
| 27 | self._set_impl(name,value) |
| 28 | else: |
| 29 | self.set_if_necessary(name,value) |
| 30 | |
| 31 | def set_if_necessary(self,name,value): |
| 32 | if not self._check_exists(name): |
| 33 | self._set_impl(name,value) |
| 34 | return True |
| 35 | return False |
| 36 | |
| 37 | def __len__(self): |
| 38 | return len(self._dictionary) |