Initial version -- added millennium read funcionality

This commit is contained in:
Pablo
2026-03-09 22:05:28 +01:00
commit 77c2ded482
2770 changed files with 141927 additions and 0 deletions
@@ -0,0 +1,101 @@
package com.google.maps.android.clustering.algo;
import androidx.collection.LongSparseArray;
import com.google.maps.android.clustering.Cluster;
import com.google.maps.android.clustering.ClusterItem;
import com.google.maps.android.projection.Point;
import com.google.maps.android.projection.SphericalMercatorProjection;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/* JADX INFO: loaded from: classes2.dex */
public class GridBasedAlgorithm<T extends ClusterItem> extends AbstractAlgorithm<T> {
private static final int DEFAULT_GRID_SIZE = 100;
private int mGridSize = 100;
private final Set<T> mItems = Collections.synchronizedSet(new HashSet());
@Override // com.google.maps.android.clustering.algo.Algorithm
public boolean addItem(T t) {
return this.mItems.add(t);
}
@Override // com.google.maps.android.clustering.algo.Algorithm
public boolean addItems(Collection<T> collection) {
return this.mItems.addAll(collection);
}
@Override // com.google.maps.android.clustering.algo.Algorithm
public void clearItems() {
this.mItems.clear();
}
@Override // com.google.maps.android.clustering.algo.Algorithm
public boolean removeItem(T t) {
return this.mItems.remove(t);
}
@Override // com.google.maps.android.clustering.algo.Algorithm
public boolean removeItems(Collection<T> collection) {
return this.mItems.removeAll(collection);
}
@Override // com.google.maps.android.clustering.algo.Algorithm
public boolean updateItem(T t) {
boolean zRemoveItem;
synchronized (this.mItems) {
zRemoveItem = removeItem(t);
if (zRemoveItem) {
zRemoveItem = addItem(t);
}
}
return zRemoveItem;
}
@Override // com.google.maps.android.clustering.algo.Algorithm
public void setMaxDistanceBetweenClusteredItems(int i) {
this.mGridSize = i;
}
@Override // com.google.maps.android.clustering.algo.Algorithm
public int getMaxDistanceBetweenClusteredItems() {
return this.mGridSize;
}
@Override // com.google.maps.android.clustering.algo.Algorithm
public Set<? extends Cluster<T>> getClusters(float f) {
long j;
long jCeil = (long) Math.ceil((Math.pow(2.0d, f) * 256.0d) / ((double) this.mGridSize));
SphericalMercatorProjection sphericalMercatorProjection = new SphericalMercatorProjection(jCeil);
HashSet hashSet = new HashSet();
LongSparseArray longSparseArray = new LongSparseArray();
synchronized (this.mItems) {
for (T t : this.mItems) {
Point point = sphericalMercatorProjection.toPoint(t.getPosition());
long coord = getCoord(jCeil, point.x, point.y);
StaticCluster staticCluster = (StaticCluster) longSparseArray.get(coord);
if (staticCluster == null) {
j = jCeil;
staticCluster = new StaticCluster(sphericalMercatorProjection.toLatLng(new com.google.maps.android.geometry.Point(Math.floor(point.x) + 0.5d, Math.floor(point.y) + 0.5d)));
longSparseArray.put(coord, staticCluster);
hashSet.add(staticCluster);
} else {
j = jCeil;
}
staticCluster.add(t);
jCeil = j;
}
}
return hashSet;
}
@Override // com.google.maps.android.clustering.algo.Algorithm
public Collection<T> getItems() {
return this.mItems;
}
private static long getCoord(long j, double d, double d2) {
return (long) ((j * Math.floor(d)) + Math.floor(d2));
}
}