#include #include "common.h" #include "counts.h" void distribute_buffer(char *base, size_t bufnmel, size_t sortnmel, size_t width, cmpfun cmp) { struct counts snapshot = counts[CURRENT]; while (bufnmel && sortnmel) { char *sorted = base + bufnmel * width; size_t insertpos = binary_search(base, sorted, sortnmel, width, cmp); if (insertpos > 0) { rotate(base, (bufnmel + insertpos) * width, bufnmel * width); } base += (insertpos + 1) * width; bufnmel -= 1; sortnmel -= insertpos; } add_counts(counts + DISTRIBUTE, &snapshot); }