#ifndef FZL_VM_ENV_H #define FZL_VM_ENV_H #include #include #include typedef enum { FZL_VM_ENV_WRESULT_OK, FZL_VM_ENV_WRESULT_ERR, FZL_VM_ENV_WRESULT_ERR_EXISTS, FZL_VM_ENV_WRESULT_ERR_NOT_FOUND } fzl_vm_env_wresult_t; // Environment table entry descriptor typedef struct { char *name; fzl_value_t value; } fzl_vm_env_entry_t; // Environment table descriptor typedef struct { size_t size; size_t remainder; fzl_vm_env_entry_t *table; } fzl_vm_env_t; // Allocate env table fzl_vm_env_t *fzl_mkenv(); // Try get value by name bool fzl_env_lookup(fzl_vm_env_t *env, char *name, fzl_value_t *res); // Check name in env table bool fzl_env_contains(fzl_vm_env_t *env, char *name); // Store new value fzl_vm_env_wresult_t fzl_env_storevalue(fzl_vm_env_t *env, char *name, fzl_value_t val); // Overwrite existing value fzl_vm_env_wresult_t fzl_env_writevalue(fzl_vm_env_t *env, char *name, fzl_value_t newval); // Free env table void fzl_freeenv(fzl_vm_env_t *env); #endif // FZL_VM_ENV_H