@@ -1808,7 +1808,7 @@ def core.cell.UnsafeCell.Insts.ZerocopyIntoBytes {T : Type} (IntoBytesInst :
18081808}
18091809
18101810/-- [ zerocopy::util::padding_needed_for ] :
1811- Source: 'src/util/mod.rs', lines 167 :0-227 :1 -/
1811+ Source: 'src/util/mod.rs', lines 168 :0-228 :1 -/
18121812def util.padding_needed_for
18131813 (len : Std.Usize)
18141814 (align : core.num.nonzero.NonZero Std.Usize
@@ -1824,7 +1824,7 @@ def util.padding_needed_for
18241824 ok (i2 &&& mask)
18251825
18261826/-- [ zerocopy::util::round_down_to_next_multiple_of_alignment ] :
1827- Source: 'src/util/mod.rs', lines 254 :0-272 :1 -/
1827+ Source: 'src/util/mod.rs', lines 255 :0-273 :1 -/
18281828def util.round_down_to_next_multiple_of_alignment
18291829 (n : Std.Usize)
18301830 (align : core.num.nonzero.NonZero Std.Usize
@@ -1841,7 +1841,7 @@ def util.round_down_to_next_multiple_of_alignment
18411841 ok (n &&& mask)
18421842
18431843/-- [ zerocopy::util::max ] :
1844- Source: 'src/util/mod.rs', lines 281 :0-287 :1 -/
1844+ Source: 'src/util/mod.rs', lines 282 :0-288 :1 -/
18451845def util.max
18461846 (a : core.num.nonzero.NonZero Std.Usize
18471847 core.num.niche_types.NonZeroUsizeInner)
@@ -1861,7 +1861,7 @@ def util.max
18611861 else ok a
18621862
18631863/-- [ zerocopy::util::min ] :
1864- Source: 'src/util/mod.rs', lines 296 :0-302 :1 -/
1864+ Source: 'src/util/mod.rs', lines 297 :0-303 :1 -/
18651865def util.min
18661866 (a : core.num.nonzero.NonZero Std.Usize
18671867 core.num.niche_types.NonZeroUsizeInner)
@@ -1915,13 +1915,19 @@ def util.owned_transmute.round_trip_checks
19151915 let restored ← util.owned_transmute.from_bytes bytes
19161916 massert (restored = value)
19171917
1918+ /-- [ zerocopy::util::validity::bool_encoding ] :
1919+ Source: 'src/util/validity/mod.rs', lines 26:0-28:1 -/
1920+ def util.validity.bool_encoding (byte : Std.U8) : Result Bool := do
1921+ ok (byte < 2#u8)
1922+
19181923/-- [ zerocopy::util::safety_checks::checked_bool ] :
19191924 Source: 'src/util/safety_checks/mod.rs', lines 28:0-38:1 -/
19201925def util.safety_checks.checked_bool
19211926 (byte : Std.U8) : Result (Option Bool) := do
1922- if byte < 2#u8
1923- then let b ← util.transmute_unchecked Bool byte
1924- ok (some b)
1927+ let b ← util.validity.bool_encoding byte
1928+ if b
1929+ then let b1 ← util.transmute_unchecked Bool byte
1930+ ok (some b1)
19251931 else ok none
19261932
19271933/-- [ zerocopy::util::safety_checks::checked_copy ] :
@@ -1937,4 +1943,74 @@ def util.safety_checks.checked_copy
19371943 ok (true, dst1)
19381944 else ok (false, dst)
19391945
1946+ /-- [ zerocopy::util::validity::nonzero_encoding ] :
1947+ Source: 'src/util/validity/mod.rs', lines 37:0-39:1 -/
1948+ def util.validity.nonzero_encoding (n : Std.Usize) : Result Bool := do
1949+ ok (n != 0#usize)
1950+
1951+ /-- [ zerocopy::util::safety_checks::checked_nonzero ] :
1952+ Source: 'src/util/safety_checks/mod.rs', lines 72:0-78:1 -/
1953+ def util.safety_checks.checked_nonzero
1954+ (n : Std.Usize) :
1955+ Result (Option (core.num.nonzero.NonZero Std.Usize
1956+ core.num.niche_types.NonZeroUsizeInner))
1957+ := do
1958+ let b ← util.validity.nonzero_encoding n
1959+ if b
1960+ then
1961+ core.num.nonzero.NonZero.new
1962+ Usize.Insts.CoreNumNonzeroZeroablePrimitiveNonZeroUsizeInner n
1963+ else ok none
1964+
1965+ /-- [ zerocopy::util::safety_checks::checked_bool_pair ] :
1966+ Source: 'src/util/safety_checks/mod.rs', lines 91:0-97:1 -/
1967+ def util.safety_checks.checked_bool_pair
1968+ (bytes : Array Std.U8 2#usize) : Result (Option (Array Bool 2#usize)) := do
1969+ let s ← lift (Array.to_slice bytes)
1970+ let left ← util.validity.read_byte s 0#usize
1971+ let s1 ← lift (Array.to_slice bytes)
1972+ let right ← util.validity.read_byte s1 1#usize
1973+ let o ← util.safety_checks.checked_bool left
1974+ match o with
1975+ | none => ok none
1976+ | some left1 =>
1977+ let o1 ← util.safety_checks.checked_bool right
1978+ match o1 with
1979+ | none => ok none
1980+ | some right1 => ok (some (Array.make 2#usize [ left1, right1 ]))
1981+
1982+ /-- [ zerocopy::util::safety_checks::bool_slice_valid ] : loop body 0:
1983+ Source: 'src/util/safety_checks/mod.rs', lines 108:4-115:1 -/
1984+ @[ rust_loop_body ]
1985+ def util.safety_checks.bool_slice_valid_loop.body
1986+ (bytes : Slice Std.U8) (i : Std.Usize) :
1987+ Result (ControlFlow Std.Usize Bool)
1988+ := do
1989+ let i1 := Slice.len bytes
1990+ if i < i1
1991+ then
1992+ let i2 ← util.validity.read_byte bytes i
1993+ let b ← util.validity.bool_encoding i2
1994+ if b
1995+ then let i3 ← i + 1#usize
1996+ ok (cont i3)
1997+ else ok (done false)
1998+ else ok (done true)
1999+
2000+ /-- [ zerocopy::util::safety_checks::bool_slice_valid ] : loop 0:
2001+ Source: 'src/util/safety_checks/mod.rs', lines 108:4-115:1 -/
2002+ @[ rust_loop ]
2003+ def util.safety_checks.bool_slice_valid_loop
2004+ (bytes : Slice Std.U8) (i : Std.Usize) : Result Bool := do
2005+ loop
2006+ (fun i1 => util.safety_checks.bool_slice_valid_loop.body bytes i1)
2007+ i
2008+
2009+ /-- [ zerocopy::util::safety_checks::bool_slice_valid ] :
2010+ Source: 'src/util/safety_checks/mod.rs', lines 106:0-115:1 -/
2011+ @[ reducible ]
2012+ def util.safety_checks.bool_slice_valid
2013+ (bytes : Slice Std.U8) : Result Bool := do
2014+ util.safety_checks.bool_slice_valid_loop bytes 0#usize
2015+
19402016end Zerocopy
0 commit comments