add _swapImpl