gvsu/cs677/pa4/maximum-parsimony.cc
josh 85ce8d7ca8 creating PTrees and getting their total counts now working
git-svn-id: svn://anubis/gvsu@302 45c1a28c-8058-47b2-ae61-ca45b979098e
2008-11-30 22:16:47 +00:00

101 lines
1.9 KiB
C++

#include <iostream>
#include <string>
#include <sys/time.h>
#include <mpi.h>
#include <stdlib.h> /* exit() */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "Sequence.h"
#include "PTree.h"
using namespace std;
void usage()
{
cerr << "Usage: maximum-parsimony <sequence-file>" << endl;
exit(42);
}
string getsequence(int fd)
{
string s;
char chr;
bool saw_name = false;
for (;;)
{
int bytes_read = read(fd, &chr, 1);
if (bytes_read < 1)
{
if (s == "")
break;
else
{
cerr << "Unexpected EOF in the middle of a line!" << endl;
exit(2);
}
}
else if (chr == '\n')
{
break;
}
else if (chr == ' ' || chr == '\t')
{
saw_name = true;
}
else
{
if (saw_name)
s += chr;
}
}
return s;
}
int main(int argc, char * argv[])
{
int my_rank;
int world_size; /* the number of processes */
char * filename = NULL;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
for (int i = 1; i < argc; i++)
{
filename = argv[i];
}
if (filename == NULL)
usage();
int fd = open(filename, O_RDONLY);
if (fd < 0)
{
cerr << "Couldn't open '" << filename << "'!" << endl;
exit(1);
}
vector<Sequence *> sequences;
for (;;)
{
string seqstr = getsequence(fd);
if (seqstr == "")
break;
Sequence * seq = new Sequence(seqstr.c_str());
sequences.push_back(seq);
}
close(fd);
PTree tree(sequences);
cout << "tree:" << endl;
cout << tree;
cout << endl << "total count: " << tree.getCount() << endl;
MPI_Finalize();
return 0;
}