Tensorlistgetitem
=================

从张量列表中获取指定索引的张量数据。该算子将输入张量列表中的特定元素复制到输出张量中，支持多种数据类型。

.. math::

    \text{output\_tensor} = \text{input\_tensor\_list}[\text{index}]

其中 `input_tensor_list` 是输入的张量列表，`index` 是要获取的元素索引，`output_tensor` 是输出张量。

输入：
    - **src** - 输入张量指针，指向要获取的张量数据。
    - **dst** - 输出张量指针，用于存储获取的张量数据。
    - **data_type** - 数据类型对应的字节数，如果为0，表示kTypeUnknown（未知类型）。
    - **length** - 元素个数，默认dst和src元素个数相等。
    - **core_mask** - 核掩码（int），仅共享存储版本需要。

输出：
    - **dst** - 输出张量指针，存储从输入张量列表获取的数据。

支持平台：
    ``FT78NE``
    ``MT7004``

.. note::
    - 该算子不区分具体的数据类型，数据类型信息通过data_type参数传递
    - 当data_type为0（kTypeUnknown）时，算子会将输出张量的内存清零
    - 当data_type不为0时，算子会按字节复制数据
    - 调用前需要确保dst指向的内存空间足够大（至少length个元素）

**共享存储版本：**

.. c:function:: void tensorlistgetitem_s(void *src, void *dst, int data_type, int length, int core_mask)

**C调用示例（共享存储版本）：**

.. code-block:: c
    :linenos:
    :emphasize-lines: 14

    //FT78NE示例
    #include <stdio.h>
    #include <tensorlistgetitem.h>

    int main(int argc, char* argv[]) {
        // 假设在DDR空间
        float *src = (float *)0xA0000000;  // 输入张量数据
        float *dst = (float *)0xB0000000;  // 输出张量数据
        int data_type = 4;  // float类型，4字节
        int length = 10;    // 10个元素
        int core_mask = 0xff;  // 核掩码
        
        // 调用共享存储版本的函数
        tensorlistgetitem_s(src, dst, data_type, length, core_mask);
        
        return 0;
    }

**共享存储版本：**

.. c:function:: void tensorlistgetitem_p(void *src, void *dst, int data_type, int length)

**C调用示例（私有存储版本）：**

.. code-block:: c
    :linenos:
    :emphasize-lines: 11

    #include <stdio.h>
    #include <tensorlistgetitem.h>

    int main(int argc, char* argv[]) {
        void *src = (void *)0x10000000;
        void *dst = (void *)0x10010000;
        int data_type = 0;  // kTypeUnknown
        int length = 10;    // 10个元素（以字节为单位）
        
        // 当data_type为0时，dst将被清零
        tensorlistgetitem_p(src, dst, data_type, length);
        
        return 0;
    }