static void setupStruct(struct capn *ctx) { struct capn_ptr root = capn_root(ctx); ASSERT_EQ(CAPN_PTR_LIST, root.type); ASSERT_EQ(1, root.len); struct capn_ptr ptr = capn_new_struct(root.seg, 16, 6); ASSERT_EQ(CAPN_STRUCT, ptr.type); EXPECT_EQ(16, ptr.datasz); EXPECT_EQ(6, ptr.ptrs); EXPECT_EQ(0, capn_setp(root, 0, ptr)); EXPECT_EQ(0, capn_write64(ptr, 0, UINT64_C(0x1011121314151617))); EXPECT_EQ(0, capn_write32(ptr, 8, UINT32_C(0x20212223))); EXPECT_EQ(0, capn_write16(ptr, 12, UINT16_C(0x3031))); EXPECT_EQ(0, capn_write8(ptr, 14, 0x40)); EXPECT_EQ(0, capn_write8(ptr, 15, (1 << 6) | (1 << 5) | (1 << 4) | (1 << 2))); capn_ptr subStruct = capn_new_struct(ptr.seg, 8, 0); ASSERT_EQ(CAPN_STRUCT, subStruct.type); EXPECT_EQ(8, subStruct.datasz); EXPECT_EQ(0, subStruct.ptrs); EXPECT_EQ(0, capn_write32(subStruct, 0, 123)); EXPECT_NE(0, capn_write32(subStruct, 8, 124)); EXPECT_EQ(0, capn_setp(ptr, 0, subStruct)); capn_list32 list32 = capn_new_list32(ptr.seg, 3); capn_list64 list64 = {list32.p}; ASSERT_EQ(CAPN_LIST, list32.p.type); EXPECT_EQ(3, list32.p.len); EXPECT_EQ(4, list32.p.datasz); EXPECT_EQ(0, capn_set32(list32, 0, 200)); EXPECT_EQ(0, capn_set32(list32, 1, 201)); EXPECT_EQ(0, capn_set32(list32, 2, 202)); EXPECT_NE(0, capn_set32(list32, 3, 203)); EXPECT_NE(0, capn_set64(list64, 0, 405)); EXPECT_EQ(0, capn_setp(ptr, 1, list32.p)); capn_ptr list = capn_new_list(ptr.seg, 4, 4, 1); ASSERT_EQ(CAPN_LIST, list.type); ASSERT_EQ(1, list.is_composite_list); EXPECT_EQ(4, list.len); EXPECT_EQ(8, list.datasz); EXPECT_EQ(1, list.ptrs); EXPECT_EQ(0, capn_setp(ptr, 2, list)); for (int i = 0; i < 4; i++) { capn_ptr element = capn_getp(list, i, 1); ASSERT_EQ(CAPN_STRUCT, element.type); EXPECT_EQ(1, element.is_list_member); EXPECT_EQ(8, element.datasz); EXPECT_EQ(1, element.ptrs); EXPECT_EQ(0, capn_write32(element, 0, 300+i)); capn_ptr subelement = capn_new_struct(element.seg, 8, 0); ASSERT_EQ(CAPN_STRUCT, subelement.type); EXPECT_EQ(8, subelement.datasz); EXPECT_EQ(0, subelement.ptrs); EXPECT_EQ(0, capn_write32(subelement, 0, 400+i)); EXPECT_EQ(0, capn_setp(element, 0, subelement)); } list = capn_new_ptr_list(ptr.seg, 5); ASSERT_EQ(CAPN_PTR_LIST, list.type); EXPECT_EQ(5, list.len); EXPECT_EQ(0, capn_setp(ptr, 3, list)); for (int i = 0; i < 5; i++) { capn_list16 element = capn_new_list16(list.seg, i+1); ASSERT_EQ(CAPN_LIST, element.p.type); EXPECT_EQ(i+1, element.p.len); EXPECT_EQ(2, element.p.datasz); EXPECT_EQ(0, element.p.ptrs); EXPECT_EQ(0, capn_setp(list, i, element.p)); for (int j = 0; j <= i; j++) { EXPECT_EQ(0, capn_set16(element, j, 500+j)); } } capn_ptr recurse = capn_new_struct(ptr.seg, 0, 2); EXPECT_EQ(CAPN_STRUCT, recurse.type); EXPECT_EQ(0, recurse.datasz); EXPECT_EQ(2, recurse.ptrs); EXPECT_EQ(0, capn_setp(recurse, 0, recurse)); EXPECT_EQ(0, capn_setp(ptr, 4, recurse)); }
Crop_list new_Crop_list(struct capn_segment *s, int len) { Crop_list p; p.p = capn_new_list(s, len, 16, 0); return p; }