TVM内的Container(数据容器)学习

Container所在文件:tvm/runtime/container.h

tvm自定义的container有:

(1)Array

ArrayNode : Object
          : InplaceArrayBase 主要重载[],用于访问指定下标的数据
{ 
    m_func at(index)    //获取对应元素,与[]一样
    m_func begin()    //获取迭代器指针
    s_func CreateRepeated(n, ObjectRef val) //重复创建
    s_func Empty(n) // 创建空数组
    m_func size()    // 获取数组大小
}

Array    : ObjectRef // 对Object的引用,管理
{
    m_fun push_back(T item)    // 添加数据
    m_fun insert(iterator pos, val) // 插入Item
    m_fun pop_back() // 从末尾出一个元素
    m_fun erase(iterator i) // 删除元素
    m_fun resize(n)
    m_fun reserve(n)
    m_fun clear()
    m_fun set(i, value)
    m_fun Assign(IterType first, IterType last)    //初始化
}

 // 全局函数
 Array Concat(Array first, Array second)  // 函数拼接   
    
std::forward(...) // 原样转发参数
new (pointer) Class // placement new,在指针的内存位置创建对象,不用申请新空间

(2) ADT是一个可以指定tag的Tuple元组,只能创建,不能修改,使用[index]下标访问

ADTObject    : Object
             : InplaceArrayBase
{
    m_field tag;
    m_field size;
}

ADT          : ObjectRef
{
    m_func tag()
    m_func size()
    s_fun Tuple(....)
}
    
std::distance(iterator1, iterator2) // 长度

(3)String, 字符串实际上也是container,它也是Immutable的,只能创建,不能修改

StringObj    : Object
{
    m_field char * data
    m_field size
}

String    : ObjectRef
{
    m_func compare()
    m_func c_str() // 返回char*
    m_func size()
    m_func length() // 与size等价
    m_func empty() // 判空
    m_func char at(index)
    m_func char* data() // 与c_str等价
}

String支持=、+、<、>、<=、>=、== 加、赋值和比较运算

(4)Optional,表示一个可以为空的引用类型

Optional    : ObjectRef

// 实例:
Optional opt = nullptr;
Optional opt2 = String("xyz")

(5)ClosureObj 闭包的类型

ClosureObj     : Object
Closure        : ObjectRef

(6)Map

MapNode    : Object
{
    using KVType = std::pair;
    m_func size()
    m_func count(key)
    m_func value at(key) // 类似于map[key]
    m_func begin() / end()
    m_func iterator find(key)
    m_func erase(iterator pos)
    m_func erase(key) // 删除
    
    s_func Empty()your 
}

SmallMapNode    : MapNode
                : InplaceArrayBase
{
}

DenseMapNode    : MapNode
{
}

// MapNode内部实际上维护两个map,当数据量小时使用smallMapNode,当数据量大时,使用DenseMapNode

Map        : ObjectRef
{
    m_func at(key)
    m_func [key]
    m_func size()
    m_func count(key)
    m_func empty() // 判空
    m_func Set(key, value)
    m_func iterator begin() / end() / find(key)
    m_func erase(key)
}

你可能感兴趣的:(TVM内的Container(数据容器)学习)