| """ |
| Objective-C runtime wrapper for use by LLDB Python formatters |
| |
| part of The LLVM Compiler Infrastructure |
| This file is distributed under the University of Illinois Open Source |
| License. See LICENSE.TXT for details. |
| """ |
| |
| |
| class AttributesDictionary: |
| |
| def __init__(self, allow_reset=True): |
| # need to do it this way to prevent endless recursion |
| self.__dict__['_dictionary'] = {} |
| self.__dict__['_allow_reset'] = allow_reset |
| |
| def __getattr__(self, name): |
| if not self._check_exists(name): |
| return None |
| value = self._dictionary[name] |
| return value |
| |
| def _set_impl(self, name, value): |
| self._dictionary[name] = value |
| |
| def _check_exists(self, name): |
| return name in self._dictionary |
| |
| def __setattr__(self, name, value): |
| if self._allow_reset: |
| self._set_impl(name, value) |
| else: |
| self.set_if_necessary(name, value) |
| |
| def set_if_necessary(self, name, value): |
| if not self._check_exists(name): |
| self._set_impl(name, value) |
| return True |
| return False |
| |
| def __len__(self): |
| return len(self._dictionary) |