     mPruneInverseIndexAfterInstance = pPruneInverseIndexAfterInstance;
     mRemoveHashFunctionWithLessEntriesAs = pRemoveHashFunctionWithLessEntriesAs;
     mHashAlgorithm = pHashAlgorithm;
-    mSignatureStorage = new umap_uniqueElement();
-    mHash = new Hash();
+    // mSignatureStorage = new umap_uniqueElement();
+    // mHash = new Hash();
     mBlockSize = pBlockSize;
     mShingle = pShingle;
     size_t maximalFeatures = 5000;

    int maxBlocks = 65535;
    cudaDeviceProp prop;
    int whichDevice;
    cudeGetDevice(&whichDevice);
    cudaGetDeviceProperties(&prop, whichDevice)
    if (pRawData->size() > maxBlocks) {
        for (size_t i = 0; i < pRawData->size(); ++i) {
            if (mNumberOfHashFunctions > prop.maxThreadsPerBlock){
                for (size_t j = 0; j < mNumberOfHashFunctions; ++j) {
                    
                }
            }
            
        }
    } else {
        if (mNumberOfHashFunctions > prop.maxThreadsPerBlock) {
       
        } else {
            fit<<<pRawData->size(), mNumberOfHashFunctions, 0, stream>();
        }
        
    }
}

neighborhood* InverseIndexCuda::kneighbors(const umap_uniqueElement* pSignaturesMap, 

#include <omp.h>
#endif

#include "inverseIndexCuda.h"
// #include "kSizeSortedMap.h"


// class sort_map {
//   public:
//     size_t key;
//     size_t val;
// };

// bool mapSortDescByValue(const sort_map& a, const sort_map& b) {
//         return a.val > b.val;
// };

InverseIndexCuda::InverseIndexCuda(size_t pNumberOfHashFunctions, size_t pShingleSize,
                    size_t pNumberOfCores, size_t pChunkSize,
