Created
February 13, 2019 06:11
-
-
Save enobufs/3ef71a587ba2b9ece55dd54182b8d48f to your computer and use it in GitHub Desktop.
Sequence Number Arithmetic (RFC 1982) for Go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// sna32 provides 32-bit serial number arithmetic (RFC 1982) | |
type sna32 uint32 | |
// lessThan comares 32-bit serial numbers | |
func (sn sna32) lessThan(val sna32) bool { | |
return (sn < val && val-sn < 1<<31) || (sn > val && sn-val > 1<<31) | |
} | |
func (sn sna32) lessThanOrEqualTo(val sna32) bool { | |
return sn == val || sn.lessThan(val) | |
} | |
func (sn sna32) greaterThan(val sna32) bool { | |
return (sn < val && (val-sn) >= 1<<31) || (sn > val && (sn-val) <= 1<<31) | |
} | |
func (sn sna32) greaterThanOrEqualTo(val sna32) bool { | |
return sn == val || sn.greaterThan(val) | |
} | |
// sna16 provides 16-bit serial number arithmetic (RFC 1982) | |
type sna16 uint16 | |
func (sn sna16) lessThan(val sna16) bool { | |
return (sn < val && (val-sn) < 1<<15) || (sn > val && (sn-val) > 1<<15) | |
} | |
func (sn sna16) lessThanOrEqualTo(val sna16) bool { | |
return sn == val || sn.lessThan(val) | |
} | |
func (sn sna16) greaterThan(val sna16) bool { | |
return (sn < val && (val-sn) >= 1<<15) || (sn > val && (sn-val) <= 1<<15) | |
} | |
func (sn sna16) greaterThanOrEqualTo(val sna16) bool { | |
return sn == val || sn.greaterThan(val) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
And a test for it: