17 : invalid_id_(invalid_id) {
28 for (
int i = 0; i <
N; i++) {
29 if (!rects[i].isEmpty()) {
30 if (ids ==
nullptr || p(ids[i])) {
41 while (gen_count > 1) {
42 uint32_t family_count = (gen_count + kMaxChildren - 1u) / kMaxChildren;
43 total_node_count += family_count;
44 gen_count = family_count;
47 nodes_.resize(total_node_count);
53 for (
int i = 0; i <
N; i++) {
54 if (!rects[i].isEmpty()) {
55 if (ids ==
nullptr || p(
id = ids[i])) {
56 Node& node = nodes_[leaf_index++];
57 node.bounds = rects[i];
89 uint32_t gen_start = 0;
91 while (gen_count > 1) {
92 uint32_t gen_end = gen_start + gen_count;
94 uint32_t family_count = (gen_count + kMaxChildren - 1u) / kMaxChildren;
95 FML_DCHECK(gen_end + family_count <= total_node_count);
117 uint32_t sibling_index = gen_start;
118 uint32_t parent_index = gen_end;
119 Node* parent =
nullptr;
120 while (sibling_index < gen_end) {
121 if ((
D += family_count) > 0) {
123 FML_DCHECK(parent_index < gen_end + family_count);
124 parent = &nodes_[parent_index++];
125 parent->bounds.setEmpty();
126 parent->child.index = sibling_index;
127 parent->child.count = 0;
130 parent->bounds.join(nodes_[sibling_index++].
bounds);
131 parent->child.count++;
135 FML_DCHECK(parent_index == gen_end + family_count);
137 gen_count = family_count;
139 FML_DCHECK(gen_start + gen_count == total_node_count);
166 std::vector<int> intermediary_results;
167 search(query, &intermediary_results);
169 std::vector<SkIRect> rects;
170 rects.reserve(intermediary_results.size());
171 for (
int index : intermediary_results) {
174 rects.push_back(current_record_rect);
179 std::list<SkRect> final_results;
180 for (
const auto& rect : non_overlapping_rects) {
183 return final_results;