@@ -286,69 +286,6 @@ enum class return_value_policy : uint8_t {
286
286
reference_internal
287
287
};
288
288
289
- // / Information record describing a Python buffer object
290
- struct buffer_info {
291
- void *ptr = nullptr ; // Pointer to the underlying storage
292
- size_t itemsize = 0 ; // Size of individual items in bytes
293
- size_t size = 0 ; // Total number of entries
294
- std::string format; // For homogeneous buffers, this should be set to format_descriptor<T>::format()
295
- size_t ndim = 0 ; // Number of dimensions
296
- std::vector<size_t > shape; // Shape of the tensor (1 entry per dimension)
297
- std::vector<size_t > strides; // Number of entries between adjacent entries (for each per dimension)
298
-
299
- buffer_info () { }
300
-
301
- buffer_info (void *ptr, size_t itemsize, const std::string &format, size_t ndim,
302
- const std::vector<size_t > &shape, const std::vector<size_t > &strides)
303
- : ptr(ptr), itemsize(itemsize), size(1 ), format(format),
304
- ndim (ndim), shape(shape), strides(strides) {
305
- for (size_t i = 0 ; i < ndim; ++i)
306
- size *= shape[i];
307
- }
308
-
309
- buffer_info (void *ptr, size_t itemsize, const std::string &format, size_t size)
310
- : buffer_info(ptr, itemsize, format, 1 , std::vector<size_t > { size },
311
- std::vector<size_t > { itemsize }) { }
312
-
313
- explicit buffer_info (Py_buffer *view, bool ownview = true )
314
- : ptr(view->buf), itemsize((size_t ) view->itemsize), size(1 ), format(view->format),
315
- ndim((size_t ) view->ndim), shape((size_t ) view->ndim), strides((size_t ) view->ndim), view(view), ownview(ownview) {
316
- for (size_t i = 0 ; i < (size_t ) view->ndim ; ++i) {
317
- shape[i] = (size_t ) view->shape [i];
318
- strides[i] = (size_t ) view->strides [i];
319
- size *= shape[i];
320
- }
321
- }
322
-
323
- buffer_info (const buffer_info &) = delete;
324
- buffer_info& operator =(const buffer_info &) = delete ;
325
-
326
- buffer_info (buffer_info &&other) {
327
- (*this ) = std::move (other);
328
- }
329
-
330
- buffer_info& operator =(buffer_info &&rhs) {
331
- ptr = rhs.ptr ;
332
- itemsize = rhs.itemsize ;
333
- size = rhs.size ;
334
- format = std::move (rhs.format );
335
- ndim = rhs.ndim ;
336
- shape = std::move (rhs.shape );
337
- strides = std::move (rhs.strides );
338
- std::swap (view, rhs.view );
339
- std::swap (ownview, rhs.ownview );
340
- return *this ;
341
- }
342
-
343
- ~buffer_info () {
344
- if (view && ownview) { PyBuffer_Release (view); delete view; }
345
- }
346
-
347
- private:
348
- Py_buffer *view = nullptr ;
349
- bool ownview = false ;
350
- };
351
-
352
289
NAMESPACE_BEGIN (detail)
353
290
354
291
inline static constexpr int log2(size_t n, int k = 0 ) { return (n <= 1 ) ? k : log2 (n >> 1 , k + 1 ); }
@@ -669,24 +606,6 @@ template <typename T> struct format_descriptor<T, detail::enable_if_t<detail::is
669
606
template <typename T> constexpr const char format_descriptor<
670
607
T, detail::enable_if_t <detail::is_fmt_numeric<T>::value>>::value[2 ];
671
608
672
- NAMESPACE_BEGIN (detail)
673
-
674
- template <typename T, typename SFINAE = void> struct compare_buffer_info {
675
- static bool compare (const buffer_info& b) {
676
- return b.format == format_descriptor<T>::format () && b.itemsize == sizeof (T);
677
- }
678
- };
679
-
680
- template <typename T> struct compare_buffer_info <T, detail::enable_if_t <std::is_integral<T>::value>> {
681
- static bool compare (const buffer_info& b) {
682
- return b.itemsize == sizeof (T) && (b.format == format_descriptor<T>::value ||
683
- ((sizeof (T) == sizeof (long )) && b.format == (std::is_unsigned<T>::value ? " L" : " l" )) ||
684
- ((sizeof (T) == sizeof (size_t )) && b.format == (std::is_unsigned<T>::value ? " N" : " n" )));
685
- }
686
- };
687
-
688
- NAMESPACE_END (detail)
689
-
690
609
// / RAII wrapper that temporarily clears any Python error state
691
610
struct error_scope {
692
611
PyObject *type, *value, *trace;
0 commit comments