如何使用 Critcl ByteArray?
How to use Critcl ByteArray?
我想尝试使用 Critcl 来增强内存性能 Z-order curve for a 2d-grid. What I need from Critcl is allocation, setter, getter and some size info. Reading about the Critcl ByteArray and examples 没有让我对如何去做有信心。
如何创建和return ByteArray(即 Z 顺序曲线)?
使用 ByteArray 时我应该知道的任何注意事项?
根据文档,您应该改用 bytes
类型(当您获得指向结构的指针时,该结构具有 len
字段,其中包含字节数,并且s
字段是指向实际 只读 字节块的指针。(作为 char *
而不是 unsigned char *
因为我不知道的原因我不知道。为什么它不是 const
对我来说是另一个谜;在某些情况下确实如此,但您需要查看 o
字段才能弄清楚。)
要return 一个字节数组,您使用object
(或object0
)结果类型,并使对象具有例如Tcl_NewByteArrayObj()
,或Tcl_NewObj()
和 Tcl_SetByteArrayLength()
.
这是一个简单的字节反转示例(只是命令定义)(因为我根本不了解 Z 顺序曲线):
critcl::cproc example {bytes dataPtr} object0 {
Tcl_Obj *result = Tcl_NewObj();
unsigned char *targetBytes = Tcl_SetByteArrayLength(result, dataPtr->len);
for (int i = 0, j = dataPtr->len - 1; j >= 0; i++, j--) {
targetBytes[i] = (unsigned byte) dataPtr->s[j];
}
return result;
}
自然地,您需要阅读 Critcl usage guide 才能让它工作,如果您要产生错误(通过 returning NULL
),请记住在解释器中设置错误消息。您可以通过使用 Tcl_Interp* interp
作为您使用 critcl::cproc
创建的命令的第一个伪参数来访问它(已记录,但很容易错过)。
我想尝试使用 Critcl 来增强内存性能 Z-order curve for a 2d-grid. What I need from Critcl is allocation, setter, getter and some size info. Reading about the Critcl ByteArray and examples 没有让我对如何去做有信心。
如何创建和return ByteArray(即 Z 顺序曲线)?
使用 ByteArray 时我应该知道的任何注意事项?
根据文档,您应该改用 bytes
类型(当您获得指向结构的指针时,该结构具有 len
字段,其中包含字节数,并且s
字段是指向实际 只读 字节块的指针。(作为 char *
而不是 unsigned char *
因为我不知道的原因我不知道。为什么它不是 const
对我来说是另一个谜;在某些情况下确实如此,但您需要查看 o
字段才能弄清楚。)
要return 一个字节数组,您使用object
(或object0
)结果类型,并使对象具有例如Tcl_NewByteArrayObj()
,或Tcl_NewObj()
和 Tcl_SetByteArrayLength()
.
这是一个简单的字节反转示例(只是命令定义)(因为我根本不了解 Z 顺序曲线):
critcl::cproc example {bytes dataPtr} object0 {
Tcl_Obj *result = Tcl_NewObj();
unsigned char *targetBytes = Tcl_SetByteArrayLength(result, dataPtr->len);
for (int i = 0, j = dataPtr->len - 1; j >= 0; i++, j--) {
targetBytes[i] = (unsigned byte) dataPtr->s[j];
}
return result;
}
自然地,您需要阅读 Critcl usage guide 才能让它工作,如果您要产生错误(通过 returning NULL
),请记住在解释器中设置错误消息。您可以通过使用 Tcl_Interp* interp
作为您使用 critcl::cproc
创建的命令的第一个伪参数来访问它(已记录,但很容易错过)。