#pragma once

entityclass(Sort);
// .float(entity, entity) sort_cmp;
classfield(Sort).entity chain, sort_next, sort_prev;

entity Sort_Spawn();

/**
 * Swap two neighbours in a sortlist.
 * @param a FIRST entity
 * @param b entity after a
 */
#define SORT_SWAP(a, b) MACRO_BEGIN \
	b.sort_prev = a.sort_prev; \
	a.sort_next = b.sort_next; \
	if (b.sort_next)  b.sort_next.sort_prev = a; \
	if (a.sort_prev)  a.sort_prev.sort_next = b; \
	a.sort_prev = b; \
	b.sort_next = a; \
MACRO_END
