std::vector<Cluster*>* ClusterMerger::MergeClustersIfRequired(std::vector<Cluster*>* clusters)
{
	std::vector<Cluster*>::iterator iter;
	std::vector<Cluster*>::iterator iter1;
	//check each against every other
	//check for 2 instances of each given comparing to several :(
	//iterate through each cluster, then iterate through each other cluster 
	Cluster* c1;
	Cluster* c2;
	a:
	for (iter=clusters->begin();iter<clusters->end();iter++) {
		c1 = (Cluster*)*iter;
		for (iter1=clusters->begin();iter1<clusters->end();iter1++) {
			c2 = (Cluster*)*iter1;
			if (!(c1==c2)) {
				if (IsMergeRequired(c1,c2)) {
					Cluster* merged = c1->Merge(c2);
					remove(clusters, c1);
					remove(clusters, c2);
					clusters->push_back(merged);
					goto a;
				}
			}
		}
	}

	return clusters;
}
void ClusterMerger::MergeclusterdatsIfRequired(clusterdat** clusterdats, int* count){
	
	int index = 0;
	int index1 = 0;
	a:
		for (index=0;index<settings->clusterdatcount;index++) {
			if (clusterdats[index]) {
				for (index1=0;index1<settings->clusterdatcount;index1++) {
					if (clusterdats[index1]) {
						if (!(clusterdats[index]==clusterdats[index1])) {
							if (IsMergeRequired(clusterdats[index],clusterdats[index1])) {
								cfnc.Merge(clusterdats[index],clusterdats[index1]);
								*count--;
								clusterdats[index1]=0;
								int check = 0;
								while (check<(settings->clusterdatcount-1)) {
									if (clusterdats[check]==0) {
										clusterdats[check] = clusterdats[check+1];
									}
									check++;
								}
								goto a;
							}
						}
					}
				}
			}
		}
	}