How to use Critcl ByteArray?

时间:2019-04-23 15:05:28

标签: tcl

I want to try out Critcl to enhance memory performance using a 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 does not make me confident on how to do it.

How do I create and return a ByteArray (i.e. Z-order curve)?

Any caveats I should know about when using ByteArray?

1 个答案:

答案 0 :(得分:0)

根据文档,您应该改用bytes类型(当您获得指向具有len字段(其中包含字节数)和{{ 1}}字段,它是指向实际的只读字节块的指针。(由于我不知道的原因,它是s而不是char *。为什么?对我来说,这不是unsigned char *的另一个奥秘;在某些情况下确实如此,但是您需要查看const字段以找出答案。)

要返回字节数组,请使用o(或object)结果类型,并使用例如object0Tcl_NewByteArrayObj()来创建对象。 Tcl_NewObj()

这是一个简单的字节反转的示例(仅是命令定义)(因为我根本不了解Z阶曲线):

Tcl_SetByteArrayLength()

很自然,您需要先阅读Critcl usage guide,然后才能使用它,如果要产生错误(返回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; } ),请记住在口译员。您可以通过使用NULL作为使用Tcl_Interp* interp创建的命令的第一个伪参数来访问它(已记录了文档,但很容易错过)。