Navigation



Ignore:
Timestamp:
Dec 20, 2010, 7:36:40 PM (13 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

dbg_interactive almost complete

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/dbg_interactive/queues.i

    r638 r640  
    7777       
    7878        /* Post an item */
    79         void post(PyObject * item) {
    80                 int ret;
    81                 PyObject * i = item;
    82                
    83                 Py_XINCREF(i);
    84                 ret = fd_fifo_post($self, &i);
     79        void post(PyObject * item, char * type = NULL) {
     80                int ret;
     81                if (type) {
     82                        void * real_obj = NULL;
     83                        swig_type_info * desttype = NULL;
     84                        desttype = SWIG_TypeQuery(type);
     85                        if (!desttype) {
     86                                DI_ERROR(EINVAL, NULL, "Unable to resolve this type. Please check the form: 'struct blahbla *'");
     87                                return;
     88                        }
     89                        /* Now, get the "real" value under the shadow umbrella */
     90                        ret = SWIG_ConvertPtr(item, &real_obj, desttype, SWIG_POINTER_DISOWN );
     91                        if (!SWIG_IsOK(ret)) {
     92                                DI_ERROR(EINVAL, SWIG_ErrorType(ret), "Unable to convert the item to given type");
     93                                return;
     94                        }
     95                        ret = fd_fifo_post($self, &real_obj);
     96                } else {
     97                        PyObject * i = item;
     98                        Py_XINCREF(i);
     99                        ret = fd_fifo_post($self, &i);
     100                }
    85101                if (ret != 0) {
    86102                        DI_ERROR(ret, NULL, NULL);
     
    89105       
    90106        /* Get (blocking) */
    91         PyObject * get() {
     107        PyObject * get(char * type = NULL) {
    92108                int ret;
    93109                PyObject * i = NULL;
    94                
    95                 ret = fd_fifo_get($self, &i);
    96                 if (ret != 0) {
    97                         DI_ERROR(ret, NULL, NULL);
    98                 }
    99                
    100                 return i;
     110                void * obj = NULL;
     111                swig_type_info * desttype = NULL;
     112                if (type) {
     113                        desttype = SWIG_TypeQuery(type);
     114                        if (!desttype) {
     115                                DI_ERROR(EINVAL, NULL, "Unable to resolve this type. Please check the form: 'struct blahbla *'");
     116                                return NULL;
     117                        }
     118                }
     119               
     120                ret = fd_fifo_get($self, &obj);
     121                if (ret != 0) {
     122                        DI_ERROR(ret, NULL, NULL);
     123                }
     124               
     125                if (type) {
     126                        return SWIG_NewPointerObj(obj, desttype, 0 );
     127                } else {
     128                        i = obj;
     129                        return i;
     130                }
    101131        }
    102132       
    103133        /* TryGet (non-blocking, returns None on empty queue) */
    104         PyObject * tryget() {
     134        PyObject * tryget(char * type = NULL) {
    105135                int ret;
    106136                PyObject * i = NULL;
    107                
    108                 ret = fd_fifo_tryget($self, &i);
     137                void * obj = NULL;
     138                swig_type_info * desttype = NULL;
     139                if (type) {
     140                        desttype = SWIG_TypeQuery(type);
     141                        if (!desttype) {
     142                                DI_ERROR(EINVAL, NULL, "Unable to resolve this type. Please check the form: 'struct blahbla *'");
     143                                return NULL;
     144                        }
     145                }
     146               
     147                ret = fd_fifo_tryget($self, &obj);
    109148                if (ret == EWOULDBLOCK) {
    110149                        Py_XINCREF(Py_None);
     
    115154                }
    116155               
    117                 return i;
     156                if (type) {
     157                        return SWIG_NewPointerObj(obj, desttype, 0 );
     158                } else {
     159                        i = obj;
     160                        return i;
     161                }
    118162        }
    119163       
    120164        /* TimedGet (blocking for a while) */
    121         PyObject * timedget(long seconds) {
     165        PyObject * timedget(long seconds, char * type = NULL) {
    122166                int ret;
    123167                PyObject * i = NULL;
    124168                struct timespec ts;
     169                void * obj = NULL;
     170                swig_type_info * desttype = NULL;
     171                if (type) {
     172                        desttype = SWIG_TypeQuery(type);
     173                        if (!desttype) {
     174                                DI_ERROR(EINVAL, NULL, "Unable to resolve this type. Please check the form: 'struct blahbla *'");
     175                                return NULL;
     176                        }
     177                }
    125178               
    126179                clock_gettime(CLOCK_REALTIME, &ts);
    127180                ts.tv_sec += seconds;
    128181               
    129                 ret = fd_fifo_timedget($self, &i, &ts);
     182                ret = fd_fifo_timedget($self, &obj, &ts);
    130183                if (ret == ETIMEDOUT) {
    131184                        Py_XINCREF(Py_None);
     
    136189                }
    137190               
    138                 return i;
     191                if (type) {
     192                        return SWIG_NewPointerObj(obj, desttype, 0 );
     193                } else {
     194                        i = obj;
     195                        return i;
     196                }
    139197        }
    140198       
Note: See TracChangeset for help on using the changeset viewer.