contractsdk/cpp/xchain/basic_iterator.cc
(开头部分) 2KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
#include "xchain/xchain.h"
#include "xchain/basic_iterator.h"
#include "xchain/syscall.h"
#include "xchain/contract.pb.h"
namespace pb = xchain::contract::sdk;
namespace xchain {
Iterator::Iterator(const std::string& start, const std::string& limit, size_t cap) {
_cap = cap;
_start = start;
_limit = limit;
if (!load()) {
_it = -1;
} else {
_it = 0;
}
}
bool Iterator::load() {
_buf.clear();
if (_start == _limit) {
return false;
}
//每次多取一个作为下一次的主键
bool ok = range_query(_start, _limit, _cap + 1, &_buf);
if (!ok) {
error = Error(xchain::ErrorType::kErrIteratorLoad);
return false;
}
if (_buf.size() != 0) {
if (_buf.size() == _cap + 1) {
_start = (*(_buf.rbegin())).first;
_buf.pop_back();
} else {
_start = _limit;
//这个时候就已经结束了. 但是留到下次取的时候返回false
}
}
return true;
}
bool Iterator::next() {
bool ret = end();
if (ret) {
//只有最后一批结束的时候,才会走到这里
return false;
}
_cur_elem = &_buf[_it];
++_it;
if (end()) {
_last_one = *_cur_elem;
_cur_elem = &_last_one;
if (!load()) {
_it = -1;
} else {
_it = 0;
}
后面还有 31 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
