7.2. 参数表 Args

    7.2.2. 概述

    1. Args参数表API是使用面向对象的思想设计的,这些函数的第一个入口参数都是被操作参数表的指针。

    2. Args参数表使用键值对(Map)数据模型,或称为字典(Dist)

    3. 一个参数表内可以包含任意个参数,每个参数使用**参数名(键)**索引。

    4. 索引得到的参数可以是基本数据类型(int, float, pointer, string)或者泛型参数(Arg)。

    5. Args参数表支持动态增加、删除、修改、查找参数。

    6. Args参数表不支持嵌套(和PikaObj属性的主要区别)。

    参数表的数据类型是Args。

    参数表内部基于链表(Link)实现。 注意不要直接访问Args内部的链表,请使用Args API访问Args。以获得最大的向后兼容性

    7.2.4. 参数表的新建和销毁

    [注意] 为避免内存泄漏,请在 docker 开发环境 下进行开发,确保充足的单元测试和内存检查。

    1. Args* New_args(Args* args);
    1. 销毁参数表。当一个参数表被销毁时,参数表内部的所有参数也会被自动销毁

    传入参数表的指针,销毁参数表。

    这一部分API提供了对参数表的增删改查。

    Args参数表支持整形、浮点型、指针、字串四种基本类型的参数。使用set和get方法即可读写一个参数表内的参数。

    Args参数表是动态的,因此可以随时为参数表新增新的参数。

    基本类型属性的API有如下这些,和对象的参数API相似,但不支持嵌套

    1. /* set API */
    2. int32_t args_setInt(Args* self, char* name, int64_t int64In);
    3. int32_t args_setFloat(Args* self, char* name, float argFloat);
    4. int32_t args_setPtr(Args* self, char* name, void* argPointer);
    5. int32_t args_setStr(Args* self, char* name, char* strIn);
    6. int64_t args_getInt(Args* self, char* name);
    7. float args_getFloat(Args* self, char* name);
    8. void* args_getPtr(Args* self, char* name);
    9. char* args_getStr(Args* self, char* name);

    基本类型属性的命名方式为args_set[Type]和args_get[Type]。

    1. 第一个输入参数为要操作的参数表指针。

    2. 第二个输入参数为参数名

    3. set方法的第三个输入参数为写入的参数值,get方法的返回值为读取的参数值。

    args支持泛型参数,同样提供set方法和get方法。输入参数和返回值与基本类型相似。 args_getType可以获得参数的类型。

    1. Arg* args_getArg(Args* self, char* name);
    2. ArgType args_getType(Args* self, char* name);

    泛型参数在使用时需要转换为基本类型。

    使用以下API可以判断泛型参数的当前类型。

    使用以下的API可以将泛型参数转换为基本类型。

    1. float arg_getFloat(Arg* self);
    2. void* arg_getPtr(Arg* self);
    3. char* arg_getStr(Arg* self);
    1. 使用参数名哈希或者参数名判断一个参数是否存在,返回值为1表示存在,使用times33算法获得参数名哈希。
    1. int32_t args_isArgExist_hash(Args* self, Hash nameHash);
    2. int32_t args_isArgExist(Args* self, char* name);
    3. Hash hash_time33(char* str);
    1. 使用泛型参数的指针删除一个参数

    返回值为错误码,为0表示成功。

    7.2.6. 参数表的遍历

    可以使用下面的API遍历一个参数表。

    1. 第一个入口参数是参数表的指针。

    2. 第二个参数是遍历参数时的回调函数的函数指针

    3. 第三个参数是辅助的参数表,用来传递辅助参数,在不使用辅助参数时,第三个输入参数可以填NULL。

    1. int32_t args_foreach(Args* self,
    2. Args* handleArgs);