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?
答案 0 :(得分:0)
根据文档,您应该改用bytes
类型(当您获得指向具有len
字段(其中包含字节数)和{{ 1}}字段,它是指向实际的只读字节块的指针。(由于我不知道的原因,它是s
而不是char *
。为什么?对我来说,这不是unsigned char *
的另一个奥秘;在某些情况下确实如此,但是您需要查看const
字段以找出答案。)
要返回字节数组,请使用o
(或object
)结果类型,并使用例如object0
或Tcl_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
创建的命令的第一个伪参数来访问它(已记录了文档,但很容易错过)。