/* SPDX-License-Identifier: LGPL-2.1-only */ /* Copyright (C) 2020 Gediminas Jakutis */ #include #include #include "defs.h" #include "mergesort.h" int merge(struct stream * const dest, struct stream * const A, struct stream * const B) { int ret; struct entry_l *a; struct entry_l *b; try(A->parent != B->parent, err, EINVAL, "cannot merge blocks: uncommon parent!"); a = get(A); b = get(B); while (a || b) { if (a && (!b || a->val <= b->val)) { put(dest, a); a = get(A); } else { put(dest, b); b = get(B); } } err: return ret; }