int tellstdfunc::stdREPORTLAY::execute() { bool recursive = getBoolValue(); std::string cellname = getStringValue(); WordList ull; DATC->lockDB(); bool success = DATC->TEDLIB()->collect_usedlays(cellname, recursive, ull); DATC->unlockDB(); telldata::ttlist* tllull = DEBUG_NEW telldata::ttlist(telldata::tn_int); if (success) { ull.sort();ull.unique(); std::ostringstream ost; ost << "used layers: {"; for(WordList::const_iterator CL = ull.begin() ; CL != ull.end();CL++ ) ost << " " << *CL << " "; ost << "}"; tell_log(console::MT_INFO, ost.str()); for(WordList::const_iterator CL = ull.begin() ; CL != ull.end();CL++ ) tllull->add(DEBUG_NEW telldata::ttint(*CL)); ull.clear(); } else { std::string news = "cell \""; news += cellname; news += "\" doesn't exists"; tell_log(console::MT_ERROR,news); } OPstack.push(tllull); return EXEC_NEXT; }
void laydata::tdtlibrary::collect_usedlays(WordList& laylist) const { for (cellList::const_iterator CC = _cells.begin(); CC != _cells.end(); CC++) { CC->second->collect_usedlays(NULL, false,laylist); } laylist.sort(); laylist.unique(); if ( (0 < laylist.size()) && (0 == laylist.front()) ) laylist.pop_front(); }
int main(int argc, char *argv[]) { const char* INPUT_PATH = argv[1]; const char* OUTPUT_PATH = argv[2]; const char* QUIET = argv[3]; /* Check arugments are present */ if (!INPUT_PATH || !OUTPUT_PATH) { printf(ANSI_RED "WordCounter: Arguments Missing.\n" ANSI_RESET); printf("Usage: WordCounter input-path output-path [-q]\n"); exit(EXIT_FAILURE); } /* Try and open file */ FILE *fp = fopen(argv[1], "r"); if (fp == NULL) { printf(ANSI_RED "Failed to open file: %s\n" ANSI_RESET, argv[1]); exit(EXIT_FAILURE); } /* Iterate text file adding words */ WordList *wl = WordList_new(); while(!feof(fp)){ char *word = malloc(sizeof(char)); fscanf(fp, "%s", word); remove_punc(word); if(!wl->increment(wl, word)){ wl->add(wl, word); } } fclose(fp); wl->sort(wl, true); /* If not quiet then print the results */ if (!QUIET) { wl->print(wl); } wl->save(wl, argv[2]); /* Free memory */ for (int i=0; i<wl->used; i++) { free(wl->words[i].chars); } free(wl->words); free(wl); printf(ANSI_GREEN "Completed, %d words saved to '%s'\n" ANSI_RESET, wl->used, argv[2]); }