【OPENVX】对象基本使用之vx_array

1. 测试代码

#include <iostream>
#include <VX/vx.h>

// Array 是一个强类型的容器。该容器提供相同速度的随机访问。
// 它对自己的元素使用值语义并保存数据副本。以下是一个数组遍历

void print_array(vx_array array, char* message)
{
    std::cout << "===============================" << std::endl;
    std::cout << message << std::endl;

    vx_size num;
    vxQueryArray(array, VX_ARRAY_NUMITEMS, &num, sizeof(num));
    
    vx_enum type;
    vxQueryArray(array, VX_ARRAY_ITEMTYPE, &type, sizeof(type));
    
    vx_size capacity;
    vxQueryArray(array, VX_ARRAY_CAPACITY, &capacity, sizeof(capacity));

    vx_size item_size;
    vxQueryArray(array, VX_ARRAY_ITEMSIZE, &item_size, sizeof(item_size));

    std::cout << "num      : " << num << std::endl;
    std::cout << "type     : " << type << std::endl;
    std::cout << "capacity : " << capacity << std::endl;
    std::cout << "item_size: " << item_size << std::endl;

    vx_map_id map_id;
    vx_size size;
    void *ptr;

    vxMapArrayRange(array, 0, 5, &map_id, &size, &ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, VX_NOGAP_X);
    std::cout << "ptr      : " << ptr << std::endl;
    for (size_t i = 0; i < num; i++)
    {
        //std::cout << "index: " << i << ", value: " << (int)((uint8_t*)ptr)[i] << std::endl;
        std::cout << "index: " << i << ", value: " << (int)vxArrayItem(uint8_t, ptr, i, item_size) << std::endl;
    }
    vxUnmapArrayRange(array, map_id);
}

int main(int argc, char *argv[])
{
    vx_status status = VX_SUCCESS;
    vx_context context = vxCreateContext();

    // 创建数组,此时数组仅有容量,未有数据
    vx_array array = vxCreateArray(context, (vx_enum)VX_TYPE_INT8, 5);
    print_array(array, (char*)"create");

    // 添加元素
    uint8_t uint8_new_arr[]{5, 6, 7, 8, 9};
    vxAddArrayItems(array, 5, uint8_new_arr, sizeof(uint8_t));
    print_array(array, (char*)"add item");

    // 更新元素
    uint8_t uint8_init_arr[]{0, 1, 2, 3, 4};
    vxCopyArrayRange(array, 0, 5, sizeof(uint8_t), uint8_init_arr, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);

    print_array(array, (char*)"update item");

    // 再次增加元素,默认情况下,该函数不会重新分配内存。如果在添加元素之前,数组已满,或者剩余空间不足以存放新数据,返回VX_FAILURE
    uint8_t uint8_new_arr_again[]{5, 6, 7, 8, 9};
    status = vxAddArrayItems(array, 5, uint8_new_arr_again, sizeof(uint8_t));
    std::cout << "vxAddArrayItems: " << status << std::endl;
    print_array(array, (char*)"add items again");

    // 截断数组,重新分配数据内存。截断后的数据为随机值
    status = vxTruncateArray(array, 3);
    std::cout << "vxTruncateArray: " << status << std::endl;
    print_array(array, (char*)"truncate array");

    vxReleaseArray(&array);
    vxReleaseContext(&context);
    return EXIT_SUCCESS;
}

2. 运行结果

===============================
create
num : 0
type : 2
capacity : 5
item_size: 1
ptr : 0x7f12a99a53d6

===============================
add item
num : 5
type : 2
capacity : 5
item_size: 1
ptr : 0x55eba811e770
index: 0, value: 5
index: 1, value: 6
index: 2, value: 7
index: 3, value: 8
index: 4, value: 9

===============================
update item
num : 5
type : 2
capacity : 5
item_size: 1
ptr : 0x55eba811e770
index: 0, value: 0
index: 1, value: 1
index: 2, value: 2
index: 3, value: 3
index: 4, value: 4
vxAddArrayItems: -1

===============================
add items again
num : 5
type : 2
capacity : 5
item_size: 1
ptr : 0x55eba811e770
index: 0, value: 0
index: 1, value: 1
index: 2, value: 2
index: 3, value: 3
index: 4, value: 4
vxTruncateArray: 0

===============================
truncate array
num : 3
type : 2
capacity : 5
item_size: 1
ptr : 0x55eba78088b0
index: 0, value: 243
index: 1, value: 15
index: 2, value: 30

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhy29563

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值