/* $Id: mergeskiptest.cc 2769 2008-02-05 18:06:19Z jiahengl $ Copyright (C) 2007 by The Regents of the University of California Redistribution of this file is permitted under the terms of the BSD license Author: Jiaheng Lu Date: 01/18/2008 */ #ifndef _mergeskiptest_h_ #define _mergeskiptest_h_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "listmerger.h" #include "utilities.h" #include "heap.h" #include "showutil.h" /* MergeSkipTest algorithm */ template > class MergeSkipTest : public ListsMerger, InvList> { public: void mergeTest(const vector &arrays, const unsigned threshold, vector &results, unsigned &totalPush, unsigned &totalPop, unsigned &uselessPop); void merge_Impl(const vector &arrays, const unsigned threshold, vector &results); }; template void MergeSkipTest:: mergeTest(const vector &arrays, const unsigned threshold, vector &results, unsigned &totalPush, unsigned &totalPop, unsigned &uselessPop) { const unsigned MAXUnsigned = ~0; unsigned numberOfInvertedList = arrays.size(); if (threshold>numberOfInvertedList) return; // no answer unsigned pointersIndex [numberOfInvertedList]; for(unsigned k=0;k= threshold) // we got the result { results.push_back(minData); //cout<< "We get a result, rule ID is " << minData <<", count is " << containerSize <at(pointersIndex[j]); if (currentValue == dataHeap[0]) uselessPop++; }//end for skipNodes(arrays,vectorIndexContainer,containerSize, dataHeap[0],pointersIndex ); insertToHeaps(dataHeap,indexHeap, sizeOfHeaps, arrays,pointersIndex, vectorIndexContainer,containerSize); totalPush = totalPush + containerSize; }//end while ( thresholdHeap[0] < MAX) deleteMAXUnsignedfromEachList(arrays); }//end merge template void MergeSkipTest:: merge_Impl(const vector &arrays, const unsigned threshold, vector &results) { } #endif