Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __CONSISTENT_HASH_H__
00023 #define __CONSISTENT_HASH_H__
00024
00025 #include "Hash.h"
00026 #include <stdint.h>
00027 #include <iostream>
00028 #include <map>
00029
00030
00031
00032
00033
00034 struct ATSConsistentHashNode
00035 {
00036 bool available;
00037 char *name;
00038 };
00039
00040 std::ostream &
00041 operator<< (std::ostream & os, ATSConsistentHashNode & thing);
00042
00043 typedef std::map<uint64_t, ATSConsistentHashNode *>::iterator ATSConsistentHashIter;
00044
00045
00046
00047
00048
00049
00050
00051 struct ATSConsistentHash
00052 {
00053 ATSConsistentHash(int r = 1024, ATSHash64 *h = NULL);
00054 void insert(ATSConsistentHashNode *node, float weight = 1.0, ATSHash64 *h = NULL);
00055 ATSConsistentHashNode *lookup(const char *url = NULL, ATSConsistentHashIter *i = NULL, bool *w = NULL, ATSHash64 *h = NULL);
00056 ATSConsistentHashNode *lookup_available(const char *url = NULL, ATSConsistentHashIter *i = NULL, bool *w = NULL, ATSHash64 *h = NULL);
00057 ~ATSConsistentHash();
00058
00059 private:
00060 int replicas;
00061 ATSHash64 *hash;
00062 std::map<uint64_t, ATSConsistentHashNode *> NodeMap;
00063 };
00064
00065 #endif