1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
mod columns;
mod global;
mod program;
mod trace;

pub use columns::*;
pub use global::*;
pub use program::*;

use serde::{Deserialize, Serialize};

use crate::runtime::MemoryRecord;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemoryInitializeFinalizeEvent {
    pub addr: u32,
    pub value: u32,
    pub shard: u32,
    pub timestamp: u32,
    pub used: u32,
}

impl MemoryInitializeFinalizeEvent {
    pub const fn initialize(addr: u32, value: u32, used: bool) -> Self {
        // All memory initialization happen at shard 0, timestamp 0.
        Self {
            addr,
            value,
            shard: 1,
            timestamp: 1,
            used: if used { 1 } else { 0 },
        }
    }

    pub const fn finalize_from_record(addr: u32, record: &MemoryRecord) -> Self {
        Self {
            addr,
            value: record.value,
            shard: record.shard,
            timestamp: record.timestamp,
            used: 1,
        }
    }
}