• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

DistNearestNeighbour.h

Go to the documentation of this file.
00001 /* 
00002  * File:   DistNearestNeighbour.h
00003  * Author: fermat
00004  *
00005  * Created on 20. Januar 2010, 11:32
00006  */
00007 
00008 #ifndef _DISTNEARESTNEIGHBOUR_H
00009 #define _DISTNEARESTNEIGHBOUR_H
00010 
00011 #include"Distributor.h"
00012 #include"ImprovedMap.h"
00013 #include<set>
00014 #include<map>
00015 #include<tr1/unordered_map>
00016 
00017 #define VDRIVE_DNN_DDT std::tr1::unordered_map<uint64_t, Disk*>
00018 #define VDRIVE_DNN_DDTit std::tr1::unordered_map<uint64_t, Disk*>::iterator
00019 #define VDRIVE_DNN_MULT std::tr1::unordered_map<uint64_t, int32_t>
00020 #define VDRIVE_DNN_MULTit std::tr1::unordered_map<uint64_t, int32_t>::iterator
00021 
00022 namespace VDRIVE {
00023 
00030     class DistNearestNeighbour : public Distributor {
00031     public:
00032 
00038         DistNearestNeighbour(xercesc::DOMElement* data);
00039 
00043         DistNearestNeighbour(int argc, char** argv);
00044 
00051         DistNearestNeighbour(bool staticNNCopies, int32_t nnCopies, int32_t nnCopiesFactor);
00052 
00058         DistNearestNeighbour(const DistNearestNeighbour& orig);
00059 
00063         virtual ~DistNearestNeighbour();
00064 
00068         virtual std::list<Disk*>* placeExtent(int64_t virtualVolumeId, int64_t position) ;
00069 
00075         virtual void setDisksMulti(std::list<Disk*>* disks, VDRIVE_DNN_MULT *multiplicity);
00076 
00080         virtual void setConfiguration(std::list<Disk*>* disks, int64_t extentsize, int32_t copies);
00081 
00085         virtual void setDisks(std::list<Disk*>* disks);
00086 
00090         virtual xercesc::DOMElement* toXML(xercesc::DOMDocument* doc) const;
00091 
00095         virtual std::list<Disk*>* getDisks() const;
00096 
00100         virtual int64_t getExtentsize() const {
00101             return extentsize;
00102         }
00103 
00107         virtual int32_t getCopies() const {
00108             return copies;
00109         }
00110 
00116         static std::string getXMLRootType() {
00117             return std::string("NearestNeighbour");
00118         }
00119 
00120     private:
00124         int64_t extentsize;
00125 
00129         int32_t copies;
00130 
00135         int32_t nnCopies;
00136 
00140         int32_t nnCopiesFactor;
00141 
00146         uint64_t cutFactor;
00147 
00151         std::list<Disk*>* disks;
00152 
00156         ImprovedMap *keyFinder;
00157 
00161         std::set<uint64_t> *keys;
00162 
00168         VDRIVE_DNN_DDT *diskDistribution;
00169 
00174         bool staticNNCopies;
00175 
00186         uint64_t hashFunction(int64_t virtualVolumeId, int64_t blockposition, int64_t index) const;
00187 
00197         uint64_t hashFunction(Disk* disk, int64_t iteration) const;
00198 
00199     protected:
00214         virtual int32_t getNNCopies(std::list<Disk*>* disks) const;
00215     };
00216 }
00217 #endif  /* _DISTNEARESTNEIGHBOUR_H */
00218 

Generated on Mon Oct 11 2010 13:09:26 for CppDistributors by  doxygen 1.7.2