void VectorSiteContainer::addSite(const Site& site, bool checkPositions) throw (Exception) { // Check size: if (site.size() != getNumberOfSequences()) throw SiteException("VectorSiteContainer::addSite. Site does not have the appropriate length", &site); // New site's alphabet and site container's alphabet matching verification if (site.getAlphabet()->getAlphabetType() != getAlphabet()->getAlphabetType()) { throw AlphabetMismatchException("VectorSiteContainer::addSite", getAlphabet(), site.getAlphabet()); } // Check position: if (checkPositions) { int position = site.getPosition(); // For all positions in vector : throw exception if position already exists for (size_t i = 0; i < sites_.size(); i++) { if (sites_[i]->getPosition() == position) throw SiteException("VectorSiteContainer::addSite. Site position already exists in container", &site); } } sites_.push_back(dynamic_cast<Site*>(site.clone())); }
void VectorSiteContainer::addSite(const Site& site, size_t siteIndex, int position, bool checkPositions) throw (Exception) { if (siteIndex >= getNumberOfSites()) throw IndexOutOfBoundsException("VectorSiteContainer::addSite", siteIndex, 0, getNumberOfSites() - 1); // Check size: if (site.size() != getNumberOfSequences()) throw SiteException("VectorSiteContainer::addSite. Site does not have the appropriate length", &site); // New site's alphabet and site container's alphabet matching verification if (site.getAlphabet()->getAlphabetType() != getAlphabet()->getAlphabetType()) { throw AlphabetMismatchException("VectorSiteContainer::addSite", getAlphabet(), site.getAlphabet()); } // Check position: if (checkPositions) { // For all positions in vector : throw exception if position already exists for (size_t i = 0; i < sites_.size(); i++) { if (sites_[i]->getPosition() == position) throw SiteException("VectorSiteContainer::addSite. Site position already exists in container", &site); } } Site* copy = dynamic_cast<Site*>(site.clone()); copy->setPosition(position); sites_.insert(sites_.begin() + siteIndex, copy); }
void VectorSiteContainer::setSite(size_t pos, const Site& site, bool checkPositions) throw (Exception) { if (pos >= getNumberOfSites()) throw IndexOutOfBoundsException("VectorSiteContainer::setSite.", pos, 0, getNumberOfSites() - 1); // Check size: if (site.size() != getNumberOfSequences()) throw SiteException("AlignedSequenceContainer::addSite. Site does not have the appropriate length", &site); // New site's alphabet and site container's alphabet matching verification if (site.getAlphabet()->getAlphabetType() != getAlphabet()->getAlphabetType()) throw AlphabetMismatchException("VectorSiteContainer::setSite", getAlphabet(), site.getAlphabet()); // Check position: if (checkPositions) { int position = site.getPosition(); // For all positions in vector : throw exception if position already exists for (size_t i = 0; i < sites_.size(); i++) { if (sites_[i]->getPosition() == position) throw SiteException("VectorSiteContainer::setSite: Site position already exists in container", &site); } } delete sites_[pos]; sites_[pos] = dynamic_cast<Site*>(site.clone()); }