
00001 #ifndef MSAHASHTABLE_H 00002 #define MSAHASHTABLE_H 00003 00004 #include "ParFUM.h" 00005 #include "ParFUM_internals.h" 00006 00007 typedef UniqElemList<Hashnode> Hashtuple; 00008 typedef MSA::MSA1D<Hashtuple,DefaultListEntry<Hashtuple,true>,MSA_DEFAULT_ENTRIES_PER_PAGE> MSA1DHASH; 00009 00010 class MsaHashtable 00011 { 00012 MSA1DHASH msa; 00013 bool initHandleGiven; 00014 00015 public: 00016 class Read; class Add; 00017 friend class Read; friend class Add; 00018 Add getInitialAdd(); 00019 void pup(PUP::er &p) { p|msa; } 00020 void enroll(int n) { msa.enroll(n); } 00021 00022 class Read : private MSA::MSARead<MSA1DHASH> 00023 { 00024 public: 00025 using MSA::MSARead<MSA1DHASH>::get; 00026 00027 friend class MsaHashtable; 00028 friend class MsaHashtable::Add; 00029 void print(); 00030 Add syncToAdd(); 00031 00032 private: 00033 Read(MSA1DHASH *m) : MSA::MSARead<MSA1DHASH>(m) { } 00034 }; 00035 00036 class Add : private MSA::MSAAccum<MSA1DHASH> 00037 { 00038 using MSA::MSAAccum<MSA1DHASH>::accumulate; 00039 friend class MsaHashtable; 00040 friend class MsaHashtable::Read; 00041 Add(MSA1DHASH *m) : MSA::MSAAccum<MSA1DHASH>(m) { } 00042 public: 00043 int addTuple(int *tuple, int nodesPerTuple, int chunk, int elementNo); 00044 Read syncToRead(); 00045 }; 00046 00047 00048 MsaHashtable(int _numSlots,int numWorkers) 00049 : msa(_numSlots, numWorkers), initHandleGiven(false) { } 00050 MsaHashtable(){}; 00051 }; 00052 00053 00054 00055 #endif // MSAHASHTABLE_H
1.5.5