| """String table implementation for memory-efficient string storage in profiling data.""" | |
| class StringTable: | |
| """A string table for interning strings and reducing memory usage.""" | |
| def __init__(self): | |
| self._strings = [] | |
| self._string_to_index = {} | |
| def intern(self, string): | |
| """Intern a string and return its index. | |
| Args: | |
| string: The string to intern | |
| Returns: | |
| int: The index of the string in the table | |
| """ | |
| if not isinstance(string, str): | |
| string = str(string) | |
| if string in self._string_to_index: | |
| return self._string_to_index[string] | |
| index = len(self._strings) | |
| self._strings.append(string) | |
| self._string_to_index[string] = index | |
| return index | |
| def get_string(self, index): | |
| """Get a string by its index. | |
| Args: | |
| index: The index of the string | |
| Returns: | |
| str: The string at the given index, or empty string if invalid | |
| """ | |
| if 0 <= index < len(self._strings): | |
| return self._strings[index] | |
| return "" | |
| def get_strings(self): | |
| """Get the list of all strings in the table. | |
| Returns: | |
| list: A copy of the strings list | |
| """ | |
| return self._strings.copy() | |
| def __len__(self): | |
| """Return the number of strings in the table.""" | |
| return len(self._strings) |