Как использовать Critcl ByteArray? - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу попробовать Critcl для повышения производительности памяти, используя Кривая Z-порядка для 2-мерной сетки.Что мне нужно от Critcl - это размещение, установка, получение и некоторая информация о размере. Чтение о примерах Critcl ByteArray и не дает мне уверенности в том, как это сделать.

Как создать и вернуть ByteArray (то есть кривую Z-порядка))?

Есть ли какие-либо предупреждения, о которых я должен знать при использовании ByteArray?

1 Ответ

0 голосов
/ 23 апреля 2019

Согласно документации, вы должны использовать вместо этого тип bytes (когда вы получаете указатель на структуру с полем len с количеством байтов в нем и полем s, котороеуказатель на фактический только для чтения блок байтов. (Как char *, а не unsigned char * по причинам, которые я не знаю. И почему это не const - еще одна загадкаменя, есть случаи, когда это действительно так, но вам нужно посмотреть на поле o, чтобы понять это.

Чтобы вернуть байтовый массив, вы используете 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 , когда это будет работать, и если вы собираетесьчтобы вызвать ошибки (возвращая NULL), не забудьте установить сообщение об ошибке в интерпретаторе.вы можете получить к нему доступ, используя Tcl_Interp* interp в качестве первого псевдо-аргумента для команды, которую вы создаете с помощью critcl::cproc (она задокументирована, но ее легко пропустить).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...