#include "symbolList.h" // Constructor SymbolList::SymbolList(int l, Alphabet* a, char* n) : alphabet(a), name(0), length(0), maxLength(l) { //printf("=>SymbolList\n"); list = new Symbol* [maxLength]; //printf(" Hey\n"); //printf(" name = %s\n",n); setName(n); //printf("<=SymbolList\n"); return; } // Constructor SymbolList::SymbolList(int l, Alphabet* a) : alphabet(a), name(0), length(0), maxLength(l) { list = new Symbol* [maxLength]; return; } // Destructor SymbolList::~SymbolList() { //for (int i=0; ihasSymbol(symbol) ) { if ( alphabet->getUnknown() != 0 ) { printf ("Error: SymbolList - symbol not in alphabet\n"); if ( length == maxLength ) { return 0; } list[length] = alphabet->getUnknown(); } return 0; } if ( length == maxLength ) { return 0; } //list[length] = symbol->clone(); list[length] = alphabet->getSymbol(symbol); length++; return 1; } // addSymbol int SymbolList::addSymbol(char c) { if ( addSymbol(alphabet->getSymbol(c)) ) { return 1; } return 0; } // addSymbols int SymbolList::addSymbols(char* str) { int len = strlen(str); int i=0; for (; igetSymbol(str[i]) == 0) { return 0; } } for (i=0; isetName\n"); if (n == 0) { //printf("<=setName\n"); return 0; } if (name != 0) { //printf(" name = %s\n",name); delete name; } int len = strlen(n); //printf(" len = %d\n",len); name = new char[len+1]; strncpy(name,n,len); name[len] = '\0'; //printf("<=setName\n"); return 1; } // symbolsEqual // Returns 1 if the Symbols are the same, element-by-element, // in both SymbolLists; returns 0, otherwise int SymbolList::symbolsEqual(SymbolList* sl) { if (getLength() != sl->getLength()) { return 0; } for (int i=0; iequals(sl->getSymbol(i)) ) { return 0; } } return 1; } // symbolsEqual // Returns 1 if the Symbols are the same, element-by-element // ignoring gaps, in both SymbolLists; returns 0, otherwise int SymbolList::symbolsWithoutGapsEqual(SymbolList* sl) { //printf("=>SymbolList::symbolsWithoutGapsEqual\n"); //printf("getLength(): %d, sl->getLength(): %d\n",getLength(),sl->getLength()); int i=0; // index for this int j=0; // index for sl while ( i < getLength() && j < sl->getLength() ) { //printf(" i: %d, j: %d\n",i,j); // if (both aren't gaps) compare and increment i & j if ( !alphabet->isGap(getSymbol(i)) && !alphabet->isGap(sl->getSymbol(j)) ) { if ( !(getSymbol(i)->equals(sl->getSymbol(j))) ) { //printf(" Nope1\n"); //printf(" symbol1[%d]: %c, symbol2[%d]: %c\n",i,getSymbol(i)->getOne(),j,sl->getSymbol(j)->getOne()); //printf(" symbol1: %s\n",toString()); //printf(" symbol2: %s\n",sl->toString()); //printf("<=SymbolList::symbolsWithoutGapsEqual\n"); return 0; } i++; j++; } else if ( alphabet->isGap(getSymbol(i)) ) i++; else if ( alphabet->isGap(sl->getSymbol(j)) ) j++; } // Make sure tail is all gaps while (i < getLength()) { if ( alphabet->isGap(getSymbol(i)) ) i++; else { //printf(" Nope2\n"); //printf("<=SymbolList::symbolsWithoutGapsEqual\n"); return 0; } } // Make sure tail is all gaps while (j < sl->getLength()) { if ( alphabet->isGap(sl->getSymbol(j)) ) j++; else { //printf(" Nope3\n"); //printf(" sl: %s\n",sl->toString()); //printf("<=SymbolList::symbolsWithoutGapsEqual\n"); return 0; } } //printf(" Yep1\n"); //printf("<=SymbolList::symbolsWithoutGapsEqual\n"); return 1; } // toString // Return a printable char* representation of the SymbolList char* SymbolList::toString() { /* char* str = new char[(length*2)]; int i=0; for (; igetOne(); str[(i*2)+1] = ' '; } i--; str[(i*2)+1] = '\0'; */ char* str = new char[(length+1)]; int i=0; for (; igetOne(); } str[i] = '\0'; return str; }