@@ -15,31 +15,31 @@ NAMESPACE_BEGIN(pybind11)
1515
1616// / Information record describing a Python buffer object
1717struct buffer_info {
18- void *ptr = nullptr ; // Pointer to the underlying storage
19- size_t itemsize = 0 ; // Size of individual items in bytes
20- size_t size = 0 ; // Total number of entries
21- std::string format; // For homogeneous buffers, this should be set to format_descriptor<T>::format()
22- size_t ndim = 0 ; // Number of dimensions
23- std::vector<size_t > shape; // Shape of the tensor (1 entry per dimension)
18+ void *ptr = nullptr ; // Pointer to the underlying storage
19+ ssize_t itemsize = 0 ; // Size of individual items in bytes
20+ ssize_t size = 0 ; // Total number of entries
21+ std::string format; // For homogeneous buffers, this should be set to format_descriptor<T>::format()
22+ ssize_t ndim = 0 ; // Number of dimensions
23+ std::vector<ssize_t > shape; // Shape of the tensor (1 entry per dimension)
2424 std::vector<ssize_t > strides; // Number of entries between adjacent entries (for each per dimension)
2525
2626 buffer_info () { }
2727
28- buffer_info (void *ptr, size_t itemsize, const std::string &format, size_t ndim,
29- detail::any_container<size_t > shape_in, detail::any_container<ssize_t > strides_in)
28+ buffer_info (void *ptr, ssize_t itemsize, const std::string &format, ssize_t ndim,
29+ detail::any_container<ssize_t > shape_in, detail::any_container<ssize_t > strides_in)
3030 : ptr (ptr), itemsize (itemsize), size (1 ), format (format), ndim (ndim),
3131 shape (std::move (shape_in)), strides (std::move (strides_in)) {
32- if (ndim != shape.size () || ndim != strides.size ())
32+ if (ndim != ( ssize_t ) shape.size () || ndim != ( ssize_t ) strides.size ())
3333 pybind11_fail (" buffer_info: ndim doesn't match shape and/or strides length" );
34- for (size_t i = 0 ; i < ndim; ++i)
34+ for (size_t i = 0 ; i < ( size_t ) ndim; ++i)
3535 size *= shape[i];
3636 }
3737
38- buffer_info (void *ptr, size_t itemsize, const std::string &format, size_t size)
38+ buffer_info (void *ptr, ssize_t itemsize, const std::string &format, ssize_t size)
3939 : buffer_info (ptr, itemsize, format, 1 , {size}, {itemsize}) { }
4040
4141 explicit buffer_info (Py_buffer *view, bool ownview = true )
42- : buffer_info (view->buf , ( size_t ) view->itemsize , view->format , ( size_t ) view->ndim ,
42+ : buffer_info (view->buf , view->itemsize , view->format , view->ndim ,
4343 {view->shape , view->shape + view->ndim }, {view->strides , view->strides + view->ndim }) {
4444 this ->view = view;
4545 this ->ownview = ownview;
@@ -78,13 +78,13 @@ NAMESPACE_BEGIN(detail)
7878
7979template <typename T, typename SFINAE = void> struct compare_buffer_info {
8080 static bool compare (const buffer_info& b) {
81- return b.format == format_descriptor<T>::format () && b.itemsize == sizeof (T);
81+ return b.format == format_descriptor<T>::format () && b.itemsize == ( ssize_t ) sizeof (T);
8282 }
8383};
8484
8585template <typename T> struct compare_buffer_info <T, detail::enable_if_t <std::is_integral<T>::value>> {
8686 static bool compare (const buffer_info& b) {
87- return b.itemsize == sizeof (T) && (b.format == format_descriptor<T>::value ||
87+ return ( size_t ) b.itemsize == sizeof (T) && (b.format == format_descriptor<T>::value ||
8888 ((sizeof (T) == sizeof (long )) && b.format == (std::is_unsigned<T>::value ? " L" : " l" )) ||
8989 ((sizeof (T) == sizeof (size_t )) && b.format == (std::is_unsigned<T>::value ? " N" : " n" )));
9090 }
0 commit comments