+ case MEMCACHED_DISTRIBUTION_CONSISTENT:
+ case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA:
+ {
+ uint32_t num= ptr->number_of_hosts * MEMCACHED_POINTS_PER_SERVER;
+ WATCHPOINT_ASSERT(ptr->continuum);
+
+ hash= hash;
+ memcached_continuum_item_st *begin, *end, *left, *right, *middle;
+ begin= left= ptr->continuum;
+ end= right= ptr->continuum + (num - 1);
+
+ while (1)
+ {
+ memcached_continuum_item_st *rmiddle;
+
+ middle = left + (right - left) / 2;
+
+ if (middle==end)
+ return begin->index;
+
+ if (middle==begin)
+ return end->index;
+
+ rmiddle = middle+1;
+
+ if (hash<rmiddle->value && hash>=middle->value)
+ return middle->index;
+
+ if (middle->value < hash)
+ left = middle + 1;
+ else if (middle->value > hash)
+ right = middle - 1;
+
+ if (left>right)
+ return left->index;
+ }
+ }
+ break;
+ case MEMCACHED_DISTRIBUTION_CONSISTENT_WHEEL:
+ {
+ unsigned int server_key;
+
+ server_key= hash % MEMCACHED_STRIDE * ptr->wheel_count;
+
+ return ptr->wheel[server_key];
+ }
+ case MEMCACHED_DISTRIBUTION_MODULA:
+ return hash % ptr->number_of_hosts;
+ default:
+ WATCHPOINT_ASSERT(0); /* We have added a distribution without extending the logic */