summaryrefslogtreecommitdiff
path: root/distribute.c
diff options
context:
space:
mode:
authorBobby Bingham <koorogi@koorogi.info>2014-10-26 23:33:50 -0500
committerBobby Bingham <koorogi@koorogi.info>2014-10-26 23:33:50 -0500
commit40a6ba5c0a5f544bed9c11dc30b751e05a435b1e (patch)
tree796861388460ebfe3571ebc0699c3834d6eb83cf /distribute.c
parent1e3548b039bd6b760ca3fe716c98065735110f58 (diff)
Split helper functions into their own translation units
Diffstat (limited to 'distribute.c')
-rw-r--r--distribute.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/distribute.c b/distribute.c
new file mode 100644
index 0000000..d2d1eff
--- /dev/null
+++ b/distribute.c
@@ -0,0 +1,18 @@
+#include <stddef.h>
+
+#include "common.h"
+
+void distribute_buffer(char *base, size_t bufnmel, size_t sortnmel, size_t width, cmpfun cmp)
+{
+ 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;
+ }
+}