1919#include " plasma/common.h"
2020#include " plasma/protocol.h"
2121#include " plasma/client.h"
22-
2322#include " plasma/extension.h"
2423
24+ #include < algorithm>
25+ #include < vector>
26+
2527PyObject *PlasmaOutOfMemoryError;
2628PyObject *PlasmaObjectExistsError;
2729
@@ -52,16 +54,16 @@ PyObject *PyPlasma_disconnect(PyObject *self, PyObject *args) {
5254 * is still active (if the context is NULL) or if it is closed (if the context
5355 * is (void*) 0x1). This is neccessary because the primary pointer of the
5456 * capsule cannot be NULL. */
55- PyCapsule_SetContext (client_capsule, ( void *) 0x1 );
57+ PyCapsule_SetContext (client_capsule, reinterpret_cast < void *>( 0x1 ) );
5658 Py_RETURN_NONE;
5759}
5860
5961PyObject *PyPlasma_create (PyObject *self, PyObject *args) {
6062 PlasmaClient *client;
6163 ObjectID object_id;
62- long long size;
64+ Py_ssize_t size;
6365 PyObject *metadata;
64- if (!PyArg_ParseTuple (args, " O&O&LO " , PyObjectToPlasmaClient, &client,
66+ if (!PyArg_ParseTuple (args, " O&O&nO " , PyObjectToPlasmaClient, &client,
6567 PyStringToUniqueID, &object_id, &size, &metadata)) {
6668 return NULL ;
6769 }
@@ -71,7 +73,7 @@ PyObject *PyPlasma_create(PyObject *self, PyObject *args) {
7173 }
7274 uint8_t *data;
7375 Status s = client->Create (object_id, size,
74- ( uint8_t *) PyByteArray_AsString (metadata),
76+ reinterpret_cast < uint8_t *>( PyByteArray_AsString (metadata) ),
7577 PyByteArray_Size (metadata), &data);
7678 if (s.IsPlasmaObjectExists ()) {
7779 PyErr_SetString (PlasmaObjectExistsError,
@@ -88,9 +90,9 @@ PyObject *PyPlasma_create(PyObject *self, PyObject *args) {
8890 ARROW_CHECK (s.ok ());
8991
9092#if PY_MAJOR_VERSION >= 3
91- return PyMemoryView_FromMemory (( char *) data, (Py_ssize_t) size, PyBUF_WRITE);
93+ return PyMemoryView_FromMemory (reinterpret_cast < char *>(data), size, PyBUF_WRITE);
9294#else
93- return PyBuffer_FromReadWriteMemory (( void *) data, (Py_ssize_t) size);
95+ return PyBuffer_FromReadWriteMemory (reinterpret_cast < void *>(data), size);
9496#endif
9597}
9698
@@ -105,7 +107,7 @@ PyObject *PyPlasma_hash(PyObject *self, PyObject *args) {
105107 bool success = plasma_compute_object_hash (client, object_id, digest);
106108 if (success) {
107109 PyObject *digest_string =
108- PyBytes_FromStringAndSize (( char *) digest, kDigestSize );
110+ PyBytes_FromStringAndSize (reinterpret_cast < char *>( digest) , kDigestSize );
109111 return digest_string;
110112 } else {
111113 Py_RETURN_NONE;
@@ -137,16 +139,15 @@ PyObject *PyPlasma_release(PyObject *self, PyObject *args) {
137139PyObject *PyPlasma_get (PyObject *self, PyObject *args) {
138140 PlasmaClient *client;
139141 PyObject *object_id_list;
140- long long timeout_ms;
141- if (!PyArg_ParseTuple (args, " O&OL " , PyObjectToPlasmaClient, &client,
142+ Py_ssize_t timeout_ms;
143+ if (!PyArg_ParseTuple (args, " O&On " , PyObjectToPlasmaClient, &client,
142144 &object_id_list, &timeout_ms)) {
143145 return NULL ;
144146 }
145147
146148 Py_ssize_t num_object_ids = PyList_Size (object_id_list);
147- ObjectID *object_ids = (ObjectID *) malloc (sizeof (ObjectID) * num_object_ids);
148- ObjectBuffer *object_buffers =
149- (ObjectBuffer *) malloc (sizeof (ObjectBuffer) * num_object_ids);
149+ ObjectID *object_ids = new ObjectID[num_object_ids];
150+ ObjectBuffer *object_buffers = new ObjectBuffer[num_object_ids];
150151
151152 for (int i = 0 ; i < num_object_ids; ++i) {
152153 PyStringToUniqueID (PyList_GetItem (object_id_list, i), &object_ids[i]);
@@ -156,39 +157,35 @@ PyObject *PyPlasma_get(PyObject *self, PyObject *args) {
156157 ARROW_CHECK_OK (
157158 client->Get (object_ids, num_object_ids, timeout_ms, object_buffers));
158159 Py_END_ALLOW_THREADS;
159- free ( object_ids) ;
160+ delete[] object_ids;
160161
161162 PyObject *returns = PyList_New (num_object_ids);
162163 for (int i = 0 ; i < num_object_ids; ++i) {
163164 if (object_buffers[i].data_size != -1 ) {
164165 /* The object was retrieved, so return the object. */
165166 PyObject *t = PyTuple_New (2 );
167+ Py_ssize_t data_size = static_cast <Py_ssize_t>(object_buffers[i].data_size );
168+ Py_ssize_t metadata_size = static_cast <Py_ssize_t>(object_buffers[i].metadata_size );
166169#if PY_MAJOR_VERSION >= 3
167- PyTuple_SetItem (
168- t, 0 , PyMemoryView_FromMemory (
169- (char *) object_buffers[i].data ,
170- (Py_ssize_t) object_buffers[i].data_size , PyBUF_READ));
171- PyTuple_SetItem (
172- t, 1 , PyMemoryView_FromMemory (
173- (char *) object_buffers[i].metadata ,
174- (Py_ssize_t) object_buffers[i].metadata_size , PyBUF_READ));
170+ char *data = reinterpret_cast <char *>(object_buffers[i].data );
171+ char *metadata = reinterpret_cast <char *>(object_buffers[i].metadata );
172+ PyTuple_SetItem (t, 0 , PyMemoryView_FromMemory (data, data_size, PyBUF_READ));
173+ PyTuple_SetItem (t, 1 , PyMemoryView_FromMemory (metadata, metadata_size, PyBUF_READ));
175174#else
176- PyTuple_SetItem (
177- t, 0 , PyBuffer_FromMemory ((void *) object_buffers[i].data ,
178- (Py_ssize_t) object_buffers[i].data_size ));
179- PyTuple_SetItem (t, 1 , PyBuffer_FromMemory (
180- (void *) object_buffers[i].metadata ,
181- (Py_ssize_t) object_buffers[i].metadata_size ));
175+ void *data = reinterpret_cast <void *>(object_buffers[i].data );
176+ void *metadata = reinterpret_cast <void *>(object_buffers[i].metadata );
177+ PyTuple_SetItem (t, 0 , PyBuffer_FromMemory (data, data_size));
178+ PyTuple_SetItem (t, 1 , PyBuffer_FromMemory (metadata, metadata_size));
182179#endif
183180 PyList_SetItem (returns, i, t);
184181 } else {
185182 /* The object was not retrieved, so just add None to the list of return
186183 * values. */
187- Py_XINCREF (Py_None);
184+ Py_INCREF (Py_None);
188185 PyList_SetItem (returns, i, Py_None);
189186 }
190187 }
191- free ( object_buffers) ;
188+ delete[] object_buffers;
192189 return returns;
193190}
194191
@@ -220,21 +217,21 @@ PyObject *PyPlasma_fetch(PyObject *self, PyObject *args) {
220217 return NULL ;
221218 }
222219 Py_ssize_t n = PyList_Size (object_id_list);
223- ObjectID *object_ids = (ObjectID *) malloc ( sizeof ( ObjectID) * n) ;
220+ ObjectID *object_ids = new ObjectID[n] ;
224221 for (int i = 0 ; i < n; ++i) {
225222 PyStringToUniqueID (PyList_GetItem (object_id_list, i), &object_ids[i]);
226223 }
227- ARROW_CHECK_OK (client->Fetch (( int ) n , object_ids));
228- free ( object_ids) ;
224+ ARROW_CHECK_OK (client->Fetch (static_cast < int >(n) , object_ids));
225+ delete[] object_ids;
229226 Py_RETURN_NONE;
230227}
231228
232229PyObject *PyPlasma_wait (PyObject *self, PyObject *args) {
233230 PlasmaClient *client;
234231 PyObject *object_id_list;
235- long long timeout;
232+ Py_ssize_t timeout;
236233 int num_returns;
237- if (!PyArg_ParseTuple (args, " O&OLi " , PyObjectToPlasmaClient, &client,
234+ if (!PyArg_ParseTuple (args, " O&Oni " , PyObjectToPlasmaClient, &client,
238235 &object_id_list, &timeout, &num_returns)) {
239236 return NULL ;
240237 }
@@ -262,8 +259,7 @@ PyObject *PyPlasma_wait(PyObject *self, PyObject *args) {
262259 return NULL ;
263260 }
264261
265- ObjectRequest *object_requests =
266- (ObjectRequest *) malloc (sizeof (ObjectRequest) * n);
262+ std::vector<ObjectRequest> object_requests (n);
267263 for (int i = 0 ; i < n; ++i) {
268264 ARROW_CHECK (PyStringToUniqueID (PyList_GetItem (object_id_list, i),
269265 &object_requests[i].object_id ) == 1 );
@@ -273,8 +269,8 @@ PyObject *PyPlasma_wait(PyObject *self, PyObject *args) {
273269 * run. */
274270 int num_return_objects;
275271 Py_BEGIN_ALLOW_THREADS;
276- ARROW_CHECK_OK (client->Wait (( int ) n, object_requests, num_returns,
277- ( uint64_t ) timeout, num_return_objects));
272+ ARROW_CHECK_OK (client->Wait (n, object_requests. data () , num_returns,
273+ timeout, num_return_objects));
278274 Py_END_ALLOW_THREADS;
279275
280276 int num_to_return = std::min (num_return_objects, num_returns);
@@ -287,9 +283,9 @@ PyObject *PyPlasma_wait(PyObject *self, PyObject *args) {
287283 }
288284 if (object_requests[i].status == ObjectStatus_Local ||
289285 object_requests[i].status == ObjectStatus_Remote) {
290- PyObject *ready =
291- PyBytes_FromStringAndSize (( char *) &object_requests[i].object_id ,
292- sizeof (object_requests[i].object_id ));
286+ PyObject *ready = PyBytes_FromStringAndSize (
287+ reinterpret_cast < char *>( &object_requests[i].object_id ) ,
288+ sizeof (object_requests[i].object_id ));
293289 PyList_SetItem (ready_ids, num_returned, ready);
294290 PySet_Discard (waiting_ids, ready);
295291 num_returned += 1 ;
@@ -307,14 +303,14 @@ PyObject *PyPlasma_wait(PyObject *self, PyObject *args) {
307303
308304PyObject *PyPlasma_evict (PyObject *self, PyObject *args) {
309305 PlasmaClient *client;
310- long long num_bytes;
311- if (!PyArg_ParseTuple (args, " O&L " , PyObjectToPlasmaClient, &client,
306+ Py_ssize_t num_bytes;
307+ if (!PyArg_ParseTuple (args, " O&n " , PyObjectToPlasmaClient, &client,
312308 &num_bytes)) {
313309 return NULL ;
314310 }
315311 int64_t evicted_bytes;
316- ARROW_CHECK_OK (client->Evict (( int64_t ) num_bytes, evicted_bytes));
317- return PyLong_FromLong (( long ) evicted_bytes);
312+ ARROW_CHECK_OK (client->Evict (static_cast < int64_t >( num_bytes) , evicted_bytes));
313+ return PyLong_FromSsize_t ( static_cast <Py_ssize_t>( evicted_bytes) );
318314}
319315
320316PyObject *PyPlasma_delete (PyObject *self, PyObject *args) {
@@ -388,7 +384,7 @@ PyObject *PyPlasma_receive_notification(PyObject *self, PyObject *args) {
388384 PyTuple_SetItem (t, 2 , PyLong_FromLong (object_info->metadata_size ()));
389385 }
390386
391- free ( notification) ;
387+ delete[] notification;
392388 return t;
393389}
394390
0 commit comments