Commit 76bda20e authored by Kenton Varda's avatar Kenton Varda

Factor Pointer{Reader,Builder} out from {Struct,List}{Reader,Builder}. Will…

Factor Pointer{Reader,Builder} out from {Struct,List}{Reader,Builder}.  Will make it easier to deal with Object fields.
parent 62d0d0d4
...@@ -581,7 +581,8 @@ private: ...@@ -581,7 +581,8 @@ private:
slot.offset, " * ::capnp::ELEMENTS) != 0"); slot.offset, " * ::capnp::ELEMENTS) != 0");
case Section::POINTERS: case Section::POINTERS:
return kj::strTree( return kj::strTree(
"!_reader.isPointerFieldNull(", slot.offset, " * ::capnp::POINTERS)"); "!_reader.getPointerField(", slot.offset,
" * ::capnp::POINTERS).isNull()");
} }
KJ_UNREACHABLE; KJ_UNREACHABLE;
}, "\n || "), ";\n" }, "\n || "), ";\n"
...@@ -599,7 +600,8 @@ private: ...@@ -599,7 +600,8 @@ private:
slot.offset, " * ::capnp::ELEMENTS) != 0"); slot.offset, " * ::capnp::ELEMENTS) != 0");
case Section::POINTERS: case Section::POINTERS:
return kj::strTree( return kj::strTree(
"!_builder.isPointerFieldNull(", slot.offset, " * ::capnp::POINTERS)"); "!_builder.getPointerField(", slot.offset,
" * ::capnp::POINTERS).isNull()");
} }
KJ_UNREACHABLE; KJ_UNREACHABLE;
}, "\n || "), ";\n" }, "\n || "), ";\n"
...@@ -624,7 +626,8 @@ private: ...@@ -624,7 +626,8 @@ private:
slot.offset, " * ::capnp::ELEMENTS, 0);\n"); slot.offset, " * ::capnp::ELEMENTS, 0);\n");
case Section::POINTERS: case Section::POINTERS:
return kj::strTree( return kj::strTree(
" _builder.clearPointer(", slot.offset, " * ::capnp::POINTERS);\n"); " _builder.getPointerField(", slot.offset,
" * ::capnp::POINTERS).clear();\n");
} }
KJ_UNREACHABLE; KJ_UNREACHABLE;
}, },
...@@ -835,11 +838,11 @@ private: ...@@ -835,11 +838,11 @@ private:
kj::mv(unionDiscrim.isDefs), kj::mv(unionDiscrim.isDefs),
"inline bool ", scope, "Reader::has", titleCase, "() const {\n", "inline bool ", scope, "Reader::has", titleCase, "() const {\n",
unionDiscrim.has, unionDiscrim.has,
" return !_reader.isPointerFieldNull(", offset, " * ::capnp::POINTERS);\n" " return !_reader.getPointerField(", offset, " * ::capnp::POINTERS).isNull();\n"
"}\n" "}\n"
"inline bool ", scope, "Builder::has", titleCase, "() {\n", "inline bool ", scope, "Builder::has", titleCase, "() {\n",
unionDiscrim.has, unionDiscrim.has,
" return !_builder.isPointerFieldNull(", offset, " * ::capnp::POINTERS);\n" " return !_builder.getPointerField(", offset, " * ::capnp::POINTERS).isNull();\n"
"}\n" "}\n"
"template <typename T>\n" "template <typename T>\n"
"inline typename T::Reader ", scope, "Reader::get", titleCase, "() const {\n", "inline typename T::Reader ", scope, "Reader::get", titleCase, "() const {\n",
...@@ -974,11 +977,11 @@ private: ...@@ -974,11 +977,11 @@ private:
kj::mv(unionDiscrim.isDefs), kj::mv(unionDiscrim.isDefs),
"inline bool ", scope, "Reader::has", titleCase, "() const {\n", "inline bool ", scope, "Reader::has", titleCase, "() const {\n",
unionDiscrim.has, unionDiscrim.has,
" return !_reader.isPointerFieldNull(", offset, " * ::capnp::POINTERS);\n" " return !_reader.getPointerField(", offset, " * ::capnp::POINTERS).isNull();\n"
"}\n" "}\n"
"inline bool ", scope, "Builder::has", titleCase, "() {\n", "inline bool ", scope, "Builder::has", titleCase, "() {\n",
unionDiscrim.has, unionDiscrim.has,
" return !_builder.isPointerFieldNull(", offset, " * ::capnp::POINTERS);\n" " return !_builder.getPointerField(", offset, " * ::capnp::POINTERS).isNull();\n"
"}\n" "}\n"
"inline ", type, "::Reader ", scope, "Reader::get", titleCase, "() const {\n", "inline ", type, "::Reader ", scope, "Reader::get", titleCase, "() const {\n",
unionDiscrim.check, unionDiscrim.check,
......
This diff is collapsed.
...@@ -494,11 +494,11 @@ inline bool Token::Builder::isIdentifier() { ...@@ -494,11 +494,11 @@ inline bool Token::Builder::isIdentifier() {
} }
inline bool Token::Reader::hasIdentifier() const { inline bool Token::Reader::hasIdentifier() const {
if (which() != Token::IDENTIFIER) return false; if (which() != Token::IDENTIFIER) return false;
return !_reader.isPointerFieldNull(0 * ::capnp::POINTERS); return !_reader.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline bool Token::Builder::hasIdentifier() { inline bool Token::Builder::hasIdentifier() {
if (which() != Token::IDENTIFIER) return false; if (which() != Token::IDENTIFIER) return false;
return !_builder.isPointerFieldNull(0 * ::capnp::POINTERS); return !_builder.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline ::capnp::Text::Reader Token::Reader::getIdentifier() const { inline ::capnp::Text::Reader Token::Reader::getIdentifier() const {
KJ_IREQUIRE(which() == Token::IDENTIFIER, KJ_IREQUIRE(which() == Token::IDENTIFIER,
...@@ -546,11 +546,11 @@ inline bool Token::Builder::isStringLiteral() { ...@@ -546,11 +546,11 @@ inline bool Token::Builder::isStringLiteral() {
} }
inline bool Token::Reader::hasStringLiteral() const { inline bool Token::Reader::hasStringLiteral() const {
if (which() != Token::STRING_LITERAL) return false; if (which() != Token::STRING_LITERAL) return false;
return !_reader.isPointerFieldNull(0 * ::capnp::POINTERS); return !_reader.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline bool Token::Builder::hasStringLiteral() { inline bool Token::Builder::hasStringLiteral() {
if (which() != Token::STRING_LITERAL) return false; if (which() != Token::STRING_LITERAL) return false;
return !_builder.isPointerFieldNull(0 * ::capnp::POINTERS); return !_builder.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline ::capnp::Text::Reader Token::Reader::getStringLiteral() const { inline ::capnp::Text::Reader Token::Reader::getStringLiteral() const {
KJ_IREQUIRE(which() == Token::STRING_LITERAL, KJ_IREQUIRE(which() == Token::STRING_LITERAL,
...@@ -668,11 +668,11 @@ inline bool Token::Builder::isOperator() { ...@@ -668,11 +668,11 @@ inline bool Token::Builder::isOperator() {
} }
inline bool Token::Reader::hasOperator() const { inline bool Token::Reader::hasOperator() const {
if (which() != Token::OPERATOR) return false; if (which() != Token::OPERATOR) return false;
return !_reader.isPointerFieldNull(0 * ::capnp::POINTERS); return !_reader.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline bool Token::Builder::hasOperator() { inline bool Token::Builder::hasOperator() {
if (which() != Token::OPERATOR) return false; if (which() != Token::OPERATOR) return false;
return !_builder.isPointerFieldNull(0 * ::capnp::POINTERS); return !_builder.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline ::capnp::Text::Reader Token::Reader::getOperator() const { inline ::capnp::Text::Reader Token::Reader::getOperator() const {
KJ_IREQUIRE(which() == Token::OPERATOR, KJ_IREQUIRE(which() == Token::OPERATOR,
...@@ -720,11 +720,11 @@ inline bool Token::Builder::isParenthesizedList() { ...@@ -720,11 +720,11 @@ inline bool Token::Builder::isParenthesizedList() {
} }
inline bool Token::Reader::hasParenthesizedList() const { inline bool Token::Reader::hasParenthesizedList() const {
if (which() != Token::PARENTHESIZED_LIST) return false; if (which() != Token::PARENTHESIZED_LIST) return false;
return !_reader.isPointerFieldNull(0 * ::capnp::POINTERS); return !_reader.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline bool Token::Builder::hasParenthesizedList() { inline bool Token::Builder::hasParenthesizedList() {
if (which() != Token::PARENTHESIZED_LIST) return false; if (which() != Token::PARENTHESIZED_LIST) return false;
return !_builder.isPointerFieldNull(0 * ::capnp::POINTERS); return !_builder.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline ::capnp::List< ::capnp::List< ::capnp::compiler::Token>>::Reader Token::Reader::getParenthesizedList() const { inline ::capnp::List< ::capnp::List< ::capnp::compiler::Token>>::Reader Token::Reader::getParenthesizedList() const {
KJ_IREQUIRE(which() == Token::PARENTHESIZED_LIST, KJ_IREQUIRE(which() == Token::PARENTHESIZED_LIST,
...@@ -778,11 +778,11 @@ inline bool Token::Builder::isBracketedList() { ...@@ -778,11 +778,11 @@ inline bool Token::Builder::isBracketedList() {
} }
inline bool Token::Reader::hasBracketedList() const { inline bool Token::Reader::hasBracketedList() const {
if (which() != Token::BRACKETED_LIST) return false; if (which() != Token::BRACKETED_LIST) return false;
return !_reader.isPointerFieldNull(0 * ::capnp::POINTERS); return !_reader.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline bool Token::Builder::hasBracketedList() { inline bool Token::Builder::hasBracketedList() {
if (which() != Token::BRACKETED_LIST) return false; if (which() != Token::BRACKETED_LIST) return false;
return !_builder.isPointerFieldNull(0 * ::capnp::POINTERS); return !_builder.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline ::capnp::List< ::capnp::List< ::capnp::compiler::Token>>::Reader Token::Reader::getBracketedList() const { inline ::capnp::List< ::capnp::List< ::capnp::compiler::Token>>::Reader Token::Reader::getBracketedList() const {
KJ_IREQUIRE(which() == Token::BRACKETED_LIST, KJ_IREQUIRE(which() == Token::BRACKETED_LIST,
...@@ -878,10 +878,10 @@ inline Statement::Which Statement::Builder::which() { ...@@ -878,10 +878,10 @@ inline Statement::Which Statement::Builder::which() {
} }
inline bool Statement::Reader::hasTokens() const { inline bool Statement::Reader::hasTokens() const {
return !_reader.isPointerFieldNull(0 * ::capnp::POINTERS); return !_reader.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline bool Statement::Builder::hasTokens() { inline bool Statement::Builder::hasTokens() {
return !_builder.isPointerFieldNull(0 * ::capnp::POINTERS); return !_builder.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline ::capnp::List< ::capnp::compiler::Token>::Reader Statement::Reader::getTokens() const { inline ::capnp::List< ::capnp::compiler::Token>::Reader Statement::Reader::getTokens() const {
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::compiler::Token>>::get( return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::compiler::Token>>::get(
...@@ -952,11 +952,11 @@ inline bool Statement::Builder::isBlock() { ...@@ -952,11 +952,11 @@ inline bool Statement::Builder::isBlock() {
} }
inline bool Statement::Reader::hasBlock() const { inline bool Statement::Reader::hasBlock() const {
if (which() != Statement::BLOCK) return false; if (which() != Statement::BLOCK) return false;
return !_reader.isPointerFieldNull(1 * ::capnp::POINTERS); return !_reader.getPointerField(1 * ::capnp::POINTERS).isNull();
} }
inline bool Statement::Builder::hasBlock() { inline bool Statement::Builder::hasBlock() {
if (which() != Statement::BLOCK) return false; if (which() != Statement::BLOCK) return false;
return !_builder.isPointerFieldNull(1 * ::capnp::POINTERS); return !_builder.getPointerField(1 * ::capnp::POINTERS).isNull();
} }
inline ::capnp::List< ::capnp::compiler::Statement>::Reader Statement::Reader::getBlock() const { inline ::capnp::List< ::capnp::compiler::Statement>::Reader Statement::Reader::getBlock() const {
KJ_IREQUIRE(which() == Statement::BLOCK, KJ_IREQUIRE(which() == Statement::BLOCK,
...@@ -997,10 +997,10 @@ inline ::capnp::Orphan< ::capnp::List< ::capnp::compiler::Statement>> Statement: ...@@ -997,10 +997,10 @@ inline ::capnp::Orphan< ::capnp::List< ::capnp::compiler::Statement>> Statement:
} }
inline bool Statement::Reader::hasDocComment() const { inline bool Statement::Reader::hasDocComment() const {
return !_reader.isPointerFieldNull(2 * ::capnp::POINTERS); return !_reader.getPointerField(2 * ::capnp::POINTERS).isNull();
} }
inline bool Statement::Builder::hasDocComment() { inline bool Statement::Builder::hasDocComment() {
return !_builder.isPointerFieldNull(2 * ::capnp::POINTERS); return !_builder.getPointerField(2 * ::capnp::POINTERS).isNull();
} }
inline ::capnp::Text::Reader Statement::Reader::getDocComment() const { inline ::capnp::Text::Reader Statement::Reader::getDocComment() const {
return ::capnp::_::PointerHelpers< ::capnp::Text>::get( return ::capnp::_::PointerHelpers< ::capnp::Text>::get(
...@@ -1071,10 +1071,10 @@ inline void Statement::Builder::setEndByte( ::uint32_t value) { ...@@ -1071,10 +1071,10 @@ inline void Statement::Builder::setEndByte( ::uint32_t value) {
} }
inline bool LexedTokens::Reader::hasTokens() const { inline bool LexedTokens::Reader::hasTokens() const {
return !_reader.isPointerFieldNull(0 * ::capnp::POINTERS); return !_reader.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline bool LexedTokens::Builder::hasTokens() { inline bool LexedTokens::Builder::hasTokens() {
return !_builder.isPointerFieldNull(0 * ::capnp::POINTERS); return !_builder.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline ::capnp::List< ::capnp::compiler::Token>::Reader LexedTokens::Reader::getTokens() const { inline ::capnp::List< ::capnp::compiler::Token>::Reader LexedTokens::Reader::getTokens() const {
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::compiler::Token>>::get( return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::compiler::Token>>::get(
...@@ -1103,10 +1103,10 @@ inline ::capnp::Orphan< ::capnp::List< ::capnp::compiler::Token>> LexedTokens::B ...@@ -1103,10 +1103,10 @@ inline ::capnp::Orphan< ::capnp::List< ::capnp::compiler::Token>> LexedTokens::B
} }
inline bool LexedStatements::Reader::hasStatements() const { inline bool LexedStatements::Reader::hasStatements() const {
return !_reader.isPointerFieldNull(0 * ::capnp::POINTERS); return !_reader.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline bool LexedStatements::Builder::hasStatements() { inline bool LexedStatements::Builder::hasStatements() {
return !_builder.isPointerFieldNull(0 * ::capnp::POINTERS); return !_builder.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline ::capnp::List< ::capnp::compiler::Statement>::Reader LexedStatements::Reader::getStatements() const { inline ::capnp::List< ::capnp::compiler::Statement>::Reader LexedStatements::Reader::getStatements() const {
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::compiler::Statement>>::get( return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::compiler::Statement>>::get(
......
This diff is collapsed.
...@@ -964,11 +964,11 @@ struct PointerHelpers<DynamicStruct, Kind::UNKNOWN> { ...@@ -964,11 +964,11 @@ struct PointerHelpers<DynamicStruct, Kind::UNKNOWN> {
StructBuilder builder, WirePointerCount index, StructSchema schema); StructBuilder builder, WirePointerCount index, StructSchema schema);
static inline void adopt(StructBuilder builder, WirePointerCount index, static inline void adopt(StructBuilder builder, WirePointerCount index,
Orphan<DynamicStruct>&& value) { Orphan<DynamicStruct>&& value) {
builder.adopt(index, kj::mv(value.builder)); builder.getPointerField(index).adopt(kj::mv(value.builder));
} }
static inline Orphan<DynamicStruct> disown(StructBuilder builder, WirePointerCount index, static inline Orphan<DynamicStruct> disown(StructBuilder builder, WirePointerCount index,
StructSchema schema) { StructSchema schema) {
return Orphan<DynamicStruct>(schema, builder.disown(index)); return Orphan<DynamicStruct>(schema, builder.getPointerField(index).disown());
} }
}; };
...@@ -987,11 +987,11 @@ struct PointerHelpers<DynamicList, Kind::UNKNOWN> { ...@@ -987,11 +987,11 @@ struct PointerHelpers<DynamicList, Kind::UNKNOWN> {
StructBuilder builder, WirePointerCount index, ListSchema schema, uint size); StructBuilder builder, WirePointerCount index, ListSchema schema, uint size);
static inline void adopt(StructBuilder builder, WirePointerCount index, static inline void adopt(StructBuilder builder, WirePointerCount index,
Orphan<DynamicList>&& value) { Orphan<DynamicList>&& value) {
builder.adopt(index, kj::mv(value.builder)); builder.getPointerField(index).adopt(kj::mv(value.builder));
} }
static inline Orphan<DynamicList> disown(StructBuilder builder, WirePointerCount index, static inline Orphan<DynamicList> disown(StructBuilder builder, WirePointerCount index,
ListSchema schema) { ListSchema schema) {
return Orphan<DynamicList>(schema, builder.disown(index)); return Orphan<DynamicList>(schema, builder.getPointerField(index).disown());
} }
}; };
...@@ -1003,10 +1003,10 @@ struct PointerHelpers<DynamicObject, Kind::UNKNOWN> { ...@@ -1003,10 +1003,10 @@ struct PointerHelpers<DynamicObject, Kind::UNKNOWN> {
StructBuilder builder, WirePointerCount index, const DynamicObject::Reader& value); StructBuilder builder, WirePointerCount index, const DynamicObject::Reader& value);
static inline void adopt(StructBuilder builder, WirePointerCount index, static inline void adopt(StructBuilder builder, WirePointerCount index,
Orphan<DynamicObject>&& value) { Orphan<DynamicObject>&& value) {
builder.adopt(index, kj::mv(value.builder)); builder.getPointerField(index).adopt(kj::mv(value.builder));
} }
static inline Orphan<DynamicObject> disown(StructBuilder builder, WirePointerCount index) { static inline Orphan<DynamicObject> disown(StructBuilder builder, WirePointerCount index) {
return Orphan<DynamicObject>(builder.disown(index)); return Orphan<DynamicObject>(builder.getPointerField(index).disown());
} }
}; };
......
...@@ -47,24 +47,25 @@ template <typename T> ...@@ -47,24 +47,25 @@ template <typename T>
struct PointerHelpers<T, Kind::STRUCT> { struct PointerHelpers<T, Kind::STRUCT> {
static inline typename T::Reader get(StructReader reader, WirePointerCount index, static inline typename T::Reader get(StructReader reader, WirePointerCount index,
const word* defaultValue = nullptr) { const word* defaultValue = nullptr) {
return typename T::Reader(reader.getStructField(index, defaultValue)); return typename T::Reader(reader.getPointerField(index).getStruct(defaultValue));
} }
static inline typename T::Builder get(StructBuilder builder, WirePointerCount index, static inline typename T::Builder get(StructBuilder builder, WirePointerCount index,
const word* defaultValue = nullptr) { const word* defaultValue = nullptr) {
return typename T::Builder(builder.getStructField(index, structSize<T>(), defaultValue)); return typename T::Builder(
builder.getPointerField(index).getStruct(structSize<T>(), defaultValue));
} }
static inline void set(StructBuilder builder, WirePointerCount index, static inline void set(StructBuilder builder, WirePointerCount index,
typename T::Reader value) { typename T::Reader value) {
builder.setStructField(index, value._reader); builder.getPointerField(index).setStruct(value._reader);
} }
static inline typename T::Builder init(StructBuilder builder, WirePointerCount index) { static inline typename T::Builder init(StructBuilder builder, WirePointerCount index) {
return typename T::Builder(builder.initStructField(index, structSize<T>())); return typename T::Builder(builder.getPointerField(index).initStruct(structSize<T>()));
} }
static inline void adopt(StructBuilder builder, WirePointerCount index, Orphan<T>&& value) { static inline void adopt(StructBuilder builder, WirePointerCount index, Orphan<T>&& value) {
builder.adopt(index, kj::mv(value.builder)); builder.getPointerField(index).adopt(kj::mv(value.builder));
} }
static inline Orphan<T> disown(StructBuilder builder, WirePointerCount index) { static inline Orphan<T> disown(StructBuilder builder, WirePointerCount index) {
return Orphan<T>(builder.disown(index)); return Orphan<T>(builder.getPointerField(index).disown());
} }
}; };
...@@ -80,7 +81,7 @@ struct PointerHelpers<List<T>, Kind::LIST> { ...@@ -80,7 +81,7 @@ struct PointerHelpers<List<T>, Kind::LIST> {
} }
static inline void set(StructBuilder builder, WirePointerCount index, static inline void set(StructBuilder builder, WirePointerCount index,
typename List<T>::Reader value) { typename List<T>::Reader value) {
builder.setListField(index, value.reader); builder.getPointerField(index).setList(value.reader);
} }
template <typename U> template <typename U>
static void set(StructBuilder builder, WirePointerCount index, std::initializer_list<U> value) { static void set(StructBuilder builder, WirePointerCount index, std::initializer_list<U> value) {
...@@ -95,10 +96,10 @@ struct PointerHelpers<List<T>, Kind::LIST> { ...@@ -95,10 +96,10 @@ struct PointerHelpers<List<T>, Kind::LIST> {
return typename List<T>::Builder(List<T>::initAsFieldOf(builder, index, size)); return typename List<T>::Builder(List<T>::initAsFieldOf(builder, index, size));
} }
static inline void adopt(StructBuilder builder, WirePointerCount index, Orphan<List<T>>&& value) { static inline void adopt(StructBuilder builder, WirePointerCount index, Orphan<List<T>>&& value) {
builder.adopt(index, kj::mv(value.builder)); builder.getPointerField(index).adopt(kj::mv(value.builder));
} }
static inline Orphan<List<T>> disown(StructBuilder builder, WirePointerCount index) { static inline Orphan<List<T>> disown(StructBuilder builder, WirePointerCount index) {
return Orphan<List<T>>(builder.disown(index)); return Orphan<List<T>>(builder.getPointerField(index).disown());
} }
}; };
...@@ -107,24 +108,24 @@ struct PointerHelpers<T, Kind::BLOB> { ...@@ -107,24 +108,24 @@ struct PointerHelpers<T, Kind::BLOB> {
static inline typename T::Reader get(StructReader reader, WirePointerCount index, static inline typename T::Reader get(StructReader reader, WirePointerCount index,
const void* defaultValue = nullptr, const void* defaultValue = nullptr,
uint defaultBytes = 0) { uint defaultBytes = 0) {
return reader.getBlobField<T>(index, defaultValue, defaultBytes * BYTES); return reader.getPointerField(index).getBlob<T>(defaultValue, defaultBytes * BYTES);
} }
static inline typename T::Builder get(StructBuilder builder, WirePointerCount index, static inline typename T::Builder get(StructBuilder builder, WirePointerCount index,
const void* defaultValue = nullptr, const void* defaultValue = nullptr,
uint defaultBytes = 0) { uint defaultBytes = 0) {
return builder.getBlobField<T>(index, defaultValue, defaultBytes * BYTES); return builder.getPointerField(index).getBlob<T>(defaultValue, defaultBytes * BYTES);
} }
static inline void set(StructBuilder builder, WirePointerCount index, typename T::Reader value) { static inline void set(StructBuilder builder, WirePointerCount index, typename T::Reader value) {
builder.setBlobField<T>(index, value); builder.getPointerField(index).setBlob<T>(value);
} }
static inline typename T::Builder init(StructBuilder builder, WirePointerCount index, uint size) { static inline typename T::Builder init(StructBuilder builder, WirePointerCount index, uint size) {
return builder.initBlobField<T>(index, size * BYTES); return builder.getPointerField(index).initBlob<T>(size * BYTES);
} }
static inline void adopt(StructBuilder builder, WirePointerCount index, Orphan<T>&& value) { static inline void adopt(StructBuilder builder, WirePointerCount index, Orphan<T>&& value) {
builder.adopt(index, kj::mv(value.builder)); builder.getPointerField(index).adopt(kj::mv(value.builder));
} }
static inline Orphan<T> disown(StructBuilder builder, WirePointerCount index) { static inline Orphan<T> disown(StructBuilder builder, WirePointerCount index) {
return Orphan<T>(builder.disown(index)); return Orphan<T>(builder.getPointerField(index).disown());
} }
}; };
...@@ -139,7 +140,7 @@ struct PointerHelpers<UncheckedMessage> { ...@@ -139,7 +140,7 @@ struct PointerHelpers<UncheckedMessage> {
// encoded schemas. // encoded schemas.
static inline const word* get(StructReader reader, WirePointerCount index) { static inline const word* get(StructReader reader, WirePointerCount index) {
return reader.getUncheckedPointer(index); return reader.getPointerField(index).getUnchecked();
} }
}; };
......
...@@ -120,13 +120,14 @@ static void setupStruct(StructBuilder builder) { ...@@ -120,13 +120,14 @@ static void setupStruct(StructBuilder builder) {
builder.setDataField<bool>(127 * ELEMENTS, false); builder.setDataField<bool>(127 * ELEMENTS, false);
{ {
StructBuilder subStruct = builder.initStructField( StructBuilder subStruct = builder.getPointerField(0 * POINTERS).initStruct(
0 * POINTERS, StructSize(1 * WORDS, 0 * POINTERS, FieldSize::EIGHT_BYTES)); StructSize(1 * WORDS, 0 * POINTERS, FieldSize::EIGHT_BYTES));
subStruct.setDataField<uint32_t>(0 * ELEMENTS, 123); subStruct.setDataField<uint32_t>(0 * ELEMENTS, 123);
} }
{ {
ListBuilder list = builder.initListField(1 * POINTERS, FieldSize::FOUR_BYTES, 3 * ELEMENTS); ListBuilder list = builder.getPointerField(1 * POINTERS)
.initList(FieldSize::FOUR_BYTES, 3 * ELEMENTS);
EXPECT_EQ(3 * ELEMENTS, list.size()); EXPECT_EQ(3 * ELEMENTS, list.size());
list.setDataElement<int32_t>(0 * ELEMENTS, 200); list.setDataElement<int32_t>(0 * ELEMENTS, 200);
list.setDataElement<int32_t>(1 * ELEMENTS, 201); list.setDataElement<int32_t>(1 * ELEMENTS, 201);
...@@ -134,24 +135,25 @@ static void setupStruct(StructBuilder builder) { ...@@ -134,24 +135,25 @@ static void setupStruct(StructBuilder builder) {
} }
{ {
ListBuilder list = builder.initStructListField( ListBuilder list = builder.getPointerField(2 * POINTERS).initStructList(
2 * POINTERS, 4 * ELEMENTS, STRUCTLIST_ELEMENT_SIZE); 4 * ELEMENTS, STRUCTLIST_ELEMENT_SIZE);
EXPECT_EQ(4 * ELEMENTS, list.size()); EXPECT_EQ(4 * ELEMENTS, list.size());
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
StructBuilder element = list.getStructElement(i * ELEMENTS); StructBuilder element = list.getStructElement(i * ELEMENTS);
element.setDataField<int32_t>(0 * ELEMENTS, 300 + i); element.setDataField<int32_t>(0 * ELEMENTS, 300 + i);
element.initStructField(0 * POINTERS, element.getPointerField(0 * POINTERS)
StructSize(1 * WORDS, 0 * POINTERS, FieldSize::EIGHT_BYTES)) .initStruct(StructSize(1 * WORDS, 0 * POINTERS, FieldSize::EIGHT_BYTES))
.setDataField<int32_t>(0 * ELEMENTS, 400 + i); .setDataField<int32_t>(0 * ELEMENTS, 400 + i);
} }
} }
{ {
ListBuilder list = builder.initListField(3 * POINTERS, FieldSize::POINTER, 5 * ELEMENTS); ListBuilder list = builder.getPointerField(3 * POINTERS)
.initList(FieldSize::POINTER, 5 * ELEMENTS);
EXPECT_EQ(5 * ELEMENTS, list.size()); EXPECT_EQ(5 * ELEMENTS, list.size());
for (uint i = 0; i < 5; i++) { for (uint i = 0; i < 5; i++) {
ListBuilder element = list.initListElement( ListBuilder element = list.getPointerElement(i * ELEMENTS)
i * ELEMENTS, FieldSize::TWO_BYTES, (i + 1) * ELEMENTS); .initList(FieldSize::TWO_BYTES, (i + 1) * ELEMENTS);
EXPECT_EQ((i + 1) * ELEMENTS, element.size()); EXPECT_EQ((i + 1) * ELEMENTS, element.size());
for (uint j = 0; j <= i; j++) { for (uint j = 0; j <= i; j++) {
element.setDataElement<uint16_t>(j * ELEMENTS, 500 + j); element.setDataElement<uint16_t>(j * ELEMENTS, 500 + j);
...@@ -175,14 +177,15 @@ static void checkStruct(StructBuilder builder) { ...@@ -175,14 +177,15 @@ static void checkStruct(StructBuilder builder) {
EXPECT_FALSE(builder.getDataField<bool>(127 * ELEMENTS)); EXPECT_FALSE(builder.getDataField<bool>(127 * ELEMENTS));
{ {
StructBuilder subStruct = builder.getStructField( StructBuilder subStruct = builder.getPointerField(0 * POINTERS).getStruct(
0 * POINTERS, StructSize(1 * WORDS, 0 * POINTERS, FieldSize::EIGHT_BYTES), StructSize(1 * WORDS, 0 * POINTERS, FieldSize::EIGHT_BYTES),
SUBSTRUCT_DEFAULT.words); SUBSTRUCT_DEFAULT.words);
EXPECT_EQ(123u, subStruct.getDataField<uint32_t>(0 * ELEMENTS)); EXPECT_EQ(123u, subStruct.getDataField<uint32_t>(0 * ELEMENTS));
} }
{ {
ListBuilder list = builder.getListField(1 * POINTERS, FieldSize::FOUR_BYTES, nullptr); ListBuilder list = builder.getPointerField(1 * POINTERS)
.getList(FieldSize::FOUR_BYTES, nullptr);
ASSERT_EQ(3 * ELEMENTS, list.size()); ASSERT_EQ(3 * ELEMENTS, list.size());
EXPECT_EQ(200, list.getDataElement<int32_t>(0 * ELEMENTS)); EXPECT_EQ(200, list.getDataElement<int32_t>(0 * ELEMENTS));
EXPECT_EQ(201, list.getDataElement<int32_t>(1 * ELEMENTS)); EXPECT_EQ(201, list.getDataElement<int32_t>(1 * ELEMENTS));
...@@ -190,24 +193,26 @@ static void checkStruct(StructBuilder builder) { ...@@ -190,24 +193,26 @@ static void checkStruct(StructBuilder builder) {
} }
{ {
ListBuilder list = builder.getStructListField(2 * POINTERS, STRUCTLIST_ELEMENT_SIZE, nullptr); ListBuilder list = builder.getPointerField(2 * POINTERS)
.getStructList(STRUCTLIST_ELEMENT_SIZE, nullptr);
ASSERT_EQ(4 * ELEMENTS, list.size()); ASSERT_EQ(4 * ELEMENTS, list.size());
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
StructBuilder element = list.getStructElement(i * ELEMENTS); StructBuilder element = list.getStructElement(i * ELEMENTS);
EXPECT_EQ(300 + i, element.getDataField<int32_t>(0 * ELEMENTS)); EXPECT_EQ(300 + i, element.getDataField<int32_t>(0 * ELEMENTS));
EXPECT_EQ(400 + i, EXPECT_EQ(400 + i,
element.getStructField(0 * POINTERS, element.getPointerField(0 * POINTERS)
StructSize(1 * WORDS, 0 * POINTERS, FieldSize::EIGHT_BYTES), .getStruct(StructSize(1 * WORDS, 0 * POINTERS, FieldSize::EIGHT_BYTES),
STRUCTLIST_ELEMENT_SUBSTRUCT_DEFAULT.words) STRUCTLIST_ELEMENT_SUBSTRUCT_DEFAULT.words)
.getDataField<int32_t>(0 * ELEMENTS)); .getDataField<int32_t>(0 * ELEMENTS));
} }
} }
{ {
ListBuilder list = builder.getListField(3 * POINTERS, FieldSize::POINTER, nullptr); ListBuilder list = builder.getPointerField(3 * POINTERS).getList(FieldSize::POINTER, nullptr);
ASSERT_EQ(5 * ELEMENTS, list.size()); ASSERT_EQ(5 * ELEMENTS, list.size());
for (uint i = 0; i < 5; i++) { for (uint i = 0; i < 5; i++) {
ListBuilder element = list.getListElement(i * ELEMENTS, FieldSize::TWO_BYTES); ListBuilder element = list.getPointerElement(i * ELEMENTS)
.getList(FieldSize::TWO_BYTES, nullptr);
ASSERT_EQ((i + 1) * ELEMENTS, element.size()); ASSERT_EQ((i + 1) * ELEMENTS, element.size());
for (uint j = 0; j <= i; j++) { for (uint j = 0; j <= i; j++) {
EXPECT_EQ(500u + j, element.getDataElement<uint16_t>(j * ELEMENTS)); EXPECT_EQ(500u + j, element.getDataElement<uint16_t>(j * ELEMENTS));
...@@ -231,12 +236,13 @@ static void checkStruct(StructReader reader) { ...@@ -231,12 +236,13 @@ static void checkStruct(StructReader reader) {
EXPECT_FALSE(reader.getDataField<bool>(127 * ELEMENTS)); EXPECT_FALSE(reader.getDataField<bool>(127 * ELEMENTS));
{ {
StructReader subStruct = reader.getStructField(0 * POINTERS, SUBSTRUCT_DEFAULT.words); StructReader subStruct = reader.getPointerField(0 * POINTERS)
.getStruct(SUBSTRUCT_DEFAULT.words);
EXPECT_EQ(123u, subStruct.getDataField<uint32_t>(0 * ELEMENTS)); EXPECT_EQ(123u, subStruct.getDataField<uint32_t>(0 * ELEMENTS));
} }
{ {
ListReader list = reader.getListField(1 * POINTERS, FieldSize::FOUR_BYTES, nullptr); ListReader list = reader.getPointerField(1 * POINTERS).getList(FieldSize::FOUR_BYTES, nullptr);
ASSERT_EQ(3 * ELEMENTS, list.size()); ASSERT_EQ(3 * ELEMENTS, list.size());
EXPECT_EQ(200, list.getDataElement<int32_t>(0 * ELEMENTS)); EXPECT_EQ(200, list.getDataElement<int32_t>(0 * ELEMENTS));
EXPECT_EQ(201, list.getDataElement<int32_t>(1 * ELEMENTS)); EXPECT_EQ(201, list.getDataElement<int32_t>(1 * ELEMENTS));
...@@ -244,22 +250,25 @@ static void checkStruct(StructReader reader) { ...@@ -244,22 +250,25 @@ static void checkStruct(StructReader reader) {
} }
{ {
ListReader list = reader.getListField(2 * POINTERS, FieldSize::INLINE_COMPOSITE, nullptr); ListReader list = reader.getPointerField(2 * POINTERS)
.getList(FieldSize::INLINE_COMPOSITE, nullptr);
ASSERT_EQ(4 * ELEMENTS, list.size()); ASSERT_EQ(4 * ELEMENTS, list.size());
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
StructReader element = list.getStructElement(i * ELEMENTS); StructReader element = list.getStructElement(i * ELEMENTS);
EXPECT_EQ(300 + i, element.getDataField<int32_t>(0 * ELEMENTS)); EXPECT_EQ(300 + i, element.getDataField<int32_t>(0 * ELEMENTS));
EXPECT_EQ(400 + i, EXPECT_EQ(400 + i,
element.getStructField(0 * POINTERS, STRUCTLIST_ELEMENT_SUBSTRUCT_DEFAULT.words) element.getPointerField(0 * POINTERS)
.getStruct(STRUCTLIST_ELEMENT_SUBSTRUCT_DEFAULT.words)
.getDataField<int32_t>(0 * ELEMENTS)); .getDataField<int32_t>(0 * ELEMENTS));
} }
} }
{ {
ListReader list = reader.getListField(3 * POINTERS, FieldSize::POINTER, nullptr); ListReader list = reader.getPointerField(3 * POINTERS).getList(FieldSize::POINTER, nullptr);
ASSERT_EQ(5 * ELEMENTS, list.size()); ASSERT_EQ(5 * ELEMENTS, list.size());
for (uint i = 0; i < 5; i++) { for (uint i = 0; i < 5; i++) {
ListReader element = list.getListElement(i * ELEMENTS, FieldSize::TWO_BYTES); ListReader element = list.getPointerElement(i * ELEMENTS)
.getList(FieldSize::TWO_BYTES, nullptr);
ASSERT_EQ((i + 1) * ELEMENTS, element.size()); ASSERT_EQ((i + 1) * ELEMENTS, element.size());
for (uint j = 0; j <= i; j++) { for (uint j = 0; j <= i; j++) {
EXPECT_EQ(500u + j, element.getDataElement<uint16_t>(j * ELEMENTS)); EXPECT_EQ(500u + j, element.getDataElement<uint16_t>(j * ELEMENTS));
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment