erl_eterm
erl_eterm
C库
erl_eterm
库摘要
Erlang项构造函数。
描述
本模块提供了创建和操作Erlang术语的功能。
一个Erlang项由类型的C结构表示ETERM
。应用程序不应该直接引用此结构中的任何字段,因为它可以在将来的版本中更改以提供更快,更紧凑的术语存储。相反,应用程序应该使用提供的宏和函数。
以下每个宏都将一个ETERM
指针作为参数。如果测试为真,则宏返回非零值,否则返回非零值0
。
ERL_IS_INTEGER(t)如果t是整数,则为真.
以下宏可用于检索Erlang术语的部分内容。所有这些都不进行任何类型检查。如果您传递ETERM*
包含错误的类型。例如,将元组传递给ERL_ATOM_PTR()
可能会导致垃圾。
char * ERL_ATOM_PTR(t)char * ERL_ATOM_PTR_UTF8(t)表示原子的字符串t.
输出
ETERM *erl_cons(head, tail)
类型
将两个Erlang术语连接在一起,将头部置于尾部,从而创建一个cons单元。 为了做出正确的列表,尾巴总是成为一个列表或一个空列表。 注意NULL不是一个有效的列表。
head
是要增加的新术语。
tail
是连接的现有列表head
。
函数返回一个新列表。
ERL_CONS_HEAD(list)
和ERL_CONS_TAIL(list)
可用于从列表中检索头尾组件。erl_hd(list)
和erl_tl(list)
做同样的事情,但是检查这个论点真的是一个列表。
例子:
ETERM *list,*anAtom,*anInt;
anAtom = erl_mk_atom("madonna"
anInt = erl_mk_int(21
list = erl_mk_empty_list(
list = erl_cons(anAtom, list
list = erl_cons(anInt, list
... /* do some work */
erl_free_compound(list
ETERM *erl_copy_term(term)
类型
创建并返回Erlang项的副本。term
...
ETERM *erl_element(position, tuple)
类型
从Erlang元组中提取指定的元素。
position
指定要从哪个元素检索tuple
.元素编号从1开始。
tuple
是至少包含了一个Erlang项的position
元素。
返回与请求元素对应的新Erlang项,如果position大于元组的arity,则返回NULL。
ETERM *erl_hd(list)
类型
从列表中提取第一个元素。
list
是一个包含列表的Erlang术语。
返回与列表中的head head元素对应的Erlang项,或NULL
指针list
不是名单。
void erl_init(NULL, 0)
类型
类中的任何其他函数之前都必须调用此函数。Erl_Interface
库初始化库函数。参数必须指定为erl_init(NULL,0)
...
int erl_iolist_length(list)
类型
返回I/O列表的长度。
list
是包含I/O列表的Erlang术语。
返回列表的长度,如果列表不是I / O列表,则返回-1。
有关I/O列表的定义,请参见erl_iolist_to_binary
...
ETERM *erl_iolist_to_binary(term)
类型
将I/O列表转换为二进制术语。
list
是一个包含列表的Erlang术语。
返回Erlang二进制项,或如果list
不是I/O名单则返回NULL
非正式地说,I/O列表是可以发送到Erlang端口的字符和二进制文件的深层列表。在BNF中,I/O列表的正式定义如下:
iolist ::= []
| Binary
| [iohead | iolist]
;
iohead ::= Binary
| Byte (integer in the range [0..255])
| iolist
;
char *erl_iolist_to_string(list)
类型
将I/O列表转换为NULL
-终止C字符串。
list
是包含I/O列表的Erlang术语。I/O列表不能包含整数0,因为C字符串可能不包含此值,除非作为终止标记。
返回一个指向包含字符串的动态分配缓冲区的指针。 如果列表不是I / O列表,或者列表包含整数0,则返回NULL。 使用erl_free()释放分配的缓冲区是调用者的责任。
有关I/O列表的定义,请参见erl_iolist_to_binary
...
int erl_length(list)
类型
确定正确列表的长度。
list
是一个包含正确列表的Erlang术语。在适当的列表中,除了最后一个指向另一个列表单元格之外的所有尾部,以及最后一个尾部指向一个空列表。
如果列表不是正确的列表,则返回-1。
ETERM *erl_mk_atom(string)
类型
创造一个原子。
string
用于创建原子的字符序列。
返回包含原子的Erlang项。请注意,调用者有责任确保string
包含原子的有效名称。
ERL_ATOM_PTR(atom)和ERL_ATOM_PTR_UTF8(atom)可用于检索原子名称(作为NULL终止的字符串)。 ERL_ATOM_SIZE(atom)和ERL_ATOM_SIZE_UTF8(atom)返回原子名称的长度。
注
在Erlang / OTP R16中引入了UTF-8变体,并且返回的字符串在旧版本中ERL_ATOM_PTR(atom)
未被NULL
终止。
ETERM *erl_mk_binary(bptr, size)
类型
从包含字节序列的缓冲区生成Erlang二进制对象。
bptr
指向包含要转换的数据的缓冲区的指针。
size
表示bptr
...
返回一个Erlang二进制对象。
ERL_BIN_PTR(bin)
检索指向二进制数据的指针。ERL_BIN_SIZE(bin)
检索大小。
ETERM *erl_mk_empty_list()
创建并返回一个空的Erlang列表。注意NULL
不用于表示空列表;请使用此函数。
ETERM *erl_mk_estring(string, len)
类型
从字节序列创建列表。
string
包含字节序列的缓冲区。缓冲区不需要NULL
-终止。
len
是string
的长度
返回对应于中的字符序列的Erlang列表对象string
。
ETERM *erl_mk_float(f)
类型
创建一个Erlang浮子。
f
要转换为Erlang浮点数的值。
如果f不是有限的,则返回具有f或NULL指定值的Erlang浮点对象。
ERL_FLOAT_VALUE(t)
可以用于从Erlang浮点数中检索值。
ETERM *erl_mk_int(n)
类型
创建一个Erlang整数。
n
要转换为Erlan
g整数的值。
返回一个Erlan
g整数对象,该对象的值为n
...
ERL_INT_VALUE(t)
可以用于从Erlang整数中检索值。
ETERM *erl_mk_list(array, arrsize)
类型
从Erlang术语数组中创建一个Erlang列表,使列表中的每个元素对应于数组中的一个元素。
array
是一组Erlang术语。
- arrsize是数组中的元素的数量。
函数创建一个Erlang列表对象,其长度arrsize
中的术语中,哪些元素被摘除。array
...
ETERM *erl_mk_long_ref(node, n1, n2, n3, creation)
类型
创建一个Erlang引用,有82位。
node
C节点的名称。
- n1,n2和n3可以看作是一个大的数字n1 * 2 ^ 64 + n2 * 2 ^ 32 + n3,这对于为给定C节点创建的每个参考都是唯一选择的。
creation
是任意数字。
注意n3
和creation
由于精度有限,因此只使用这些数字的低18位和2位。
返回Erlang引用对象。
ERL_REF_NODE(ref)
,ERL_REF_NUMBERS(ref)
,ERL_REF_LEN(ref)
,和ERL_REF_CREATION(ref)
可被用于检索用于创建参考值。
ETERM *erl_mk_pid(node, number, serial, creation)
类型
创建一个Erlang进程标识符(pid)。Erlang进程希望与C节点通信时可以使用生成的pid。
node
C节点的名称。
number
,serial
与creation
是任意数字。请注意,这些数字的精度有限,因此只使用这些数字的低位15,3和2位。
返回Erlang PID对象。
ERL_PID_NODE(pid)
,ERL_PID_NUMBER(pid)
,ERL_PID_SERIAL(pid)
,和ERL_PID_CREATION(pid)
可用于获取用于创建PID四个值。
ETERM *erl_mk_port(node, number, creation)
类型
创建一个Erlang端口标识符。
node
C节点的名称。
number
和creation
是任意数字。请注意,它们的精度有限,因此只使用这些数字的低18位和2位。
返回一个Erlang端口对象。
ERL_PORT_NODE(port)
,ERL_PORT_NUMBER(port)
与ERL_PORT_CREATION
可以用来检索用于创建端口的三个值。
ETERM *erl_mk_ref(node, number, creation)
类型
创建一个只有18位的旧Erlang引用 - 用erl_mk_long_ref
代替。
node
C节点的名称。
number
为给定的C节点创建的每个引用都要唯一地选择。
creation
是任意数字。
注意number
和creation
由于精度有限,因此只使用这些数字的低18位和2位。
返回Erlang引用对象。
ERL_REF_NODE(ref)
,ERL_REF_NUMBER(ref)
与ERL_REF_CREATION(ref)
可以用于检索用于创建参考的三个值。
ETERM *erl_mk_string(string)
类型
创建一个列表。NULL
-终止字符串
string
是NULL
从中创建列表的终止字符序列(即,C字符串)。
返回一个Erlang列表。
ETERM *erl_mk_tuple(array, arrsize)
类型
从Erlang术语数组中创建一个Erlang元组。
array
是一组Erlang术语。
arrsize
中的元素数。array
...
该函数创建一个Erlang元组,size
其元素是从元素中取出的array
。
要检索一个元组的大小,可以使用erl_size函数(它检查选中的项的类型,适用于二进制和元组),或者ERL_TUPLE_SIZE(元组)返回元组的元数。 erl_size()做同样的事情,但它检查参数是一个元组。 erl_element(index,tuple)返回与元组中给定位置相对应的元素。
ETERM *erl_mk_uint(n)
类型
创建一个Erlang无符号整数。
n
要转换为Erlan
g无符号整数的值。
返回一个Erlan
g无符号整数对象,该对象的值为n
...
ERL_INT_UVALUE(t)
可用于从Erlang无符号整数中检索值。
ETERM *erl_mk_var(name)
类型
创建一个未绑定的Erlang变量。以后可以通过模式匹配或赋值绑定变量。
name
指定变量的名称。
返回一个具有名称的Erlang变量对象。name
...
int erl_print_term(stream, term)
类型
将指定的Erlang项打印到指定的输出流。
stream
指示函数要在何处发送其输出。
term
是要打印的Erlang术语。
返回在成功时写入的字符数,否则为负值。
void erl_set_compat_rel(release_number)
类型
默认情况下,Erl_Interface
库只能保证与其他Erlang/OTP组件兼容。Erl_Interface
图书馆本身。例如,Erl_Interface
在默认情况下,Erlang/OTP R10与Erlang/OTP R9的Erlang模拟器不兼容。
调用erl_set_compat_rel(release_number)
将Erl_Interface
库设置为发布的兼容模式release_number
。有效范围release_number
是7,当前版本。这使得与早期版本的Erlang / OTP组件进行通信成为可能。
注
如果调用此函数,则只能在函数调用后直接调用该函数erl_init()
。
警告
如果不小心使用此功能,您可能会遇到麻烦。始终确保所有通信组件要么来自同一个Erlang/OTP版本,要么来自X版和Y版,其中Y版的所有组件都处于X版的兼容模式。
int erl_size(term)
类型
返回Erlang元组的重要性或Erlang二进制对象中的字节数。
term
是Erlang元组或Erlang二进制对象。
返回如上所述的术语大小,如果术语不是两种支持类型之一,则返回-1。
ETERM *erl_tl(list)
类型
从列表中提取尾部。
list
是一个包含列表的Erlang术语。
返回与原始列表相对应的Erlang列表减去第一个元素,或者NULL
指针if list
不是列表。
ETERM *erl_var_content(term, name)
类型
以Erlang项返回指定变量的内容。
term
是一个Erlang术语。为了使此函数成功,term
必须是具有指定名称的Erlang变量,或者它必须是包含具有指定名称的变量的Erlang列表或元组。其他Erlang类型不能包含变量。
name
Erlang变量的名称。
返回与term中的name值相对应的Erlang对象。 如果在term中没有找到名称为name的变量,或者term不是有效的Erlang术语,则返回NULL。