前面已经介绍过了,TLP库中通过IntType和BoolType对int和bool值进行封装,并且提供了对应的计算元函数。
TLP中定义了如下IntType的基本运算元函数:
__int():输入一个常整数,返回一个对应的IntType类型;__inc(): 递增运算。例如__inc(__int(5))的结果是__int(6);__dec(): 递减运算。例如__dec(__int(5))的结果是__int(4);__add(): 加法运算。例如__add(__int(5), __int(2))的结果是__int(7);__sub(): 减法运算。例如__sub(__int(5), __int(2))的结果是__int(3);__mul(): 乘法运算。例如__mul(__int(5), __int(2))的结果是__int(10);__div(): 除法运算。例如__div(__int(5), __int(2))的结果是__int(2);__mod(): 取模运算。例如__mod(__int(5), __int(2))的结果是__int(1);__sum(): 求和运算,输入元素不定长。例如__sum(__int(0), __int(1), __int(2))。
同样,对于BoolType我们定义如下元函数:
__bool():输入一个bool值,返回一个BoolType类型;__true():等价于__bool(true);__false():等价于__bool(false);__not():取非操作。例如:__not(__bool(true))的结果是__false();__and():逻辑与操作。例如:__and(__true(), __false())的结果是__false();__or():逻辑或操作。例如:__or(__true(), __false())的结果是__true();
TLP同样提供了如下辅助元函数:
__is_eq():判断两个类型是否相等,返回一个BoolType。__if():根据第一个入参BoolType的值,选择返回第二和第三个类型中的一个。如果如果为__true(),则返回第二个参数对应的类型,否则返回第三个参数对应的类型。__value():对类型进行求值。对于IntType和BoolType其值就是对应内部的Value值。__print():通过编译器告警打印出入参的类型值。
此外,TLP中有两个特殊类型,
NullType:用于各种计算中返回的无效值;可以使用宏__null()替代;EmptyType:空类,大多数用于占桩;可以使用宏__empty()替代;
对NullType和EmptyType分别调用__value()元函数,将会返回0xFFFFFFFF和0x0。
最后,TLP提供了一个元函数,用于判断表达式的返回值是否有效:
-
__valid():用于判断参数中的返回值类型是否有效。默认只对NullType认为是无效的。