Mathematically, you don't have to worry about whether they overlap at all. If src
is less than dst
, just copy from the end. If src
is greater than dst
, just copy from the beginning.
If src
and dst
are equal, just exit straight away.
That's because your cases are one of:
1) <-----s-----> start at end of s
<-----d----->
2) <-----s-----> start at end of s
<-----d----->
3) <-----s-----> no action
<-----d----->
4) <-----s-----> start at beginning of s
<-----d----->
5) <-----s-----> start at beginning of s
<-----d----->
Even if there's no overlap, that will still work fine, and simplify your conditions.
If you have a more efficient way to copy forwards than backwards then, yes, you should check for overlap to ensure you're using the more efficient method if possible. In other words, change option 1 above to copy from the beginning.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…