zeromq源码学习——array

来源:互联网 发布:烽火体育淘宝 编辑:程序博客网 时间:2024/06/11 03:56

zeromq实现了一个可以快速访问,插入,删除的数组,该数组只保存指针类型。所有可以保存在数组中的元素需要继承自array_item_t<ID>。ID参数可以用于把同一个对象指针保存在不同的数组中。

//仅仅保存了该元素在数组中的索引template <int ID = 0> class array_item_t{public:    inline array_item_t () :array_index (-1)    {    }    inline virtual ~array_item_t ()    {    }    inline void set_array_index (int index_)    {        array_index = index_;    }    inline int get_array_index ()    {        return array_index;    }private:    int array_index;    array_item_t (const array_item_t&);    const array_item_t &operator = (const array_item_t&);};

数组array_t中真实数据保存在一个std::vector数组中:

typedef std::vector <T*> items_t;items_t items;

插入数据,直接在数组最后压入:

inline void push_back (T *item_){    if (item_)        ((item_t*) item_)->set_array_index ((int) items.size ());    items.push_back (item_);}

主要是数据快速删除操作:

inline void erase (T *item_) {    erase (((item_t*) item_)->get_array_index ());}inline void erase (size_type index_) {    //将数组最后一个元素index设为要被移除位置    if (items.back ())        ((item_t*) items.back ())->set_array_index ((int) index_);    //最后一个元素覆盖被移除数据    items [index_] = items.back ();    //移除最后一个元素    items.pop_back ();}
原创粉丝点击