当前位置: 首页> 教育> 高考 > 境外电商平台排行榜_系统管理主要包括哪些内容_百度指数爬虫_成人职业技术培训学校

境外电商平台排行榜_系统管理主要包括哪些内容_百度指数爬虫_成人职业技术培训学校

时间:2025/7/10 22:05:07来源:https://blog.csdn.net/zhangsj1007/article/details/145537145 浏览次数:0次
境外电商平台排行榜_系统管理主要包括哪些内容_百度指数爬虫_成人职业技术培训学校

Iterator是Level DB中的一个基类,它定义了迭代器的基础的操作,同时对内存资源进行了维护。

虚函数

Iterator类中的虚函数操作如下:

  virtual ~Iterator();// An iterator is either positioned at a key/value pair, or// not valid.  This method returns true iff the iterator is valid.virtual bool Valid() const = 0;// Position at the first key in the source.  The iterator is Valid()// after this call iff the source is not empty.virtual void SeekToFirst() = 0;// Position at the last key in the source.  The iterator is// Valid() after this call iff the source is not empty.virtual void SeekToLast() = 0;// Position at the first key in the source that is at or past target.// The iterator is Valid() after this call iff the source contains// an entry that comes at or past target.virtual void Seek(const Slice& target) = 0;// Moves to the next entry in the source.  After this call, Valid() is// true iff the iterator was not positioned at the last entry in the source.// REQUIRES: Valid()virtual void Next() = 0;// Moves to the previous entry in the source.  After this call, Valid() is// true iff the iterator was not positioned at the first entry in source.// REQUIRES: Valid()virtual void Prev() = 0;// Return the key for the current entry.  The underlying storage for// the returned slice is valid only until the next modification of// the iterator.// REQUIRES: Valid()virtual Slice key() const = 0;// Return the value for the current entry.  The underlying storage for// the returned slice is valid only until the next modification of// the iterator.// REQUIRES: Valid()virtual Slice value() const = 0;// If an error has occurred, return it.  Else return an ok status.virtual Status status() const = 0;

注释给了详细的虚函数操作介绍,继承类需要实现这些虚函数。

RegisterCleanup

include/leveldb/iterator.h中声明了:

  // Clients are allowed to register function/arg1/arg2 triples that// will be invoked when this iterator is destroyed.//// Note that unlike all of the preceding methods, this method is// not abstract and therefore clients should not override it.using CleanupFunction = void (*)(void* arg1, void* arg2);void RegisterCleanup(CleanupFunction function, void* arg1, void* arg2);

 /table/iterator.cc中实现了RegisterCleanup

void Iterator::RegisterCleanup(CleanupFunction func, void* arg1, void* arg2) {assert(func != nullptr);CleanupNode* node;if (cleanup_head_.IsEmpty()) {node = &cleanup_head_;} else {node = new CleanupNode();node->next = cleanup_head_.next;cleanup_head_.next = node;}node->function = func;node->arg1 = arg1;node->arg2 = arg2;
}

Iterator中不光实现了迭代器的功能,同时它维护了一个资源的list(即cleanup_head_),在迭代器析构的时候,资源会被释放,而释放的方式是注册的clean up函数。

关键字:境外电商平台排行榜_系统管理主要包括哪些内容_百度指数爬虫_成人职业技术培训学校

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: