美文网首页
TVM内的Container(数据容器)学习

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

作者: 编程小猪 | 来源:发表于2022-01-29 16:14 被阅读0次

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

    tvm自定义的container有:

    (1)Array

    ArrayNode : Object
              : InplaceArrayBase<ArrayType, ElementType> 主要重载[],用于访问指定下标的数据
    { 
        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<String> opt = nullptr;
    Optional<String> opt2 = String("xyz")
    

    (5)ClosureObj 闭包的类型

    ClosureObj     : Object
    Closure        : ObjectRef
    

    (6)Map

    MapNode    : Object
    {
        using KVType = std::pair<ObjectRef, ObjectRef>;
        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(数据容器)学习

          本文链接:https://www.haomeiwen.com/subject/stcfkrtx.html