pub const MAGIC_BYTES: [u8; 8] = [b'S', b'Q', b'L', b'T', b'G', b'F', 0, 0];
pub const HEADER_SIZE: u64 = 80;
pub const FILE_FORMAT_VERSION: u32 = 3;
pub mod header_offset {
pub const MAGIC: u64 = 0;
pub const VERSION: u64 = 8;
pub const FLAGS: u64 = 12;
pub const NODE_COUNT: u64 = 16;
pub const EDGE_COUNT: u64 = 24;
pub const SCHEMA_VERSION: u64 = 32;
pub const NODE_DATA_OFFSET: u64 = 40;
pub const EDGE_DATA_OFFSET: u64 = 48;
pub const CHECKSUM: u64 = 56;
}
pub mod header_size {
pub const MAGIC: usize = 8;
pub const VERSION: usize = 4;
pub const FLAGS: usize = 4;
pub const NODE_COUNT: usize = 8;
pub const EDGE_COUNT: usize = 8;
pub const SCHEMA_VERSION: usize = 4; pub const NODE_DATA_OFFSET: usize = 8;
pub const EDGE_DATA_OFFSET: usize = 8;
pub const CHECKSUM: usize = 8;
}
pub mod node {
pub const ID_SIZE: usize = 8;
pub const FLAGS_SIZE: usize = 4;
pub const KIND_LEN_SIZE: usize = 2;
pub const NAME_LEN_SIZE: usize = 2;
pub const DATA_LEN_SIZE: usize = 4;
pub const OUTGOING_OFFSET_SIZE: usize = 8;
pub const OUTGOING_COUNT_SIZE: usize = 4;
pub const INCOMING_OFFSET_SIZE: usize = 8;
pub const INCOMING_COUNT_SIZE: usize = 4;
pub const FIXED_HEADER_SIZE: usize =
1 + ID_SIZE + FLAGS_SIZE + KIND_LEN_SIZE + NAME_LEN_SIZE + DATA_LEN_SIZE;
pub const ADJACENCY_METADATA_SIZE: usize =
OUTGOING_OFFSET_SIZE + OUTGOING_COUNT_SIZE + INCOMING_OFFSET_SIZE + INCOMING_COUNT_SIZE;
pub const MAX_STRING_LENGTH: u16 = 65535;
pub const MAX_STRING_LENGTH_U32: u32 = 65535;
pub const MAX_DATA_LENGTH: u32 = 1_000_000;
pub const NODE_SLOT_SIZE: u64 = 4096;
}
pub mod edge {
pub const ID_SIZE: usize = 8;
pub const FROM_ID_SIZE: usize = 8;
pub const TO_ID_SIZE: usize = 8;
pub const TYPE_LEN_SIZE: usize = 2;
pub const FLAGS_SIZE: usize = 2;
pub const DATA_LEN_SIZE: usize = 4;
pub const FIXED_HEADER_SIZE: usize =
1 + ID_SIZE + FROM_ID_SIZE + TO_ID_SIZE + TYPE_LEN_SIZE + FLAGS_SIZE + DATA_LEN_SIZE;
pub const MAX_STRING_LENGTH: u16 = 65535;
pub const MAX_STRING_LENGTH_U32: u32 = 65535;
pub const MAX_DATA_LENGTH: u32 = 1_000_000;
pub const EDGE_SLOT_SIZE: u64 = 256;
}
pub const FLAG_V2_FRAMED_RECORDS: u32 = 0x0000_0001;
pub const FLAG_V2_ATOMIC_COMMIT: u32 = 0x0000_0002;
pub const TX_STATE_MASK: u32 = 0x0000_00F0;
pub const TX_STATE_CLEAN: u32 = 0x0000_0000; pub const TX_STATE_IN_PROGRESS: u32 = 0x0000_0010;
pub const DEFAULT_FEATURE_FLAGS: u32 = FLAG_V2_FRAMED_RECORDS | FLAG_V2_ATOMIC_COMMIT;
pub const DEFAULT_SCHEMA_VERSION: u32 = 1;
pub mod checksum {
pub const XOR_SEED: u64 = 0x5A5A5A5A5A5A5A5A;
}
pub const FILE_PERMISSIONS: u32 = 0o644;
pub const V3_HEADER_SIZE: u64 = 112;
pub const V3_MAGIC: [u8; 8] = [b'S', b'Q', b'L', b'T', b'G', b'F', 0, 3];
pub const V3_FORMAT_VERSION: u32 = 4;
pub mod v3_flags {
use super::{FLAG_V2_ATOMIC_COMMIT, FLAG_V2_FRAMED_RECORDS};
pub const FLAG_V3_BTREE_INDEX: u32 = 0x0000_0004;
pub const FLAG_V3_DYNAMIC_ALLOCATION: u32 = 0x0000_0008;
pub const DEFAULT: u32 = FLAG_V2_FRAMED_RECORDS
| FLAG_V2_ATOMIC_COMMIT
| FLAG_V3_BTREE_INDEX
| FLAG_V3_DYNAMIC_ALLOCATION;
}