虚拟机object或dict对象API

8. obejct或dict对象API


8.1 创建数组或列表对象

  1. /**
  2. * @brief 创建新的对象
  3. * @param e,虚拟机参数
  4. * @param type,设置对象类型
  5. * @param prop_len,设置成员长度
  6. * @param attr_len,设置属性长度
  7. * @return
  8. */
  9. evm_val_t *evm_object_create(evm_t * e, int type, int prop_len, int attr_len);

8.2 创建带有外部数据的新对象

  1. /**
  2. * @brief 创建带有外部数据的新对象
  3. * @param e
  4. * @param type
  5. * @param ext_data
  6. * @return
  7. */
  8. evm_val_t *evm_object_create_ext_data(evm_t * e, int type, intptr_t ext_data);

8.3 通过类来创建对象

  1. /**
  2. * @brief 通过类来创建对象
  3. * @param e,虚拟机参数
  4. * @param o,类对象
  5. * @return 创建的新对象
  6. */
  7. evm_val_t * evm_object_create_by_class(evm_t * e, int type, evm_val_t * o);

8.4 解除对象引用,强制垃圾回收

  1. /**
  2. * @brief 解除对象引用,强制垃圾回收
  3. * @param e
  4. * @param o
  5. */
  6. void evm_object_deref(evm_t * e, evm_val_t * o);

8.5 通过字符串名称对象查找成员

  1. /**
  2. * @brief 通过字符串名称对象查找成员
  3. * @param e,虚拟机参数
  4. * @param o,对象
  5. * @param key,字符串名称
  6. * @param depth,depth大于0表示查找范围包括父类,否则不包括父类
  7. * @return 成员,查找失败则返回undefined
  8. */
  9. evm_val_t * evm_prop_get(evm_t *e, evm_val_t * o, const char* key, int depth);

8.6 通过key索引查找成员

  1. /**
  2. * @brief 通过字符串名称对象查找成员
  3. * @param e,虚拟机参数
  4. * @param o,对象
  5. * @param key,字符串索引
  6. * @param depth,depth大于0表示查找范围包括父类,否则不包括父类
  7. * @return 成员,查找失败则返回undefined
  8. */
  9. evm_val_t * evm_prop_get_by_key(evm_t * e, evm_val_t *obj,
  10. uint32_t key, int depth);

8.6 通过索引位置获取对象成员

  1. /**
  2. * @brief 通过索引位置获取对象成员
  3. * @param e
  4. * @param o
  5. * @param index
  6. * @return
  7. */
  8. evm_val_t * evm_prop_get_by_index(evm_t * e, evm_val_t * o, int index);

8.6 按顺序添加对象成员

  1. /**
  2. * @brief 按顺序添加对象成员
  3. * @param e,虚拟机参数
  4. * @param o,对象
  5. * @param index, 索引
  6. * @param key,字符串名称
  7. * @param v,成员值
  8. * @return 正确返回ec_ok,错误返回ec_index
  9. */
  10. evm_err_t evm_prop_set(evm_t * e, evm_val_t * o, uint32_t index,
  11. const char *key, evm_val_t v);

8.7 通过索引index,设置对象成员的key和value

  1. /**
  2. * @brief 通过索引index,设置对象成员的key和value
  3. * @param e,虚拟机
  4. * @param o,对象
  5. * @param index,索引
  6. * @param key,字符串key值
  7. * @param v,成员值
  8. * @return 正确返回ec_ok,错误返回ec_index
  9. */
  10. evm_err_t evm_prop_set_key_value(evm_t * e, evm_val_t * o, uint32_t index,
  11. uint16_t key, evm_val_t v);

8.8 通过对象名称设置对象成员

  1. /**
  2. * @brief 对象成员设置
  3. * @param e,虚拟机参数
  4. * @param o,对象
  5. * @param key,字符串名称
  6. * @param v,成员值
  7. * @return 正确返回ec_ok,错误返回ec_key
  8. */
  9. evm_err_t evm_prop_set_value(evm_t * e, evm_val_t * o,
  10. const char* key, evm_val_t v);

8.9 通过对象名称追加对象成员

  1. /**
  2. * @brief 对象追加成员
  3. * @param e,虚拟机参数
  4. * @param o,对象
  5. * @param key,字符串名称
  6. * @param v,值
  7. * @return 错误码
  8. */
  9. evm_err_t evm_prop_append(evm_t * e, evm_val_t * o, char * key, evm_val_t * v);

8.10 通过索引追加成员

  1. /**
  2. * @brief 对象通过索引追加成员
  3. * @param e,虚拟机参数
  4. * @param o,对象
  5. * @param key,字符串索引
  6. * @param v,值
  7. * @return 错误码
  8. */
  9. evm_err_t evm_prop_append_with_key(evm_t * e, evm_val_t * o, int key,
  10. evm_val_t * v);

8.11 通过索引设置成员值

  1. /**
  2. * @brief 通过索引设置成员值
  3. * @param e,虚拟机
  4. * @param o,对象
  5. * @param index,索引
  6. * @param v,值
  7. * @return 错误码
  8. */
  9. evm_err_t evm_prop_set_value_by_index(evm_t * e, evm_val_t *o,
  10. uint32_t index, evm_val_t v);

8.12 通过索引设置成员值

  1. /**
  2. * @brief 通过索引获取成员的名称索引值
  3. * @param e,虚拟机
  4. * @param o,对象
  5. * @param index,索引
  6. * @return 名称索引值,通过evm_string_get获取索引对应的字符串内容
  7. */
  8. uint32_t evm_prop_get_key_by_index(evm_t * e, evm_val_t * o, int index);

8.13 通过索引设置成员的名称索引值

  1. /**
  2. * @brief 通过索引设置成员的名称索引值
  3. * @param e,虚拟机参数
  4. * @param o,对象
  5. * @param index,索引
  6. * @param key,字符串索引值
  7. */
  8. void evm_prop_set_key_by_index(evm_t * e, evm_val_t * o, int index,
  9. uint32_t key);

8.14 获取对象成员个数长度

  1. /**
  2. * @brief 获取对象成员个数长度
  3. * @param o,对象
  4. * @return
  5. */
  6. int evm_prop_len(evm_val_t * o);