authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-06-27 20:37:28-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2019-06-27 20:37:28-04:00
logae72a982242fbd46f389f933c18b036e919093bc
treedf934a2c4596a64d3ae8d4000e550e5f24c8559f
parentff477361b005f059591e92e079d62e68153365e1
parent623dbb73df7d8350f79f62c13587a354fdcd56d5
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #2775 from SamTebbs33/alignment-docs

Add doc comments to alignment functions

1 files changed, 6 insertions(+), 0 deletions(-)

std/mem.zig+6
...@@ -1481,6 +1481,7 @@ test "subArrayPtr" {...@@ -1481,6 +1481,7 @@ test "subArrayPtr" {
1481}1481}
14821482
1483/// Round an address up to the nearest aligned address1483/// Round an address up to the nearest aligned address
1484/// The alignment must be a power of 2 and greater than 0.
1484pub fn alignForward(addr: usize, alignment: usize) usize {1485pub fn alignForward(addr: usize, alignment: usize) usize {
1485 return alignBackward(addr + (alignment - 1), alignment);1486 return alignBackward(addr + (alignment - 1), alignment);
1486}1487}
...@@ -1500,13 +1501,18 @@ test "alignForward" {...@@ -1500,13 +1501,18 @@ test "alignForward" {
1500 testing.expect(alignForward(17, 8) == 24);1501 testing.expect(alignForward(17, 8) == 24);
1501}1502}
15021503
1504/// Round an address up to the previous aligned address
1505/// The alignment must be a power of 2 and greater than 0.
1503pub fn alignBackward(addr: usize, alignment: usize) usize {1506pub fn alignBackward(addr: usize, alignment: usize) usize {
1507 assert(@popCount(usize, alignment) == 1);
1504 // 000010000 // example addr1508 // 000010000 // example addr
1505 // 000001111 // subtract 11509 // 000001111 // subtract 1
1506 // 111110000 // binary not1510 // 111110000 // binary not
1507 return addr & ~(alignment - 1);1511 return addr & ~(alignment - 1);
1508}1512}
15091513
1514/// Given an address and an alignment, return true if the address is a multiple of the alignment
1515/// The alignment must be a power of 2 and greater than 0.
1510pub fn isAligned(addr: usize, alignment: usize) bool {1516pub fn isAligned(addr: usize, alignment: usize) bool {
1511 return alignBackward(addr, alignment) == addr;1517 return alignBackward(addr, alignment) == addr;
1512}1518}