#![allow(non_camel_case_types, non_upper_case_globals)]
use std::cell::RefCell;
use std::rc::Rc;
pub type varnumber_T = i64;
pub type float_T = f64;
pub const VARNUMBER_MAX: varnumber_T = i64::MAX;
pub const VARNUMBER_MIN: varnumber_T = i64::MIN;
pub const DI_FLAGS_RO: i32 = 1;
pub const DI_FLAGS_RO_SBX: i32 = 2;
pub const DI_FLAGS_FIX: i32 = 4;
pub const DI_FLAGS_LOCK: i32 = 8;
pub const DI_FLAGS_ALLOC: i32 = 16;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BoolVarValue {
kBoolVarFalse,
kBoolVarTrue,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SpecialVarValue {
kSpecialVarNull,
kSpecialVarNone,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum VarLockStatus {
#[default]
VAR_UNLOCKED,
VAR_LOCKED,
VAR_FIXED,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum VarType {
VAR_UNKNOWN,
VAR_NUMBER,
VAR_STRING,
VAR_FUNC,
VAR_LIST,
VAR_DICT,
VAR_FLOAT,
VAR_BOOL,
VAR_SPECIAL,
VAR_PARTIAL,
VAR_BLOB,
}
pub const VAR_TYPE_NUMBER: varnumber_T = 0;
pub const VAR_TYPE_STRING: varnumber_T = 1;
pub const VAR_TYPE_FUNC: varnumber_T = 2;
pub const VAR_TYPE_LIST: varnumber_T = 3;
pub const VAR_TYPE_DICT: varnumber_T = 4;
pub const VAR_TYPE_FLOAT: varnumber_T = 5;
pub const VAR_TYPE_BOOL: varnumber_T = 6;
pub const VAR_TYPE_SPECIAL: varnumber_T = 7;
pub const VAR_TYPE_BLOB: varnumber_T = 10;
#[derive(Debug, Clone)]
pub enum typval_vval_union {
v_number(varnumber_T),
v_bool(BoolVarValue),
v_special(SpecialVarValue),
v_float(float_T),
v_string(String),
v_list(Option<Rc<RefCell<list_T>>>),
v_dict(Option<Rc<RefCell<dict_T>>>),
v_blob(Option<Rc<RefCell<blob_T>>>),
v_partial(Option<Rc<partial_T>>),
v_unknown,
}
#[derive(Debug)]
pub struct partial_T {
pub pt_refcount: i32,
pub pt_name: String,
pub pt_argv: Vec<typval_T>,
pub pt_dict: Option<Rc<RefCell<dict_T>>>,
}
#[derive(Debug, Clone)]
pub struct typval_T {
pub v_type: VarType,
pub v_lock: VarLockStatus,
pub vval: typval_vval_union,
}
impl Default for typval_T {
fn default() -> Self {
typval_T {
v_type: VarType::VAR_UNKNOWN,
v_lock: VarLockStatus::VAR_UNLOCKED,
vval: typval_vval_union::v_unknown,
}
}
}
impl From<varnumber_T> for typval_T {
fn from(n: varnumber_T) -> Self {
typval_T {
v_type: VarType::VAR_NUMBER,
v_lock: VarLockStatus::VAR_UNLOCKED,
vval: typval_vval_union::v_number(n),
}
}
}
impl From<String> for typval_T {
fn from(s: String) -> Self {
typval_T {
v_type: VarType::VAR_STRING,
v_lock: VarLockStatus::VAR_UNLOCKED,
vval: typval_vval_union::v_string(s),
}
}
}
#[derive(Debug, Clone)]
pub struct listitem_T {
pub li_tv: typval_T,
}
#[derive(Debug, Default)]
pub struct list_T {
pub lv_items: Vec<listitem_T>,
pub lv_len: i32,
pub lv_refcount: i32,
pub lv_lock: VarLockStatus,
}
#[derive(Debug, Default, Clone)]
pub struct dict_T {
pub dv_hashtab: indexmap::IndexMap<String, typval_T>,
pub dv_refcount: i32,
pub dv_lock: VarLockStatus,
pub dv_watchers: Vec<crate::ported::eval::typval::DictWatcher>,
}
#[derive(Debug, Default)]
pub struct blob_T {
pub bv_ga: Vec<u8>,
pub bv_refcount: i32,
pub bv_lock: VarLockStatus,
}