Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
pybind11
Commits
987be18f
Commit
987be18f
authored
Sep 04, 2016
by
Wenzel Jakob
Committed by
GitHub
Sep 04, 2016
Browse files
Merge pull request #379 from nevion/buffer_info
Buffer info improvements
parents
85f07e18
10d46e7f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
8 deletions
+29
-8
include/pybind11/common.h
include/pybind11/common.h
+29
-8
No files found.
include/pybind11/common.h
View file @
987be18f
...
@@ -203,15 +203,15 @@ enum class return_value_policy : uint8_t {
...
@@ -203,15 +203,15 @@ enum class return_value_policy : uint8_t {
/// Information record describing a Python buffer object
/// Information record describing a Python buffer object
struct
buffer_info
{
struct
buffer_info
{
void
*
ptr
;
// Pointer to the underlying storage
void
*
ptr
=
nullptr
;
// Pointer to the underlying storage
size_t
itemsize
;
// Size of individual items in bytes
size_t
itemsize
=
0
;
// Size of individual items in bytes
size_t
size
;
// Total number of entries
size_t
size
=
0
;
// Total number of entries
std
::
string
format
;
// For homogeneous buffers, this should be set to format_descriptor<T>::format()
std
::
string
format
;
// For homogeneous buffers, this should be set to format_descriptor<T>::format()
size_t
ndim
;
// Number of dimensions
size_t
ndim
=
0
;
// Number of dimensions
std
::
vector
<
size_t
>
shape
;
// Shape of the tensor (1 entry per dimension)
std
::
vector
<
size_t
>
shape
;
// Shape of the tensor (1 entry per dimension)
std
::
vector
<
size_t
>
strides
;
// Number of entries between adjacent entries (for each per dimension)
std
::
vector
<
size_t
>
strides
;
// Number of entries between adjacent entries (for each per dimension)
buffer_info
()
:
ptr
(
nullptr
),
view
(
nullptr
)
{}
buffer_info
(){}
buffer_info
(
void
*
ptr
,
size_t
itemsize
,
const
std
::
string
&
format
,
size_t
ndim
,
buffer_info
(
void
*
ptr
,
size_t
itemsize
,
const
std
::
string
&
format
,
size_t
ndim
,
const
std
::
vector
<
size_t
>
&
shape
,
const
std
::
vector
<
size_t
>
&
strides
)
const
std
::
vector
<
size_t
>
&
shape
,
const
std
::
vector
<
size_t
>
&
strides
)
...
@@ -225,9 +225,9 @@ struct buffer_info {
...
@@ -225,9 +225,9 @@ struct buffer_info {
:
buffer_info
(
ptr
,
itemsize
,
format
,
1
,
std
::
vector
<
size_t
>
{
size
},
:
buffer_info
(
ptr
,
itemsize
,
format
,
1
,
std
::
vector
<
size_t
>
{
size
},
std
::
vector
<
size_t
>
{
itemsize
})
{
}
std
::
vector
<
size_t
>
{
itemsize
})
{
}
buffer_info
(
Py_buffer
*
view
)
buffer_info
(
Py_buffer
*
view
,
bool
ownview
=
true
)
:
ptr
(
view
->
buf
),
itemsize
((
size_t
)
view
->
itemsize
),
size
(
1
),
format
(
view
->
format
),
:
ptr
(
view
->
buf
),
itemsize
((
size_t
)
view
->
itemsize
),
size
(
1
),
format
(
view
->
format
),
ndim
((
size_t
)
view
->
ndim
),
shape
((
size_t
)
view
->
ndim
),
strides
((
size_t
)
view
->
ndim
),
view
(
view
)
{
ndim
((
size_t
)
view
->
ndim
),
shape
((
size_t
)
view
->
ndim
),
strides
((
size_t
)
view
->
ndim
),
view
(
view
)
,
ownview
(
ownview
)
{
for
(
size_t
i
=
0
;
i
<
(
size_t
)
view
->
ndim
;
++
i
)
{
for
(
size_t
i
=
0
;
i
<
(
size_t
)
view
->
ndim
;
++
i
)
{
shape
[
i
]
=
(
size_t
)
view
->
shape
[
i
];
shape
[
i
]
=
(
size_t
)
view
->
shape
[
i
];
strides
[
i
]
=
(
size_t
)
view
->
strides
[
i
];
strides
[
i
]
=
(
size_t
)
view
->
strides
[
i
];
...
@@ -235,12 +235,33 @@ struct buffer_info {
...
@@ -235,12 +235,33 @@ struct buffer_info {
}
}
}
}
buffer_info
(
const
buffer_info
&
)
=
delete
;
buffer_info
&
operator
=
(
const
buffer_info
&
)
=
delete
;
buffer_info
(
buffer_info
&&
other
){
(
*
this
)
=
std
::
move
(
other
);
}
buffer_info
&
operator
=
(
buffer_info
&&
rhs
){
ptr
=
rhs
.
ptr
;
itemsize
=
rhs
.
itemsize
;
size
=
rhs
.
size
;
format
=
std
::
move
(
rhs
.
format
);
ndim
=
rhs
.
ndim
;
shape
=
std
::
move
(
rhs
.
shape
);
strides
=
std
::
move
(
rhs
.
strides
);
std
::
swap
(
view
,
rhs
.
view
);
std
::
swap
(
ownview
,
rhs
.
ownview
);
return
*
this
;
}
~
buffer_info
()
{
~
buffer_info
()
{
if
(
view
)
{
PyBuffer_Release
(
view
);
delete
view
;
}
if
(
view
&&
ownview
)
{
PyBuffer_Release
(
view
);
delete
view
;
}
}
}
private:
private:
Py_buffer
*
view
=
nullptr
;
Py_buffer
*
view
=
nullptr
;
bool
ownview
=
false
;
};
};
NAMESPACE_BEGIN
(
detail
)
NAMESPACE_BEGIN
(
detail
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment