multiversx_sc_scenario/api/local_api_vh/
static_var_api_vh.rs

1use crate::api::{VMHooksApi, VMHooksApiBackend};
2use multiversx_sc::{
3    api::{RawHandle, StaticVarApi, StaticVarApiFlags, StaticVarApiImpl},
4    types::LockableStaticBuffer,
5};
6
7impl<VHB: VMHooksApiBackend> StaticVarApi for VMHooksApi<VHB> {
8    type StaticVarApiImpl = Self;
9
10    fn static_var_api_impl() -> Self::StaticVarApiImpl {
11        Self::api_impl()
12    }
13}
14
15impl<VHB: VMHooksApiBackend> StaticVarApiImpl for VMHooksApi<VHB> {
16    fn with_lockable_static_buffer<R, F: FnOnce(&mut LockableStaticBuffer) -> R>(&self, f: F) -> R {
17        self.with_static_data(|data| {
18            let mut lockable_static_buffer = data.lockable_static_buffer_cell.borrow_mut();
19            f(&mut lockable_static_buffer)
20        })
21    }
22
23    fn set_external_view_target_address_handle(&self, handle: RawHandle) {
24        self.with_static_data(|data| {
25            data.static_vars_cell
26                .borrow_mut()
27                .external_view_target_address_handle = handle;
28        });
29    }
30
31    fn get_external_view_target_address_handle(&self) -> RawHandle {
32        self.with_static_data(|data| {
33            data.static_vars_cell
34                .borrow()
35                .external_view_target_address_handle
36        })
37    }
38
39    fn next_handle(&self) -> RawHandle {
40        self.with_static_data(|data| {
41            let mut ref_tx_static_vars = data.static_vars_cell.borrow_mut();
42            let new_handle = ref_tx_static_vars.next_handle;
43            ref_tx_static_vars.next_handle -= 1;
44            new_handle
45        })
46    }
47
48    fn set_num_arguments(&self, num_arguments: i32) {
49        self.with_static_data(|data| {
50            data.static_vars_cell.borrow_mut().num_arguments = num_arguments;
51        })
52    }
53
54    fn get_num_arguments(&self) -> i32 {
55        self.with_static_data(|data| data.static_vars_cell.borrow().num_arguments)
56    }
57
58    fn set_flags(&self, flags: StaticVarApiFlags) {
59        self.with_static_data(|data| {
60            data.static_vars_cell.borrow_mut().flags = flags;
61        })
62    }
63
64    fn get_flags(&self) -> StaticVarApiFlags {
65        self.with_static_data(|data| data.static_vars_cell.borrow().flags)
66    }
67
68    fn is_scaling_factor_cached(&self, decimals: usize) -> bool {
69        self.with_static_data(|data| data.static_vars_cell.borrow().scaling_factor_init[decimals])
70    }
71
72    fn set_scaling_factor_cached(&self, decimals: usize) {
73        self.with_static_data(|data| {
74            data.static_vars_cell.borrow_mut().scaling_factor_init[decimals] = true
75        })
76    }
77}