package com.google.maps.android.quadtree; import com.google.maps.android.geometry.Bounds; import com.google.maps.android.geometry.Point; import com.google.maps.android.quadtree.PointQuadTree.Item; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; /* JADX INFO: loaded from: classes2.dex */ public class PointQuadTree { private static final int MAX_DEPTH = 40; private static final int MAX_ELEMENTS = 50; private final Bounds mBounds; private List> mChildren; private final int mDepth; private Set mItems; public interface Item { Point getPoint(); } public PointQuadTree(double d, double d2, double d3, double d4) { this(new Bounds(d, d2, d3, d4)); } public PointQuadTree(Bounds bounds) { this(bounds, 0); } private PointQuadTree(double d, double d2, double d3, double d4, int i) { this(new Bounds(d, d2, d3, d4), i); } private PointQuadTree(Bounds bounds, int i) { this.mChildren = null; this.mBounds = bounds; this.mDepth = i; } public void add(T t) { Point point = t.getPoint(); if (this.mBounds.contains(point.x, point.y)) { insert(point.x, point.y, t); } } private void insert(double d, double d2, T t) { if (this.mChildren == null) { if (this.mItems == null) { this.mItems = new LinkedHashSet(); } this.mItems.add(t); if (this.mItems.size() <= 50 || this.mDepth >= 40) { return; } split(); return; } if (d2 < this.mBounds.midY) { if (d < this.mBounds.midX) { this.mChildren.get(0).insert(d, d2, t); return; } else { this.mChildren.get(1).insert(d, d2, t); return; } } if (d < this.mBounds.midX) { this.mChildren.get(2).insert(d, d2, t); } else { this.mChildren.get(3).insert(d, d2, t); } } private void split() { ArrayList arrayList = new ArrayList(4); this.mChildren = arrayList; arrayList.add(new PointQuadTree(this.mBounds.minX, this.mBounds.midX, this.mBounds.minY, this.mBounds.midY, this.mDepth + 1)); this.mChildren.add(new PointQuadTree<>(this.mBounds.midX, this.mBounds.maxX, this.mBounds.minY, this.mBounds.midY, this.mDepth + 1)); this.mChildren.add(new PointQuadTree<>(this.mBounds.minX, this.mBounds.midX, this.mBounds.midY, this.mBounds.maxY, this.mDepth + 1)); this.mChildren.add(new PointQuadTree<>(this.mBounds.midX, this.mBounds.maxX, this.mBounds.midY, this.mBounds.maxY, this.mDepth + 1)); Set set = this.mItems; this.mItems = null; for (T t : set) { insert(t.getPoint().x, t.getPoint().y, t); } } public boolean remove(T t) { Point point = t.getPoint(); if (this.mBounds.contains(point.x, point.y)) { return remove(point.x, point.y, t); } return false; } private boolean remove(double d, double d2, T t) { if (this.mChildren == null) { Set set = this.mItems; if (set == null) { return false; } return set.remove(t); } if (d2 < this.mBounds.midY) { if (d < this.mBounds.midX) { return this.mChildren.get(0).remove(d, d2, t); } return this.mChildren.get(1).remove(d, d2, t); } if (d < this.mBounds.midX) { return this.mChildren.get(2).remove(d, d2, t); } return this.mChildren.get(3).remove(d, d2, t); } public void clear() { this.mChildren = null; Set set = this.mItems; if (set != null) { set.clear(); } } public Collection search(Bounds bounds) { ArrayList arrayList = new ArrayList(); search(bounds, arrayList); return arrayList; } private void search(Bounds bounds, Collection collection) { if (this.mBounds.intersects(bounds)) { List> list = this.mChildren; if (list != null) { Iterator> it = list.iterator(); while (it.hasNext()) { it.next().search(bounds, collection); } } else if (this.mItems != null) { if (bounds.contains(this.mBounds)) { collection.addAll(this.mItems); return; } for (T t : this.mItems) { if (bounds.contains(t.getPoint())) { collection.add(t); } } } } } }