On 11/19/2017 12:50 PM, Serhiy Storchaka wrote: > But if PyTuple_GET_ITEM() is used for getting a reference to a C array > of items it can't be replaced with PyTuple_GetItem(). And actually there > is no replacement for this case in the limited API. > > PyObject **items = &PyTuple_GET_ITEM(tuple, 0); That use case might be better covered with a new function, e.g. PyTuple_GetStorage, which the PyObject ** pointing to the first element of the internal array. This function would serve two purposes: * provide the performance benefits of PyTuple_GET_ITEM in tight loops, but without the drawback of exposing the PyTuple layout to the code that invokes the macro; * allow invocation of APIs that expect a pointer to contiguous storage, such as STL algorithms that expect random access iterators. Something similar is already available as PySequence_Fast_ITEMS, except that one is again a macro, and is tied to PySequence_FAST API, which may not be appropriate for the kind of performance-critical code where PyTuple_GET_ITEM tends to be used. (That kind of code is designed to deal specifically with lists or tuples and doesn't benefit from implicit conversion of arbitrary sequences to a temporary list; that conversion would only serve to mask bugs.)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4