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; }
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(); }