#include "RecNode.h"
#include <map>
RecNode::RecNode(unsigned int icPeriod, unsigned long long iNumTrials) {
currPeriod = icPeriod;
sumPeriod = 0;
sumPreperiod = 0;
numPeriodic = 0;
numTrials = iNumTrials;
largestorbit = 0;
pending = true;
}
void RecNode::recordOrbit(unsigned long long orbit) {
map<unsigned long long, unsigned long long>::iterator mult;
if((mult = orbitMap.find(orbit)) != orbitMap.end()) {
mult->second++;
}
else {
orbitMap.insert(pair<unsigned long long, unsigned long long>(orbit,1));
}
}
void RecNode::recordPeriod(unsigned long long period,
unsigned long long preperiod) {
map<unsigned long long, unsigned long long>::iterator mult;
if(period > largestorbit)
largestorbit = period;
sumPeriod += period;
sumPreperiod += preperiod;
if((mult = periodMap.find(period)) != periodMap.end()) {
mult->second++;
}
else {
periodMap.insert(pair<unsigned long long, unsigned long long>(period,1));
}
if((mult = preperiodMap.find(preperiod)) != preperiodMap.end()) {
mult->second++;
}
else {
preperiodMap.insert(pair<unsigned long long,unsigned long long>(preperiod,1));
}
}
void RecNode::recordPeriodicPeriod(unsigned long long period) {
map<unsigned long long,unsigned long long>::iterator mult;
if((mult = periodicPeriodMap.find(period)) != periodicPeriodMap.end()) {
mult->second++;
}
else {
periodicPeriodMap.insert(pair<unsigned long long,unsigned long long>(period,1));
}
}
double RecNode::fractionPeriodic() {
return ((double) numPeriodic)/((double) numTrials);
}
unsigned long long RecNode::numNonPeriodic() {
return numTrials - numPeriodic;
}
double RecNode::avgPeriod() {
return ((double) sumPeriod)/((double) numTrials);
}
double RecNode::avgPreperiod() {
return ((double) sumPreperiod)/((double) numTrials);
}
double RecNode::maxPreperiod() {
map<unsigned long long, unsigned long long>::const_reverse_iterator rit;
rit = preperiodMap.rbegin();
if(rit !=
(map<unsigned long long, unsigned long long>::const_reverse_iterator)
preperiodMap.rend())
return rit->first;
else
return 0;
}
double RecNode::maxPeriod() {
map<unsigned long long,unsigned long long>::const_reverse_iterator rit;
rit = periodMap.rbegin();
if(rit !=
(map<unsigned long long,unsigned long long>::const_reverse_iterator)
periodMap.rend())
return rit->first;
else
return 0;
}