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
bf2510ee
Commit
bf2510ee
authored
Jul 18, 2016
by
Ivan Smirnov
Browse files
Make buffer_info::as_pybuffer a memoryview ctor
parent
41c33990
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
22 additions
and
27 deletions
+22
-27
include/pybind11/common.h
include/pybind11/common.h
+0
-24
include/pybind11/pytypes.h
include/pybind11/pytypes.h
+22
-3
No files found.
include/pybind11/common.h
View file @
bf2510ee
...
@@ -232,30 +232,6 @@ struct buffer_info {
...
@@ -232,30 +232,6 @@ struct buffer_info {
if
(
view
)
{
PyBuffer_Release
(
view
);
delete
view
;
}
if
(
view
)
{
PyBuffer_Release
(
view
);
delete
view
;
}
}
}
Py_buffer
&
as_pybuffer
()
const
{
static
Py_buffer
buf
{
};
// Py_buffer uses signed sizes, strides and shape!..
static
std
::
vector
<
Py_ssize_t
>
py_strides
{
};
static
std
::
vector
<
Py_ssize_t
>
py_shape
{
};
buf
.
buf
=
ptr
;
buf
.
itemsize
=
(
Py_ssize_t
)
itemsize
;
buf
.
format
=
const_cast
<
char
*>
(
format
.
c_str
());
buf
.
ndim
=
(
int
)
ndim
;
buf
.
len
=
(
Py_ssize_t
)
size
;
py_strides
.
clear
();
py_shape
.
clear
();
for
(
size_t
i
=
0
;
i
<
ndim
;
++
i
)
{
py_strides
.
push_back
((
Py_ssize_t
)
strides
[
i
]);
py_shape
.
push_back
((
Py_ssize_t
)
shape
[
i
]);
}
buf
.
strides
=
py_strides
.
data
();
buf
.
shape
=
py_shape
.
data
();
buf
.
suboffsets
=
nullptr
;
buf
.
readonly
=
false
;
buf
.
internal
=
nullptr
;
return
buf
;
}
private:
private:
Py_buffer
*
view
=
nullptr
;
Py_buffer
*
view
=
nullptr
;
};
};
...
...
include/pybind11/pytypes.h
View file @
bf2510ee
...
@@ -572,10 +572,29 @@ public:
...
@@ -572,10 +572,29 @@ public:
class
memoryview
:
public
object
{
class
memoryview
:
public
object
{
public:
public:
memoryview
(
const
buffer_info
&
info
)
:
memoryview
(
&
info
.
as_pybuffer
())
{
}
memoryview
(
const
buffer_info
&
info
)
{
static
Py_buffer
buf
{
};
// Py_buffer uses signed sizes, strides and shape!..
static
std
::
vector
<
Py_ssize_t
>
py_strides
{
};
static
std
::
vector
<
Py_ssize_t
>
py_shape
{
};
buf
.
buf
=
info
.
ptr
;
buf
.
itemsize
=
(
Py_ssize_t
)
info
.
itemsize
;
buf
.
format
=
const_cast
<
char
*>
(
info
.
format
.
c_str
());
buf
.
ndim
=
(
int
)
info
.
ndim
;
buf
.
len
=
(
Py_ssize_t
)
info
.
size
;
py_strides
.
clear
();
py_shape
.
clear
();
for
(
size_t
i
=
0
;
i
<
info
.
ndim
;
++
i
)
{
py_strides
.
push_back
((
Py_ssize_t
)
info
.
strides
[
i
]);
py_shape
.
push_back
((
Py_ssize_t
)
info
.
shape
[
i
]);
}
buf
.
strides
=
py_strides
.
data
();
buf
.
shape
=
py_shape
.
data
();
buf
.
suboffsets
=
nullptr
;
buf
.
readonly
=
false
;
buf
.
internal
=
nullptr
;
memoryview
(
Py_buffer
*
view
)
m_ptr
=
PyMemoryView_FromBuffer
(
&
buf
);
:
object
(
PyMemoryView_FromBuffer
(
view
),
false
)
{
if
(
!
m_ptr
)
if
(
!
m_ptr
)
pybind11_fail
(
"Unable to create memoryview from buffer descriptor"
);
pybind11_fail
(
"Unable to create memoryview from buffer descriptor"
);
}
}
...
...
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