X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=collectorscurvedata.h;fp=collectorscurvedata.h;h=d32a9e06480c72e5a00e5eaac5a123f407d759c0;hb=0caf3fbabaa3ece404f8ce77f4c883dc5b1bf1dc;hp=0000000000000000000000000000000000000000;hpb=1b73ff67c83892a025e597dabd9df6fe7b58206a;p=mothur.git diff --git a/collectorscurvedata.h b/collectorscurvedata.h new file mode 100644 index 0000000..d32a9e0 --- /dev/null +++ b/collectorscurvedata.h @@ -0,0 +1,78 @@ +#ifndef COLLECTORSCURVEDATA_H +#define COLLECTORSCURVEDATA_H + +#include "sabundvector.hpp" +#include "sharedrabundvector.h" +#include "display.h" +#include "observable.h" + + +/***********************************************************************/ + +class CollectorsCurveData : public Observable { + +public: + CollectorsCurveData() : rank(0) {}; + + void registerDisplay(Display* o) { displays.insert(o); }; + void removeDisplay(Display* o) { displays.erase(o); delete o; }; + SAbundVector* getRankData() { return rank; }; + void rankDataChanged() { notifyDisplays(); }; + void updateRankData(SAbundVector* rv) { rank = rv; rankDataChanged(); }; + + void notifyDisplays(){ + for(set::iterator pos=displays.begin();pos!=displays.end();pos++){ + (*pos)->update(rank); + } + }; + +private: + set displays; + SAbundVector* rank; + +}; + +/***********************************************************************/ + + +class SharedCollectorsCurveData : public Observable { + +public: + SharedCollectorsCurveData() { }; //: shared1(0), shared2(0) + + void registerDisplay(Display* o) { displays.insert(o); }; + void removeDisplay(Display* o) { displays.erase(o); delete o; }; + void SharedDataChanged() { notifyDisplays(); }; + void updateSharedData(vector s, int numSeqs, int numGroupComb, bool p) { pairs = p; shared = s; NumSeqs = numSeqs; NumGroupComb = numGroupComb; SharedDataChanged(); }; + + void notifyDisplays(){ + for(set::iterator pos=displays.begin();pos!=displays.end();pos++){ + + if ((*pos)->calcNeedsAll() == true) { + (*pos)->update(shared, NumSeqs, NumGroupComb); + }else{ + + if ( ((*pos)->isCalcMultiple() == true) && ((*pos)->getAll() == true) && (!pairs) ) { + (*pos)->update(shared, NumSeqs, NumGroupComb); + }else { + vector temp; temp.push_back(shared[0]); temp.push_back(shared[1]); + shared = temp; + + (*pos)->update(shared, NumSeqs, NumGroupComb); + } + } + } + }; + +private: + set displays; + vector multiDisplays; + vector shared; + int NumSeqs, NumGroupComb; + bool pairs; +}; + +/***********************************************************************/ + +#endif +