#ifndef DATAPROV_H #define DATAPROV_H #include #include "../tools/easylogging++.h" #include #include // TODO decide how to construct training data // One possible way for training data: // Matrix composed of an array of feature vectors // Labels are composed of linked list, such as // 6,3,4,0,5,0,0 // => 0->6 | 1->3 | 2->4->5 // How to compensate for non exhaustive labeling? // Use -1 to indicate not yet labeled data // -1s will be excluded from training typedef Eigen::MatrixXd DataSet; typedef Eigen::VectorXd Labels; typedef struct DataEntry{ int qid; double rank; Eigen::VectorXd feature; } DataEntry; class DataList{ private: int n; std::list data; public: int getSize(){return data.size();} void addEntry(DataEntry d){data.push_front(d);} void setfSize(int fsize){n=fsize;} int getfSize(){return n;} }; class DataProvider //Virtual base class for data input { protected: int size; int attrSize; bool eof; public: DataProvider():eof(false){}; int getSize(){ return size; } int getAttrSize(){ return attrSize; } bool EOFile(){return eof;} virtual int getDataSet(DataList &out) = 0; virtual int open()=0; virtual int close()=0; }; #endif