/* * KeyListOpsMethods.h * * Created on: Feb 6, 2014 * Author: nek3d */ #ifndef KEYLISTOPSMETHODS_H_ #define KEYLISTOPSMETHODS_H_ #include #include //for pair #include "string.h" #include #include "RecordKeyVector.h" using namespace std; class KeyListOpsMethods { public: KeyListOpsMethods(); KeyListOpsMethods(RecordKeyVector *keyList, int column = 1); ~KeyListOpsMethods(); void setIsBam(bool isBam) { _isBam = isBam; } void setKeyList(RecordKeyVector *keyList) { _keyList = keyList; } void setColumn(int col) { _column = col; } void setNullValue(const string & nullVal) { _nullVal = nullVal; } const string &getNullValue() const { return _nullVal; } void setDelimStr(const string &delimStr) { _delimStr = delimStr; } const string &getDelimStr() const { return _delimStr; } // return the total of the values in the vector double getSum(); // return the average value in the vector double getMean(); // return the standard deviation double getStddev(); // return the sample standard deviation double getSampleStddev(); // return the median value in the vector double getMedian(); // return the most common value in the vector const string &getMode(); // return the least common value in the vector const string &getAntiMode(); // return the minimum element of the vector double getMin(); // return the maximum element of the vector double getMax(); // return the minimum absolute value of the vector double getAbsMin(); // return the maximum absolute value of the vector double getAbsMax(); // return the count of element in the vector uint32_t getCount(); // return a the count of _unique_ elements in the vector uint32_t getCountDistinct(); // return only those elements that occur once const string &getDistinctOnly(); // as distinct, but sorted numerically. const string &getDistinctSortNum(bool ascending = true); // as distinct, but sorted numerically, descending // return a delimiter-separated list of elements const string & getCollapse(const string & delimiter = ","); // return a concatenation of all elements in the vector const string & getConcat(); // return a comma-separated list of the _unique_ elements const string & getDistinct(); // return a histogram of values and their freqs. in desc. order of frequency const string & getFreqDesc(); // return a histogram of values and their freqs. in asc. order of frequency const string & getFreqAsc(); // return the first value in the list const string & getFirst(); // return the last value in the list const string & getLast(); bool nonNumErrFlagSet() const { return _nonNumErrFlag; } const string &getErrMsg() const { return _errMsg; } void resetNonNumErrFlag() { _nonNumErrFlag = false; _errMsg.clear(); } private: RecordKeyVector *_keyList; int _column; string _nullVal; string _delimStr; string _retStr; RecordKeyVector _nullKeyList; //this has to exist just so we can initialize _iter, below. RecordKeyVector::iterator_type _iter; // Some methods need to put values into a vector, mostly for sorting. vector _numArray; vector _qsArray; typedef map freqMapType; freqMapType _freqMap; freqMapType::iterator _freqIter; typedef enum { UNSORTED, ASC, DESC} SORT_TYPE; bool _nonNumErrFlag; string _errMsg; bool _isBam; typedef multimap > histAscType; typedef multimap > histDescType; void init(); const string &getColVal(); double getColValNum(); bool empty() { return _keyList->empty(); } void begin() { _iter = _keyList->begin(); } bool end() { return _iter == _keyList->end(); } void next() { _iter = _keyList->next(); } void toArray(bool useNum, SORT_TYPE sortVal = UNSORTED); void sortArray(bool useNum, bool ascOrder); void makeFreqMap(); }; #endif /* KEYLISTOPSMETHODS_H_ */