Changeset 3664:a94208b437f4 in orange


Ignore:
Timestamp:
05/17/07 19:12:08 (7 years ago)
Author:
miha <miha.stajdohar@…>
Branch:
default
Convert:
1f692ecd04f71020b2ea9e127f7bf112e0a572d1
Message:

fixed crashes when creating multiple instances of this class

Location:
source/orangeom
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • source/orangeom/networkoptimization.cpp

    r3660 r3664  
    2424TNetworkOptimization::TNetworkOptimization() 
    2525{ 
     26    //cout << "constructor" << endl; 
    2627    import_array(); 
    2728     
     
    3435    height = 1000; 
    3536    links = NULL; 
     37    pos = NULL; 
    3638    temperature = sqrt((double)(width*width + height*height)) / 10; 
    3739} 
     
    4749TNetworkOptimization::~TNetworkOptimization() 
    4850{ 
     51    //cout << "destructor" << endl; 
    4952    free_Links(); 
    5053    free_Carrayptrs(pos); 
     
    99102} 
    100103 
    101 void TNetworkOptimization::fruchtermanReingold(int steps) 
     104int TNetworkOptimization::fruchtermanReingold(int steps) 
    102105{ 
    103106    /* 
     
    117120        { 
    118121            cerr << "Couldn't allocate memory (disp[])\n"; 
    119             exit(1); 
     122            return 1; 
    120123        } 
    121124    } 
     
    216219    disp = NULL; 
    217220    //dumpCoordinates(); 
     221    return 0; 
    218222} 
    219223 
     
    242246/* ==== Free a double *vector (vec of pointers) ========================== */  
    243247void TNetworkOptimization::free_Carrayptrs(double **v)  { 
     248 
    244249    free((char*) v); 
    245250} 
     
    277282 
    278283 
    279 void TNetworkOptimization::setGraph(TGraphAsList *graph) 
    280 { 
     284int TNetworkOptimization::setGraph(TGraphAsList *graph) 
     285{ 
     286    //cout << "-1" << endl; 
    281287    free_Links(); 
    282288    free_Carrayptrs(pos); 
     
    286292    dims[0] = nVertices; 
    287293    dims[1] = 2; 
    288  
     294    //cout << "0" << endl; 
    289295    coors = (PyArrayObject *) PyArray_FromDims(2, dims, NPY_DOUBLE); 
    290296    pos = pymatrix_to_Carrayptrs(coors); 
     
    302308            int u = edge->vertex; 
    303309            links = (int**)realloc(links, (nLinks + 1) * sizeof(int)); 
    304  
     310            //cout << "1" << endl; 
    305311            if (links == NULL) 
    306312            { 
    307313                cerr << "Couldn't allocate memory (links 1)\n"; 
    308                 exit(1); 
     314                return 1; 
    309315            } 
    310316 
    311317            links[nLinks] = (int *)malloc(2 * sizeof(int)); 
    312  
     318            //cout << "2" << endl; 
    313319            if (links[nLinks] == NULL) 
    314320            { 
    315321                cerr << "Couldn't allocate memory (links[] 1)\n"; 
    316                 exit(1); 
     322                return 1; 
    317323            } 
    318324 
     
    327333 
    328334                links = (int**)realloc(links, (nLinks + 1) * sizeof (int)); 
    329  
     335                //cout << "3" << endl; 
    330336                if (links == NULL) 
    331337                { 
    332338                    cerr << "Couldn't allocate memory (links 2)\n"; 
    333                     exit(1); 
     339                    return 1; 
    334340                } 
    335341 
    336342                links[nLinks] = (int *)malloc(2 * sizeof(int)); 
    337                  
     343                //cout << "4" << endl; 
    338344                if (links[nLinks] == NULL) 
    339345                { 
    340346                    cerr << "Couldn't allocate memory (links[] 2)\n"; 
    341                     exit(1); 
     347                    return 1; 
    342348                } 
    343349 
     
    350356        } 
    351357    } 
     358    //cout << "5" << endl; 
     359    return 0; 
    352360} 
    353361 
     
    420428 
    421429    CAST_TO(TNetworkOptimization, graphOpt); 
    422     cout << "networkoptimization.cpp/setGraph: setting graph..." << endl; 
    423     graphOpt->setGraph(graph); 
    424     cout << "done." << endl; 
     430    //cout << "networkoptimization.cpp/setGraph: setting graph..." << endl; 
     431    if (graphOpt->setGraph(graph) > 0) 
     432    { 
     433        PYERROR(PyExc_SystemError, "setGraph failed", NULL); 
     434    } 
     435    //cout << "done." << endl; 
    425436    RETURN_NONE; 
    426437} 
     
    437448 
    438449    graph->temperature = temperature; 
    439     graph->fruchtermanReingold(steps); 
     450     
     451    if (graph->fruchtermanReingold(steps) > 0) 
     452    { 
     453        PYERROR(PyExc_SystemError, "fruchtermanReingold failed", NULL); 
     454    } 
    440455     
    441456    return Py_BuildValue("d", graph->temperature); 
     
    509524                    { 
    510525                        file.close(); 
    511             PYERROR(PyExc_SystemError, "invalid file format", NULL); 
     526                        PYERROR(PyExc_SystemError, "invalid file format", NULL); 
    512527                    } 
    513528                } 
     
    522537                        { 
    523538                            file.close(); 
    524               PYERROR(PyExc_SystemError, "invalid file format", NULL); 
     539                            PYERROR(PyExc_SystemError, "invalid file format", NULL); 
    525540                        } 
    526541 
     
    530545                    { 
    531546                        file.close(); 
    532             PYERROR(PyExc_SystemError, "invalid file format", NULL); 
     547                        PYERROR(PyExc_SystemError, "invalid file format", NULL); 
    533548                    } 
    534549 
     
    549564        domain->addVariable(new TStringVariable("bw")); 
    550565        table = new TExampleTable(domain); 
    551     wtable = table; 
     566        wtable = table; 
    552567 
    553568        // read vertex descriptions 
     
    571586                { 
    572587                    file.close(); 
    573           PYERROR(PyExc_SystemError, "invalid file format", NULL); 
     588                    PYERROR(PyExc_SystemError, "invalid file format", NULL); 
    574589                } 
    575590 
     
    609624                            { 
    610625                                file.close(); 
    611                 PYERROR(PyExc_SystemError, "invalid file format", NULL); 
     626                                PYERROR(PyExc_SystemError, "invalid file format", NULL); 
    612627                            } 
    613628 
     
    622637                            { 
    623638                                file.close(); 
    624                 PYERROR(PyExc_SystemError, "invalid file format", NULL); 
     639                                PYERROR(PyExc_SystemError, "invalid file format", NULL); 
    625640                            } 
    626641 
     
    635650                            { 
    636651                                file.close(); 
    637                 PYERROR(PyExc_SystemError, "invalid file format", NULL); 
     652                                PYERROR(PyExc_SystemError, "invalid file format", NULL); 
    638653                            } 
    639654 
     
    678693                            { 
    679694                                file.close(); 
    680                 PYERROR(PyExc_SystemError, "invalid file format", NULL); 
     695                                PYERROR(PyExc_SystemError, "invalid file format", NULL); 
    681696                            } 
    682697 
     
    716731                        { 
    717732                            file.close(); 
    718               PYERROR(PyExc_SystemError, "invalid file format", NULL); 
     733                            PYERROR(PyExc_SystemError, "invalid file format", NULL); 
    719734                        } 
    720735 
  • source/orangeom/networkoptimization.hpp

    r3659 r3664  
    5757     
    5858    void random(); 
    59     void fruchtermanReingold(int steps); 
     59    int fruchtermanReingold(int steps); 
    6060    double getTemperature() {return temperature;} 
    6161    void setTemperature(double t) {temperature = t;} 
    62     void setGraph(TGraphAsList *graph); 
     62    int setGraph(TGraphAsList *graph); 
    6363    void dumpCoordinates(); 
    6464 
Note: See TracChangeset for help on using the changeset viewer.