Data::Reader本质上是一个kj::ArrayPtr<const kj::byte>.
Data::Builder本质上是一个kj::ArrayPtr<kj::byte>.
kj::byte是unsigned char.
kj::ArrayPtr本质上是一个指针/大小对。它实现operator[], size(), begin(),end()等begin()并end()返回原始指针,而不是特殊的迭代器类型。
建造:
UUID::Builder builder = ...;
kj::byte buf[16] = ...;
// option 1
builder.setData(kj::arrayPtr(buf, sizeof(buf)));
// option 2
memcpy(builder.initData(16).begin(), buf, 16);
阅读:
UUID::Reader reader = ...;
auto data = reader.getData();
// option 1
// void someFunction(kj::byte* ptr, size_t size)
someFunction(data.begin(), data.size());
// option 2
kj::byte buf[16];
KJ_REQUIRE(data.size() == sizeof(buf));
memcpy(buf, data.begin(), sizeof(buf));