xref: /aosp_15_r20/external/crosvm/win_util/src/large_integer.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1 // Copyright 2022 The ChromiumOS Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 use std::ops::Deref;
6 
7 use winapi::um::winnt::LARGE_INTEGER;
8 
9 pub struct LargeInteger {
10     large_integer: LARGE_INTEGER,
11 }
12 
13 impl LargeInteger {
new(value: i64) -> LargeInteger14     pub fn new(value: i64) -> LargeInteger {
15         // SAFETY: We are zero-initializing a struct with only primitive member fields.
16         let mut large_integer_val: LARGE_INTEGER = unsafe { std::mem::zeroed() };
17         // SAFETY: We uniquely own this variable
18         let large_integer_val_mut: &mut i64 = unsafe { large_integer_val.QuadPart_mut() };
19         *large_integer_val_mut = value;
20 
21         LargeInteger {
22             large_integer: large_integer_val,
23         }
24     }
25 }
26 
27 impl Deref for LargeInteger {
28     type Target = LARGE_INTEGER;
29 
deref(&self) -> &Self::Target30     fn deref(&self) -> &Self::Target {
31         &self.large_integer
32     }
33 }
34