Пример #1
0
int
GPD_2DPrimPoly::load(istream &is, int binary)
{
    int		 cnt;
    char	 cflag;

    if (binary)
    {
	char tflag;

	if (!UTread(is, &tflag))	return -1;
	if (!UTread(is, &nVtx))		return -1;
	if (!UTread(is, &cflag))	return -1;

	if (tflag == 1)	trim();
	else		untrim();
    }
    else
    {
	char ttoken[GPD_BUFSIZ];

	is >> ttoken;
	is >> nVtx >> cflag; 
	if (!is) return -1;

	if (!strcmp(ttoken, "trim"))	trim();
	else				untrim();
    }

    if (cflag == '<')	close();
    else		open();

    vtxList = new GPD_2DVertex[nVtx]; 

    if (loadPrivate(is,binary) < 0) return -1;

    for (cnt = 0; cnt < nVtx; cnt++)
	if (getParent()->loadVertex(is, vtxList[cnt], binary) < 0) return -1;

    if (!binary) // Get junk at end of line:
	is.ignore(GPD_BUFSIZ-1, '\n');
    if (!is) return -1;
    return 0;
}
Пример #2
0
void Sequence::readFile(char* filename, const int flags) {
    FILE* file = fopen(filename, "rt");

    fseek(file, 0L, SEEK_END);
    long fileSize = ftell(file);
    rewind(file);

    char line[500];
    fgets(line, sizeof(line), file);
    char tmp[500];
    sscanf(line, ">%s", tmp);
    name = tmp;
	char* tok=strtok(tmp, "|");
	for (int i=1; i<4 && tok != NULL; i++) {
		tok = strtok (NULL, "|");
	}
	if (tok == NULL) {
		accession = name;
	} else {
		accession = tok;
	}
	
    data_vector.reserve(fileSize);

    int i;
    int pos=0;
	char complement_map[256];
	for (int i=0; i<256; i++) {
		complement_map[i] = toupper(i);
	}
	if (flags & FLAG_COMPLEMENT) {
		complement_map['A'] = complement_map['a'] = 'T';
		complement_map['T'] = complement_map['t'] = 'A';
		complement_map['C'] = complement_map['c'] = 'G';
		complement_map['G'] = complement_map['g'] = 'C';
	}
	
    while ((i=fgetc(file)) != EOF) {
        if (i == '\r' || i == '\n' || i == ' ') continue;
		if ((flags & FLAG_CLEAR_N) && ((char)i == 'N' || (char)i == 'n')) continue;
        pos++;
		data_vector.push_back(complement_map[(char)i]);
    }
    this->original_len = data_vector.size();
    data_vector.push_back((char)0);
	original_forward_data = &data_vector[0];

    // TODO otimizar usando cuda
	original_reverse_data = (char*)malloc(this->original_len+1);
	for (int i=0; i<this->original_len; i++) {
		original_reverse_data[this->original_len-1-i] = original_forward_data[i];
    }
	original_reverse_data[this->original_len] = 0;

    fclose(file);
	
	if (flags & FLAG_REVERSE) {
		char* temp = original_reverse_data;
		original_reverse_data = original_forward_data;
		original_forward_data = temp;
	}

	untrim();
}