summaryrefslogtreecommitdiff
path: root/tools/dataProvider.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/dataProvider.h')
-rw-r--r--tools/dataProvider.h81
1 files changed, 65 insertions, 16 deletions
diff --git a/tools/dataProvider.h b/tools/dataProvider.h
index 028980e..a3f3d34 100644
--- a/tools/dataProvider.h
+++ b/tools/dataProvider.h
@@ -55,6 +55,70 @@ public:
}
};
+class RidList{
+private:
+ int n;
+ std::vector<DataEntry*> uniq;
+ std::vector<DataEntry*> other;
+public:
+ void clear(){
+ uniq.clear();
+ other.clear();
+ }
+ void setfSize(int fsize){n=fsize;}
+ int getfSize(){return n;}
+ void addEntry(DataEntry* d){
+ int ext=false;
+ for (int i=0;i<uniq.size();++i)
+ if (uniq[i]->qid==d->qid)
+ {
+ ext = true;
+ d->rank = i;
+ }
+ if (ext)
+ other.push_back(d);
+ else
+ uniq.push_back(d);
+ }
+ int getqSize()
+ {
+ return (int)(uniq.size()+other.size()-1);
+ }
+ int getuSize()
+ {
+ return (int)uniq.size();
+ }
+ int getSize()
+ {
+ return getuSize()*getqSize();
+ }
+ Eigen::VectorXd getVec(int x){
+ int a,b,n=getqSize();
+ a=x/n;
+ b=x%n;
+ Eigen::VectorXd vec = uniq[a]->feature;
+ if (b<a)
+ vec=vec-uniq[b]->feature;
+ else
+ if (b<uniq.size()-1)
+ vec=vec-uniq[b+1]->feature;
+ else
+ vec=vec-other[b-uniq.size()+1]->feature;
+ return vec.cwiseAbs();
+ };
+ double getL(int x){
+ int a,b,n=(int)(uniq.size()+other.size()-1);
+ a=x/n;
+ b=x%n;
+ if (b<uniq.size()-1)
+ return -1;
+ else
+ if (std::fabs(other[b-uniq.size()+1]->rank - a) < 1e-5)
+ return 1;
+ return -1;
+ };
+};
+
class DataProvider //Virtual base class for data input
{
protected:
@@ -63,22 +127,7 @@ public:
DataProvider():eof(false){};
bool EOFile(){return eof;}
- void getAllDataSet(DataList &out){\
- out.clear();
- DataList buf;
- while (!EOFile())
- {
- getDataSet(buf);
- // won't work as data are discarded with every call to getDataSet
- // out.getData().insert(out.getData().end(),buf.getData().begin(),buf.getData().end());
- for (int i=0;i<buf.getSize();++i)
- {
- out.addEntry(out.copyEntry(buf.getData()[i]));
- }
- out.setfSize(buf.getfSize());
- }
- buf.clear();
- }
+ virtual void getAllDataSet(RidList &out) = 0;
virtual int getDataSet(DataList &out) = 0;
virtual int open()=0;
virtual int close()=0;