#include "utils/TeraSort.h"
#include "utils/type.h"
#include "triple.h"

double sampRate=0.001;

class TripleSort:public TeraWorker<string>
{
	char* tmp;

	public:
		TripleSort():TeraWorker<string>(sampRate, false){
			tmp = new char[TRIPLE_STRBUF_SIZE];
		}

		~TripleSort() {delete tmp;}

		virtual TeraItem<string>* toVertex(char* line)
		{
			TeraItem<string>* v=new TeraItem<string>;
			v->content=line;
			statement o;
			o.parseTriple(line);
			v->key+=o.subject;
			return v;
		}

	    virtual void toline(TeraItem<string>* v)
	    {
	    	sprintf(tmp, "%s\n", v->content.c_str());
	    	write(tmp);
	    }
};

int main(int argc, char* argv[]){
	WorkerParams param;
	param.input_path="/dblp_nt";
	param.output_path="/dblp_sorted";
	param.force_write=true;
	param.native_dispatcher=false;
	TripleSort worker;
	worker.run(param);
	return 0;
}