Skip to content

Commit 105b96f

Browse files
committed
make size optional
make size optional when a pre-allocated buffer is passed
1 parent 92a4d24 commit 105b96f

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

src/pa_ringbuffer.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,20 +73,30 @@ class from the standard library can be used.
7373
7474
:param elementsize: The size of a single data element in bytes.
7575
:type elementsize: int
76-
:param size: The number of elements in the buffer (must be a
77-
power of 2).
76+
:param size: The number of elements in the buffer (must be a power
77+
of 2). Can be omitted if a pre-allocated buffer is passed.
7878
:type size: int
79-
:param buffer: optional pre-allocated buffer to use with RingBuffer
79+
:param buffer: optional pre-allocated buffer to use with RingBuffer.
8080
:type buffer: buffer
8181
8282
"""
8383

84-
def __init__(self, elementsize, size, buffer=None):
84+
def __init__(self, elementsize, size=None, buffer=None):
8585
self._ptr = self._ffi.new('PaUtilRingBuffer*')
8686
if buffer is None:
87+
if size is None:
88+
raise ValueError(
89+
"size is required when buffer parameter is not specified")
8790
self._data = self._ffi.new('unsigned char[]', size * elementsize)
8891
else:
89-
self._data = self._ffi.from_buffer(buffer)
92+
try:
93+
data = self._ffi.from_buffer(buffer)
94+
except TypeError:
95+
data = buffer
96+
size, rest = divmod(self._ffi.sizeof(data), elementsize)
97+
if rest:
98+
raise ValueError('buffer size must be multiple of elementsize')
99+
self._data = data
90100

91101
res = self._lib.PaUtil_InitializeRingBuffer(
92102
self._ptr, elementsize, size, self._data)

0 commit comments

Comments
 (0)