+ case MEMCACHED_DISTRIBUTION_CONSISTENT:
+ case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA:
+ {
+ uint32_t num= ptr->continuum_points_counter;
+ 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_MODULA:
+ return hash % ptr->number_of_hosts;
+ default:
+ WATCHPOINT_ASSERT(0); /* We have added a distribution without extending the logic */