示例#1
0
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;
}
示例#2
0
//------------------------------------------------------------------------------
//
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;
}
示例#3
0
/**
 * 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);
}
示例#4
0
//------------------------------------------------------------------------------
//
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);
}
示例#5
0
//------------------------------------------------------------------------------
//
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);
}
示例#6
0
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);
    }
  }
}
示例#7
0
//------------------------------------------------------------------------------
//
COutStreamBin::~COutStreamBin()
{
    assert_with_message(m_dataPrivate == NULL, "Write mode file isn't closed");
}