Speedups: no cinit, no pickling (#2851)
* Speedups: remove unnecessary cinit This was meant for (memory) safety, but cython docs clearly state that this is done automatically. The code generated for cinit with args is what triggers a 'possible null deref' in clang's static analyzer, so by removing cinit, we can now use static analysis. * Speedups: disable pickling ... ... of LocationStore and internal classes. This reduces code size and avoids accidentally pickling them.
This commit is contained in:
parent
7fc159c881
commit
17c73916b7
|
@ -48,6 +48,7 @@ cdef struct IndexEntry:
|
|||
size_t count
|
||||
|
||||
|
||||
@cython.auto_pickle(False)
|
||||
cdef class LocationStore:
|
||||
"""Compact store for locations and their items in a MultiServer"""
|
||||
# The original implementation uses Dict[int, Dict[int, Tuple(int, int, int]]
|
||||
|
@ -78,18 +79,6 @@ cdef class LocationStore:
|
|||
size += sizeof(self._raw_proxies[0]) * self.sender_index_size
|
||||
return size
|
||||
|
||||
def __cinit__(self, locations_dict: Dict[int, Dict[int, Sequence[int]]]) -> None:
|
||||
self._mem = None
|
||||
self._keys = None
|
||||
self._items = None
|
||||
self._proxies = None
|
||||
self._len = 0
|
||||
self.entries = NULL
|
||||
self.entry_count = 0
|
||||
self.sender_index = NULL
|
||||
self.sender_index_size = 0
|
||||
self._raw_proxies = NULL
|
||||
|
||||
def __init__(self, locations_dict: Dict[int, Dict[int, Sequence[int]]]) -> None:
|
||||
self._mem = Pool()
|
||||
cdef object key
|
||||
|
@ -281,6 +270,7 @@ cdef class LocationStore:
|
|||
entry.location not in checked])
|
||||
|
||||
|
||||
@cython.auto_pickle(False)
|
||||
@cython.internal # unsafe. disable direct import
|
||||
cdef class PlayerLocationProxy:
|
||||
cdef LocationStore _store
|
||||
|
|
Loading…
Reference in New Issue