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