Changeset 97 for trunk/src


Ignore:
Timestamp:
Oct 10, 2005, 9:00:37 PM (19 years ago)
Author:
dkearney
Message:

adding initial matlab bindings
few minor changes with other listed files

Location:
trunk/src
Files:
36 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/Makefile

    r93 r97  
    2828
    2929# define which programs can be made
    30 PROGS           =   librappture   \
    31                     libRpObjects  \
    32                     Rappture.Units
     30PROGS           =   librappture    \
     31                    libRpObjects   \
     32                    Rappture.Units
     33#                    RpMatlab
    3334
    3435# define our compiling environment
     
    3940DEBUG_PLUS      = -g -DDEBUG
    4041PY              = python
     42MEX             = mex
    4143
    4244LN              = ln
     
    5456CEE_SRC         = $(SRC_DIR)/cee
    5557PY_SRC          = $(SRC_DIR)/python
     58MATLAB_SRC      = $(SRC_DIR)/python
    5659
    5760LIB_INC_PREFIX  = -Wl,-rpath,$(LIB_DIR) -L$(LIB_DIR)
     
    110113
    111114
     115#### Matlab ########################################################
     116install_matlab: RpMatlab
     117        cp -d $(MATLAB_SRC)/*.mex* $(RP_INSTALL_BASE)/lib
     118
    112119
    113120# include core source files
     
    181188
    182189
     190# matlab bindings
     191INCL_MATLAB = $(INCL_CORE) $(INCL_CEE) $(INCL_RP_DEPS) $(LIB_RAPPTURE)
     192MATLAB_COMP_ARGS = RpMatlabInterface.cc $(INCL_MATLAB) $(LIB_RAPPTURE)
     193
     194RpMatlab:
     195        $(MEX) $(MATLAB_SRC)/rpLib.cc              $(MATLAB_COMP_ARGS)
     196        $(MEX) $(MATLAB_SRC)/rpXml.cc              $(MATLAB_COMP_ARGS)
     197        $(MEX) $(MATLAB_SRC)/rpElement.cc          $(MATLAB_COMP_ARGS)
     198        $(MEX) $(MATLAB_SRC)/rpElementAsObject.cc  $(MATLAB_COMP_ARGS)
     199        $(MEX) $(MATLAB_SRC)/rpElementAsType.cc    $(MATLAB_COMP_ARGS)
     200        $(MEX) $(MATLAB_SRC)/rpElementAsComp.cc    $(MATLAB_COMP_ARGS)
     201        $(MEX) $(MATLAB_SRC)/rpElementAsId.cc      $(MATLAB_COMP_ARGS)
     202        $(MEX) $(MATLAB_SRC)/rpChildren.cc         $(MATLAB_COMP_ARGS)
     203        $(MEX) $(MATLAB_SRC)/rpChildrenByType.cc   $(MATLAB_COMP_ARGS)
     204#$(MEX) $(MATLAB_SRC)/rpChildrenAsObject.cc    $(MATLAB_COMP_ARGS)
     205#$(MEX) $(MATLAB_SRC)/rpChildrenAsType.cc      $(MATLAB_COMP_ARGS)
     206#$(MEX) $(MATLAB_SRC)/rpChildrenAsComp.cc      $(MATLAB_COMP_ARGS)
     207#$(MEX) $(MATLAB_SRC)/rpChildrenAsId.cc        $(MATLAB_COMP_ARGS)
     208        $(MEX) $(MATLAB_SRC)/rpGet.cc              $(MATLAB_COMP_ARGS)
     209        $(MEX) $(MATLAB_SRC)/rpGet.cc              $(MATLAB_COMP_ARGS)
     210        $(MEX) $(MATLAB_SRC)/rpGetString.cc        $(MATLAB_COMP_ARGS)
     211        $(MEX) $(MATLAB_SRC)/rpGetDouble.cc        $(MATLAB_COMP_ARGS)
     212        $(MEX) $(MATLAB_SRC)/rpPut.cc              $(MATLAB_COMP_ARGS)
     213        $(MEX) $(MATLAB_SRC)/rpPutString.cc        $(MATLAB_COMP_ARGS)
     214        $(MEX) $(MATLAB_SRC)/rpPutStringId.cc      $(MATLAB_COMP_ARGS)
     215        $(MEX) $(MATLAB_SRC)/rpPutDouble.cc        $(MATLAB_COMP_ARGS)
     216        $(MEX) $(MATLAB_SRC)/rpPutDoubleId.cc      $(MATLAB_COMP_ARGS)
     217        $(MEX) $(MATLAB_SRC)/rpNodeComp.cc         $(MATLAB_COMP_ARGS)
     218        $(MEX) $(MATLAB_SRC)/rpNodeType.cc         $(MATLAB_COMP_ARGS)
     219        $(MEX) $(MATLAB_SRC)/rpNodeId.cc           $(MATLAB_COMP_ARGS)
     220        $(MEX) $(MATLAB_SRC)/rpResult.cc           $(MATLAB_COMP_ARGS)
     221        $(MEX) $(MATLAB_SRC)/rpDefineUnit.cc       $(MATLAB_COMP_ARGS)
     222#$(MEX) $(MATLAB_SRC)/rpDefineConv.cc          $(MATLAB_COMP_ARGS)
     223        $(MEX) $(MATLAB_SRC)/rpGetUnits.cc         $(MATLAB_COMP_ARGS)
     224        $(MEX) $(MATLAB_SRC)/rpGetUnitsName.cc     $(MATLAB_COMP_ARGS)
     225        $(MEX) $(MATLAB_SRC)/rpGetExponent.cc      $(MATLAB_COMP_ARGS)
     226        $(MEX) $(MATLAB_SRC)/rpGetBasis.cc         $(MATLAB_COMP_ARGS)
     227        $(MEX) $(MATLAB_SRC)/rpFind.cc             $(MATLAB_COMP_ARGS)
     228        $(MEX) $(MATLAB_SRC)/rpMakeMetric.cc       $(MATLAB_COMP_ARGS)
     229        $(MEX) $(MATLAB_SRC)/rpConvert.cc          $(MATLAB_COMP_ARGS)
     230        $(MEX) $(MATLAB_SRC)/rpConvertStr.cc       $(MATLAB_COMP_ARGS)
     231        $(MEX) $(MATLAB_SRC)/rpConvertObjStr.cc    $(MATLAB_COMP_ARGS)
     232        $(MEX) $(MATLAB_SRC)/rpConvertDbl.cc       $(MATLAB_COMP_ARGS)
     233        $(MEX) $(MATLAB_SRC)/rpConvertObjDbl.cc    $(MATLAB_COMP_ARGS)
     234        $(MEX) $(MATLAB_SRC)/rpAddPresets.cc       $(MATLAB_COMP_ARGS)
     235
    183236
    184237
    185238#### CLEAN UP ############################################################
    186239clean:
    187         - rm -f *.o librappture.so* libRp*.so*
     240        - rm -f *.o librappture.so* libRp*.so* rp*.mex*
    188241        - rm -rf build
  • trunk/src/core/RpBindingsDict.cc

    r93 r97  
    4646}
    4747
     48void
     49cleanLibDict () {
     50    // clean up the dictionary
     51
     52    RpDictEntry DICT_TEMPLATE_L *hPtr;
     53    // RpDictIterator DICT_TEMPLATE iter(fortObjDict_Lib);
     54    // should rp_quit clean up the dict or some function in RpBindingsCommon.h
     55    RpDictIterator DICT_TEMPLATE_L iter(ObjDict_Lib);
     56
     57    hPtr = iter.first();
     58
     59    while (hPtr) {
     60        // Py_DECREF(*(hPtr->getValue()));
     61        hPtr->erase();
     62        hPtr = iter.next();
     63    }
     64
     65    // if (fortObjDict_Lib.size()) {
     66    if (ObjDict_Lib.size()) {
     67        // probably want to change the warning sometime
     68        // printf("\nWARNING: internal dictionary is not empty..deleting\n");
     69    }
     70
     71}
     72
    4873int
    4974storeObject_UnitsStr(std::string objectName) {
     
    77102
    78103}
     104
     105void
     106cleanUnitsDict () {
     107    // clean up the dictionary
     108
     109    RpDictEntry DICT_TEMPLATE_U *hPtr;
     110    // RpDictIterator DICT_TEMPLATE iter(fortObjDict_Lib);
     111    // should rp_quit clean up the dict or some function in RpBindingsCommon.h
     112    RpDictIterator DICT_TEMPLATE_U iter(ObjDictUnits);
     113
     114    hPtr = iter.first();
     115
     116    while (hPtr) {
     117        // Py_DECREF(*(hPtr->getValue()));
     118        hPtr->erase();
     119        hPtr = iter.next();
     120    }
     121
     122    // if (fortObjDict_Lib.size()) {
     123    if (ObjDictUnits.size()) {
     124        // probably want to change the warning sometime
     125        // printf("\nWARNING: internal dictionary is not empty..deleting\n");
     126    }
     127
     128}
  • trunk/src/fortran/RpLibraryFInterface.cc

    r93 r97  
    812812    // clean up the dictionary
    813813
     814/*
    814815    RpDictEntry DICT_TEMPLATE_L *hPtr;
    815816    // RpDictIterator DICT_TEMPLATE iter(fortObjDict_Lib);
     
    830831        // printf("\nWARNING: internal dictionary is not empty..deleting\n");
    831832    }
    832 
     833*/
     834    cleanLibDict();
    833835}
    834836
  • trunk/src/python/PyRpUnits.cc

    r78 r97  
    3838    PyObject* rv = NULL;
    3939
    40     if (self->rp_unit){ 
     40    if (self->rp_unit){
    4141        rv = PyString_FromString(self->rp_unit->getUnitsName().c_str());
    4242    }
     
    5050    PyObject* rv = NULL;
    5151
    52     if (self->rp_unit){ 
     52    if (self->rp_unit){
    5353        rv = PyFloat_FromDouble(self->rp_unit->getExponent());
    5454    }
     
    102102    {"makeBasis", (PyCFunction)RpUnitsObject_makeBasis, METH_VARARGS,
    103103     "return the basis value of the value provided" },
    104    
     104
    105105    {NULL}  /* Sentinel */
    106106};
     
    183183        /*
    184184         * need to make it so user can give any number of variables in arglist
    185          * because the new argList is sent to the python conversion fxn where it 
     185         * because the new argList is sent to the python conversion fxn where it
    186186         * will be parsed in python when c++ calls the conv fxn.
    187187        PyArg_ParseTuple(args, "O!", &RpUnitsObjectType, &toUnits);
     
    204204
    205205    if (self->rp_unit){
    206         outVal = (PyObject*) self->rp_unit->convert(toUnits->rp_unit, 
    207                                                     // (void*)&inVal, 
    208                                                     (void*)argList, 
     206        outVal = (PyObject*) self->rp_unit->convert(toUnits->rp_unit,
     207                                                    // (void*)&inVal,
     208                                                    (void*)argList,
    209209                                                    &result );
    210210        if (result) {
     
    266266{
    267267    PyObject* retVal = NULL;
    268    
     268
    269269    if ((PyObject*)fxnPtr != NULL) {
    270270        retVal = PyObject_CallObject((PyObject*)fxnPtr,(PyObject*)args);
     
    294294
    295295    if (PyTuple_Size(args) > 0) {
    296         PyArg_ParseTuple(args, "O!O!O!O!",&RpUnitsObjectType, &fromUnit, 
    297                                           &RpUnitsObjectType, &toUnit, 
     296        PyArg_ParseTuple(args, "O!O!O!O!",&RpUnitsObjectType, &fromUnit,
     297                                          &RpUnitsObjectType, &toUnit,
    298298                                          &PyFunction_Type, &forwConvFxnStr,
    299299                                          &PyFunction_Type, &backConvFxnStr);
     
    319319
    320320    // make sure we get callable functions and non-null RpUnit Objects
    321     if ( PyCallable_Check(forwConvFxnStr) && 
     321    if ( PyCallable_Check(forwConvFxnStr) &&
    322322         PyCallable_Check(backConvFxnStr) &&
    323323         fromUnit->rp_unit &&
     
    350350}
    351351
    352 PyDoc_STRVAR(RpUnits_find_doc, 
     352PyDoc_STRVAR(RpUnits_find_doc,
    353353"find(name) -> RpUnitsObject \n\
    354354\n\
     
    370370        return NULL;
    371371    }
    372    
     372
    373373    foundUnits = RpUnits::find(searchUnits);
    374374
     
    378378        if (returnUnits == NULL)
    379379            return NULL;
    380        
     380
    381381        returnUnits->rp_unit = foundUnits;
    382382    }
    383383
    384384    return (PyObject*) returnUnits;
    385    
     385
    386386}
    387387
     
    404404        return NULL;
    405405    }
    406    
     406
    407407    if (units->rp_unit) {
    408408        result = RpUnits::makeMetric(units->rp_unit);
     
    412412}
    413413
    414 PyDoc_STRVAR(RpUnits_convert_doc, 
     414PyDoc_STRVAR(RpUnits_convert_doc,
    415415"convert (fromVal, to, units) -> PyString \n\
    416416\n\
     
    439439
    440440    static char *kwlist[] = {"fromVal", "to", "units", NULL};
    441    
     441
    442442    if (PyTuple_Size(args) > 0) {
    443443        // PyArg_ParseTuple(args, "ss|s", &fromVal, &to, &units);
     
    467467    if ( (!retStr.empty()) && (result == 0) ) {
    468468        if (unitsVal) {
    469             retVal = PyString_FromString(retStr.c_str());   
     469            retVal = PyString_FromString(retStr.c_str());
    470470        }
    471471        else {
    472             // convert to a double and return that if 
     472            // convert to a double and return that if
    473473            // the units were turned off
    474             tmpPyStr = PyString_FromString(retStr.c_str());
    475             if (tmpPyStr) {
    476                 Py_INCREF(tmpPyStr);
    477                 retVal = PyFloat_FromString(tmpPyStr,NULL);
    478                 Py_DECREF(tmpPyStr);
    479             }
     474            tmpPyStr = PyString_FromString(retStr.c_str());
     475            if (tmpPyStr) {
     476                    Py_INCREF(tmpPyStr);
     477                    retVal = PyFloat_FromString(tmpPyStr,NULL);
     478                    Py_DECREF(tmpPyStr);
     479            }
    480480        }
    481481    }
     
    483483        //keeping this around in case you want string returned instead of None
    484484        //if (fromVal) {
    485         //    retVal = PyString_FromString(fromVal);   
     485        //    retVal = PyString_FromString(fromVal);
    486486        //}
    487487        //else {
     
    490490        //}
    491491    }
    492    
     492
    493493    return retVal;
    494494}
     
    506506    {"defineConv", RpUnits_defineConv, METH_VARARGS,
    507507        RpUnits_defineConv_doc},
    508    
     508
    509509    {"find", RpUnits_find, METH_VARARGS,
    510510        RpUnits_find_doc},
     
    512512    {"makeMetric", RpUnits_makeMetric, METH_VARARGS,
    513513        RpUnits_makeMetric_doc},
    514    
     514
    515515    {"convert", (PyCFunction)RpUnits_convert, METH_VARARGS|METH_KEYWORDS,
    516516        RpUnits_convert_doc},
    517    
     517
    518518    {NULL,        NULL}        /* sentinel */
    519519};
     
    529529
    530530    /* Finalize the type object including setting type of the new type
    531      * object; doing it here is required for portability to Windows 
     531     * object; doing it here is required for portability to Windows
    532532     * without requiring C++. */
    533533    if (PyType_Ready(&RpUnitsObjectType) < 0)
Note: See TracChangeset for help on using the changeset viewer.