Add generic_swap function