summaryrefslogtreecommitdiffstatshomepage
path: root/py/objarray.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2015-03-06 21:35:26 +0200
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2015-03-06 21:37:28 +0200
commitcb0fc063edd428e0d7eee69190d2d31b5c9b49a0 (patch)
treef4571bd1a1b924c83399c55efb435fa1001ae3df /py/objarray.c
parent24c1000741dc6c93e2db64fbe1d69159a72b87e8 (diff)
downloadmicropython-cb0fc063edd428e0d7eee69190d2d31b5c9b49a0.tar.gz
micropython-cb0fc063edd428e0d7eee69190d2d31b5c9b49a0.zip
objmemoryview: Introduce mp_obj_new_memoryview().
This follows existing pattern for object constructor API and allows to create memoryview objects e.g. in external modules.
Diffstat (limited to 'py/objarray.c')
-rw-r--r--py/objarray.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/py/objarray.c b/py/objarray.c
index 30613fcb6e..85b73ae7f5 100644
--- a/py/objarray.c
+++ b/py/objarray.c
@@ -208,6 +208,17 @@ STATIC mp_obj_t bytearray_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t
#endif
#if MICROPY_PY_BUILTINS_MEMORYVIEW
+
+mp_obj_t mp_obj_new_memoryview(byte typecode, mp_uint_t nitems, void *items) {
+ mp_obj_array_t *self = m_new_obj(mp_obj_array_t);
+ self->base.type = &mp_type_memoryview;
+ self->typecode = typecode;
+ self->free = 0;
+ self->len = nitems;
+ self->items = items;
+ return self;
+}
+
STATIC mp_obj_t memoryview_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
// TODO possibly allow memoryview constructor to take start/stop so that one
// can do memoryview(b, 4, 8) instead of memoryview(b)[4:8] (uses less RAM)
@@ -217,12 +228,9 @@ STATIC mp_obj_t memoryview_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(args[0], &bufinfo, MP_BUFFER_READ);
- mp_obj_array_t *self = m_new_obj(mp_obj_array_t);
- self->base.type = type_in;
- self->typecode = bufinfo.typecode;
- self->free = 0;
- self->len = bufinfo.len / mp_binary_get_size('@', bufinfo.typecode, NULL); // element len
- self->items = bufinfo.buf;
+ mp_obj_array_t *self = mp_obj_new_memoryview(bufinfo.typecode,
+ bufinfo.len / mp_binary_get_size('@', bufinfo.typecode, NULL),
+ bufinfo.buf);
// test if the object can be written to
if (mp_get_buffer(args[0], &bufinfo, MP_BUFFER_RW)) {