/* * 'unshadow' the items until we're the last then unload and delete */ void OPluginLibraryHolder::deref( QLibrary* lib ) { if ( !lib ) return; QString str = lib->library(); /* no need to check if the lib was inserted or such */ (void) m_libs.take( str ); if ( !m_libs[str] ) { lib->unload(); delete lib; } }
int DoIt(const char* outFile, const char* regFile, const char* maskFile, const char* resultFile, int mask_x, int mask_y, int mask_size_x, int mask_size_y) { // Read maskfile FILE *mfp = fopen(maskFile, "r"); // FILE *mfp=fopen("/project/geoaida/tmp/mask.pbm","r"); if (!mfp) { fprintf(stderr, "mask file %s not found\n", maskFile); return 1; } GaMaskImage mask; mask.read(mfp); fclose(mfp); // read regionfile // QFile rfp("/project/geoaida/tmp/reglist.dest"); QFile rfp(regFile); if (!rfp.open(IO_ReadOnly)) { fprintf(stderr, "regionfile %s not founed\n", regFile); return 1; } // Read and process regions QList < ArgDict > regionList; regionList.setAutoDelete(true); MLParser parser(&rfp); QString keywords[] = { "region", "" }; const MLTagTable nodeTagTable(keywords); const int TOK_REGION = 1; int tag; do { tag = parser.tag(nodeTagTable); ArgDict *args; switch (tag) { case TOK_REGION:{ args = parser.args(); if (processRegion (*args, mask, mask_x, mask_y, mask_size_x, mask_size_y)) regionList.append(args); else delete args; break; } case -TOK_REGION: break; case MLParser::END_OF_FILE: break; default:{ args = parser.args(); delete args; qDebug("Unknown keyword %s in line %d", parser.lasttagstr().latin1(), parser.lineNumber()); break; } } } while (tag != MLParser::END_OF_FILE); rfp.close(); // Write labels if (outFile) { if (labelImageDict.count() > 1) { fprintf(stderr, "regionmask: Cannot generate multiple labelfiles\n"); return 1; } else { if (regionList.count()>0) { ArgDict *dict = regionList.first(); QString *oldfile = (*dict)["file"]; QString *labelfile = new QString(); if (resultFile) labelfile->sprintf("%s", resultFile); else labelfile->sprintf("%s.plm", outFile); LabelImage *im = labelImageDict.take(*oldfile); labelImageDict.replace(*labelfile, im); QListIterator < ArgDict > it(regionList); for (; it.current(); ++it) { ArgDict *argDict = it.current(); assert(argDict); argDict->replace("file", labelfile); } } } rfp.setName(outFile); } else { printf("regionmask: overwriting %s\n",regFile); outFile = regFile; } QDictIterator < LabelImage > git(labelImageDict); if (regionList.count()>0) { for (; git.current(); ++git) { LabelImage *im = git.current(); qDebug("Writing %s", git.currentKey().latin1()); im->image.write(git.currentKey().latin1()); } } // Write regions if (!rfp.open(IO_WriteOnly)) { fprintf(stderr, "cannot open regionfile %s for writing\n", outFile); return 1; } if (regionList.count()>0) { QListIterator < ArgDict > it(regionList); QTextStream ts(&rfp); for (; it.current(); ++it) { ArgDict *argDict = it.current(); assert(argDict); ts << "<region "; ts << (*argDict); ts << " />" << endl; } } rfp.close(); labelImageDict.setAutoDelete(true); labelImageDict.clear(); regionList.setAutoDelete(true); return 0; }
int DoIt(const char* outFile, const char* regFile, const char* maskFile, const char* resultFile, int mask_x, int mask_y, int mask_size_x, int mask_size_y) { // Read maskfile FILE *mfp = fopen(maskFile, "r"); // FILE *mfp=fopen("/project/geoaida/tmp/mask.pbm","r"); if (!mfp) { fprintf(stderr, "mask file %s not found\n", maskFile); return 1; } GaMaskImage mask; mask.read(mfp); fclose(mfp); QList<ArgDict> *regionSourceList=readRegionFile(regFile); if (!regionSourceList) return 1; QList<ArgDict> regionList; // Process regions for (ArgDict* arg = regionSourceList->first(); arg; arg=regionSourceList->next()) { ArgDict* args=new ArgDict(*arg); if (processRegion (*args, mask, mask_x, mask_y, mask_size_x, mask_size_y)) regionList.append(args); else delete args; } // Write labels QFile rfp(outFile ? outFile : regFile); if (outFile) { if (labelImageDict.count() > 1) { fprintf(stderr, "regionmask: Cannot generate multiple labelfiles\n"); return 1; } else { if (regionList.count()>0) { ArgDict *dict = regionList.first(); QString *oldfile = (*dict)["file"]; QString *labelfile = new QString(); if (resultFile) labelfile->sprintf("%s", resultFile); else labelfile->sprintf("%s.plm", outFile); LabelImage *im = labelImageDict.take(*oldfile); labelImageDict.replace(*labelfile, im); QListIterator < ArgDict > it(regionList); for (; it.current(); ++it) { ArgDict *argDict = it.current(); assert(argDict); argDict->replace("file", labelfile); } } } } else { printf("regionmask: overwriting %s\n",regFile); outFile = regFile; } QDictIterator < LabelImage > git(labelImageDict); if (regionList.count()>0) { for (; git.current(); ++git) { LabelImage *im = git.current(); qDebug("Writing %s", git.currentKey().latin1()); im->image.write(git.currentKey().latin1()); } } // Write regions if (!rfp.open(IO_WriteOnly)) { fprintf(stderr, "cannot open regionfile %s for writing\n", outFile); return 1; } if (regionList.count()>0) { QListIterator < ArgDict > it(regionList); QTextStream ts(&rfp); for (; it.current(); ++it) { ArgDict *argDict = it.current(); assert(argDict); ts << "<region "; ts << (*argDict); ts << " />" << endl; } } rfp.close(); labelImageDict.setAutoDelete(true); labelImageDict.clear(); regionList.setAutoDelete(true); return 0; }