static const char *i_directorio_proyectos(const ArrString *parametros, enum i_hacer_t *tipo_hacer) { const char *directorio_base; enum i_hacer_t tipo_hacer_loc; unsigned long i, num; assert_no_null(tipo_hacer); num = arrcad_numElementos(parametros); directorio_base = NULL; tipo_hacer_loc = i_HACER_NORMAL; for (i = 0; i < num; i++) { const char *cadena; cadena = arrcad_Get(parametros, i); if (strbas_equalsStringWithoutMatchCase(cadena, "all") == true) { assert_with_message(tipo_hacer_loc == i_HACER_NORMAL, "Sólo all o clean, pero no ambos"); tipo_hacer_loc = i_HACER_ALL; } else if (strbas_equalsStringWithoutMatchCase(cadena, "clean") == true) { assert_with_message(tipo_hacer_loc == i_HACER_NORMAL, "Sólo all o clean, pero no ambos"); tipo_hacer_loc = i_HACER_CLEAN; } else { assert_with_message(directorio_base == NULL, "Sólo un directorio base"); directorio_base = cadena; } } *tipo_hacer = tipo_hacer_loc; if (directorio_base == NULL) return strbas_getEnv("MERLIN_PROJECTS"); else return directorio_base; }
//------------------------------------------------------------------------------ // static void prv_deleteArrayOpened(void) { unsigned long num; assert_no_null(s_filesOpened); num = s_filesOpened->size(); assert_with_message(num == 0, "Files opened"); delete s_filesOpened; }
/** * Main function with all logic * deal with threads and other things */ static void process(const char * filename, unsigned long k, unsigned long t) { unsigned long n, i, start, end, rest, addition; Multiseq * multiseq; BestKVals * kval; MultiseqTreadSpace* threads; MultiseqTread* thread; assert_with_message(filename != NULL, "filename can not be NULL"); multiseq = muliseq_new(filename); kval = best_k_vals_new(k, compare, sizeof(MultiseqPaar)); threads = multiseq_threads(t); n = rest = muliseq_items(multiseq); thread = NULL; while ((thread = multiseq_thread_next(threads)) != NULL) { addition = calculate_addition(t, thread->id, rest); start = calculate_start(t, thread->id, rest, addition); end = rest; rest = calculate_rest(start); thread->i = start; thread->j = end; thread->multiseq = multiseq; thread->compare = eval_unit_edist; pthread_create_or_die(&thread->identifier, eval_seqrange_thread, thread); } while ((thread = multiseq_thread_next(threads)) != NULL) { pthread_join(thread->identifier, NULL); } n = muliseq_paars(multiseq); for (i = 0; i < n; i++) { const MultiseqPaar * element = muliseq_paar(multiseq, i); best_k_vals_insert(kval, element); } best_k_vals_reset_iter(kval); for (i = 0; i < k; i++) { const MultiseqPaar * element = (MultiseqPaar *) best_k_vals_next(kval); printf("%lu\t%lu\t%lu\n", element->id1, element->id2, element->distance); } best_k_vals_delete(kval); multiseq_threads_delete(threads); muliseq_delete(multiseq); }
//------------------------------------------------------------------------------ // static void prv_registerFile(class CArray<PrvFileOpened> *filesOpened, const char *nameFile, FILE *file) { bool existFileOpened; PrvFileOpened *fileOpened; assert_no_null(filesOpened); existFileOpened = filesOpened->existOnlyOneElement<char>(nameFile, prv_isNameFile, NULL); assert_with_message(existFileOpened == false, "File is opened"); fileOpened = new PrvFileOpened(nameFile, file); filesOpened->add(fileOpened); }
//------------------------------------------------------------------------------ // static void prv_unregisterFile(class CArray<PrvFileOpened> *filesOpened, FILE *file) { bool existFileOpened; PrvFileOpened *fileOpened; unsigned long ind; assert_no_null(filesOpened); existFileOpened = filesOpened->existOnlyOneElement<FILE>(file, prv_isFILE, &ind); assert_with_message(existFileOpened == true, "File is not opened"); fileOpened = filesOpened->get(ind); assert_no_null(fileOpened); filesOpened->erase(ind); }
static void eval_seqrange(Multiseq * multiseq, const unsigned long i, const unsigned long j, EvalMultiseq compare) { unsigned long p, q; const unsigned long n = muliseq_items(multiseq); assert_with_message(multiseq != NULL, "Multiseq can not be NULL"); for (p = i; p <= j; p++) { for (q = p + 1; q < n; q++) { const MultiseqItem * item1 = muliseq_item(multiseq, p); const MultiseqItem * item2 = muliseq_item(multiseq, q); const unsigned long distance = compare( (const unsigned char *) item1->start, item1->length, (const unsigned char *) item2->start, item2->length); muliseq_fill_paar(multiseq, distance, p, q); } } }
//------------------------------------------------------------------------------ // COutStreamBin::~COutStreamBin() { assert_with_message(m_dataPrivate == NULL, "Write mode file isn't closed"); }