ADD week 5

This commit is contained in:
2025-03-31 16:33:42 +02:00
parent 86f265f22d
commit bf645048e6
4927 changed files with 544053 additions and 0 deletions

View File

@ -0,0 +1,7 @@
package androidx.arch.core;
/* loaded from: classes.dex */
public final class R {
private R() {
}
}

View File

@ -0,0 +1,70 @@
package androidx.arch.core.executor;
import java.util.concurrent.Executor;
/* loaded from: classes.dex */
public class ArchTaskExecutor extends TaskExecutor {
private static volatile ArchTaskExecutor sInstance;
private final TaskExecutor mDefaultTaskExecutor;
private TaskExecutor mDelegate;
private static final Executor sMainThreadExecutor = new Executor() { // from class: androidx.arch.core.executor.ArchTaskExecutor$$ExternalSyntheticLambda0
@Override // java.util.concurrent.Executor
public final void execute(Runnable runnable) {
ArchTaskExecutor.getInstance().postToMainThread(runnable);
}
};
private static final Executor sIOThreadExecutor = new Executor() { // from class: androidx.arch.core.executor.ArchTaskExecutor$$ExternalSyntheticLambda1
@Override // java.util.concurrent.Executor
public final void execute(Runnable runnable) {
ArchTaskExecutor.getInstance().executeOnDiskIO(runnable);
}
};
public static Executor getIOThreadExecutor() {
return sIOThreadExecutor;
}
public static Executor getMainThreadExecutor() {
return sMainThreadExecutor;
}
public void setDelegate(TaskExecutor taskExecutor) {
if (taskExecutor == null) {
taskExecutor = this.mDefaultTaskExecutor;
}
this.mDelegate = taskExecutor;
}
private ArchTaskExecutor() {
DefaultTaskExecutor defaultTaskExecutor = new DefaultTaskExecutor();
this.mDefaultTaskExecutor = defaultTaskExecutor;
this.mDelegate = defaultTaskExecutor;
}
public static ArchTaskExecutor getInstance() {
if (sInstance != null) {
return sInstance;
}
synchronized (ArchTaskExecutor.class) {
if (sInstance == null) {
sInstance = new ArchTaskExecutor();
}
}
return sInstance;
}
@Override // androidx.arch.core.executor.TaskExecutor
public void executeOnDiskIO(Runnable runnable) {
this.mDelegate.executeOnDiskIO(runnable);
}
@Override // androidx.arch.core.executor.TaskExecutor
public void postToMainThread(Runnable runnable) {
this.mDelegate.postToMainThread(runnable);
}
@Override // androidx.arch.core.executor.TaskExecutor
public boolean isMainThread() {
return this.mDelegate.isMainThread();
}
}

View File

@ -0,0 +1,71 @@
package androidx.arch.core.executor;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
/* loaded from: classes.dex */
public class DefaultTaskExecutor extends TaskExecutor {
private volatile Handler mMainHandler;
private final Object mLock = new Object();
private final ExecutorService mDiskIO = Executors.newFixedThreadPool(4, new ThreadFactory() { // from class: androidx.arch.core.executor.DefaultTaskExecutor.1
private static final String THREAD_NAME_STEM = "arch_disk_io_";
private final AtomicInteger mThreadId = new AtomicInteger(0);
@Override // java.util.concurrent.ThreadFactory
public Thread newThread(Runnable runnable) {
Thread thread = new Thread(runnable);
thread.setName(THREAD_NAME_STEM + this.mThreadId.getAndIncrement());
return thread;
}
});
@Override // androidx.arch.core.executor.TaskExecutor
public void executeOnDiskIO(Runnable runnable) {
this.mDiskIO.execute(runnable);
}
@Override // androidx.arch.core.executor.TaskExecutor
public void postToMainThread(Runnable runnable) {
if (this.mMainHandler == null) {
synchronized (this.mLock) {
if (this.mMainHandler == null) {
this.mMainHandler = createAsync(Looper.getMainLooper());
}
}
}
this.mMainHandler.post(runnable);
}
@Override // androidx.arch.core.executor.TaskExecutor
public boolean isMainThread() {
return Looper.getMainLooper().getThread() == Thread.currentThread();
}
private static Handler createAsync(Looper looper) {
if (Build.VERSION.SDK_INT >= 28) {
return Api28Impl.createAsync(looper);
}
try {
return (Handler) Handler.class.getDeclaredConstructor(Looper.class, Handler.Callback.class, Boolean.TYPE).newInstance(looper, null, true);
} catch (IllegalAccessException | InstantiationException | NoSuchMethodException unused) {
return new Handler(looper);
} catch (InvocationTargetException unused2) {
return new Handler(looper);
}
}
private static class Api28Impl {
private Api28Impl() {
}
public static Handler createAsync(Looper looper) {
return Handler.createAsync(looper);
}
}
}

View File

@ -0,0 +1,18 @@
package androidx.arch.core.executor;
/* loaded from: classes.dex */
public abstract class TaskExecutor {
public abstract void executeOnDiskIO(Runnable runnable);
public abstract boolean isMainThread();
public abstract void postToMainThread(Runnable runnable);
public void executeOnMainThread(Runnable runnable) {
if (isMainThread()) {
runnable.run();
} else {
postToMainThread(runnable);
}
}
}

View File

@ -0,0 +1,43 @@
package androidx.arch.core.internal;
import androidx.arch.core.internal.SafeIterableMap;
import java.util.HashMap;
import java.util.Map;
/* loaded from: classes.dex */
public class FastSafeIterableMap<K, V> extends SafeIterableMap<K, V> {
private final HashMap<K, SafeIterableMap.Entry<K, V>> mHashMap = new HashMap<>();
@Override // androidx.arch.core.internal.SafeIterableMap
protected SafeIterableMap.Entry<K, V> get(K k) {
return this.mHashMap.get(k);
}
@Override // androidx.arch.core.internal.SafeIterableMap
public V putIfAbsent(K k, V v) {
SafeIterableMap.Entry<K, V> entry = get(k);
if (entry != null) {
return entry.mValue;
}
this.mHashMap.put(k, put(k, v));
return null;
}
@Override // androidx.arch.core.internal.SafeIterableMap
public V remove(K k) {
V v = (V) super.remove(k);
this.mHashMap.remove(k);
return v;
}
public boolean contains(K k) {
return this.mHashMap.containsKey(k);
}
public Map.Entry<K, V> ceil(K k) {
if (contains(k)) {
return this.mHashMap.get(k).mPrevious;
}
return null;
}
}

View File

@ -0,0 +1,321 @@
package androidx.arch.core.internal;
import java.util.Iterator;
import java.util.Map;
import java.util.WeakHashMap;
/* loaded from: classes.dex */
public class SafeIterableMap<K, V> implements Iterable<Map.Entry<K, V>> {
private Entry<K, V> mEnd;
private final WeakHashMap<SupportRemove<K, V>, Boolean> mIterators = new WeakHashMap<>();
private int mSize = 0;
Entry<K, V> mStart;
public static abstract class SupportRemove<K, V> {
abstract void supportRemove(Entry<K, V> entry);
}
public Map.Entry<K, V> eldest() {
return this.mStart;
}
public Map.Entry<K, V> newest() {
return this.mEnd;
}
public int size() {
return this.mSize;
}
protected Entry<K, V> get(K k) {
Entry<K, V> entry = this.mStart;
while (entry != null && !entry.mKey.equals(k)) {
entry = entry.mNext;
}
return entry;
}
public V putIfAbsent(K k, V v) {
Entry<K, V> entry = get(k);
if (entry != null) {
return entry.mValue;
}
put(k, v);
return null;
}
Entry<K, V> put(K k, V v) {
Entry<K, V> entry = new Entry<>(k, v);
this.mSize++;
Entry<K, V> entry2 = this.mEnd;
if (entry2 == null) {
this.mStart = entry;
this.mEnd = entry;
return entry;
}
entry2.mNext = entry;
entry.mPrevious = this.mEnd;
this.mEnd = entry;
return entry;
}
public V remove(K k) {
Entry<K, V> entry = get(k);
if (entry == null) {
return null;
}
this.mSize--;
if (!this.mIterators.isEmpty()) {
Iterator<SupportRemove<K, V>> it = this.mIterators.keySet().iterator();
while (it.hasNext()) {
it.next().supportRemove(entry);
}
}
if (entry.mPrevious != null) {
entry.mPrevious.mNext = entry.mNext;
} else {
this.mStart = entry.mNext;
}
if (entry.mNext != null) {
entry.mNext.mPrevious = entry.mPrevious;
} else {
this.mEnd = entry.mPrevious;
}
entry.mNext = null;
entry.mPrevious = null;
return entry.mValue;
}
@Override // java.lang.Iterable
public Iterator<Map.Entry<K, V>> iterator() {
AscendingIterator ascendingIterator = new AscendingIterator(this.mStart, this.mEnd);
this.mIterators.put(ascendingIterator, false);
return ascendingIterator;
}
public Iterator<Map.Entry<K, V>> descendingIterator() {
DescendingIterator descendingIterator = new DescendingIterator(this.mEnd, this.mStart);
this.mIterators.put(descendingIterator, false);
return descendingIterator;
}
public SafeIterableMap<K, V>.IteratorWithAdditions iteratorWithAdditions() {
SafeIterableMap<K, V>.IteratorWithAdditions iteratorWithAdditions = new IteratorWithAdditions();
this.mIterators.put(iteratorWithAdditions, false);
return iteratorWithAdditions;
}
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof SafeIterableMap)) {
return false;
}
SafeIterableMap safeIterableMap = (SafeIterableMap) obj;
if (size() != safeIterableMap.size()) {
return false;
}
Iterator<Map.Entry<K, V>> it = iterator();
Iterator<Map.Entry<K, V>> it2 = safeIterableMap.iterator();
while (it.hasNext() && it2.hasNext()) {
Map.Entry<K, V> next = it.next();
Map.Entry<K, V> next2 = it2.next();
if ((next == null && next2 != null) || (next != null && !next.equals(next2))) {
return false;
}
}
return (it.hasNext() || it2.hasNext()) ? false : true;
}
public int hashCode() {
Iterator<Map.Entry<K, V>> it = iterator();
int i = 0;
while (it.hasNext()) {
i += it.next().hashCode();
}
return i;
}
public String toString() {
StringBuilder sb = new StringBuilder("[");
Iterator<Map.Entry<K, V>> it = iterator();
while (it.hasNext()) {
sb.append(it.next().toString());
if (it.hasNext()) {
sb.append(", ");
}
}
sb.append("]");
return sb.toString();
}
private static abstract class ListIterator<K, V> extends SupportRemove<K, V> implements Iterator<Map.Entry<K, V>> {
Entry<K, V> mExpectedEnd;
Entry<K, V> mNext;
abstract Entry<K, V> backward(Entry<K, V> entry);
abstract Entry<K, V> forward(Entry<K, V> entry);
@Override // java.util.Iterator
public boolean hasNext() {
return this.mNext != null;
}
ListIterator(Entry<K, V> entry, Entry<K, V> entry2) {
this.mExpectedEnd = entry2;
this.mNext = entry;
}
@Override // androidx.arch.core.internal.SafeIterableMap.SupportRemove
public void supportRemove(Entry<K, V> entry) {
if (this.mExpectedEnd == entry && entry == this.mNext) {
this.mNext = null;
this.mExpectedEnd = null;
}
Entry<K, V> entry2 = this.mExpectedEnd;
if (entry2 == entry) {
this.mExpectedEnd = backward(entry2);
}
if (this.mNext == entry) {
this.mNext = nextNode();
}
}
private Entry<K, V> nextNode() {
Entry<K, V> entry = this.mNext;
Entry<K, V> entry2 = this.mExpectedEnd;
if (entry == entry2 || entry2 == null) {
return null;
}
return forward(entry);
}
@Override // java.util.Iterator
public Map.Entry<K, V> next() {
Entry<K, V> entry = this.mNext;
this.mNext = nextNode();
return entry;
}
}
static class AscendingIterator<K, V> extends ListIterator<K, V> {
AscendingIterator(Entry<K, V> entry, Entry<K, V> entry2) {
super(entry, entry2);
}
@Override // androidx.arch.core.internal.SafeIterableMap.ListIterator
Entry<K, V> forward(Entry<K, V> entry) {
return entry.mNext;
}
@Override // androidx.arch.core.internal.SafeIterableMap.ListIterator
Entry<K, V> backward(Entry<K, V> entry) {
return entry.mPrevious;
}
}
private static class DescendingIterator<K, V> extends ListIterator<K, V> {
DescendingIterator(Entry<K, V> entry, Entry<K, V> entry2) {
super(entry, entry2);
}
@Override // androidx.arch.core.internal.SafeIterableMap.ListIterator
Entry<K, V> forward(Entry<K, V> entry) {
return entry.mPrevious;
}
@Override // androidx.arch.core.internal.SafeIterableMap.ListIterator
Entry<K, V> backward(Entry<K, V> entry) {
return entry.mNext;
}
}
public class IteratorWithAdditions extends SupportRemove<K, V> implements Iterator<Map.Entry<K, V>> {
private boolean mBeforeStart = true;
private Entry<K, V> mCurrent;
IteratorWithAdditions() {
}
@Override // androidx.arch.core.internal.SafeIterableMap.SupportRemove
void supportRemove(Entry<K, V> entry) {
Entry<K, V> entry2 = this.mCurrent;
if (entry == entry2) {
Entry<K, V> entry3 = entry2.mPrevious;
this.mCurrent = entry3;
this.mBeforeStart = entry3 == null;
}
}
@Override // java.util.Iterator
public boolean hasNext() {
if (this.mBeforeStart) {
return SafeIterableMap.this.mStart != null;
}
Entry<K, V> entry = this.mCurrent;
return (entry == null || entry.mNext == null) ? false : true;
}
@Override // java.util.Iterator
public Map.Entry<K, V> next() {
if (this.mBeforeStart) {
this.mBeforeStart = false;
this.mCurrent = SafeIterableMap.this.mStart;
} else {
Entry<K, V> entry = this.mCurrent;
this.mCurrent = entry != null ? entry.mNext : null;
}
return this.mCurrent;
}
}
static class Entry<K, V> implements Map.Entry<K, V> {
final K mKey;
Entry<K, V> mNext;
Entry<K, V> mPrevious;
final V mValue;
@Override // java.util.Map.Entry
public K getKey() {
return this.mKey;
}
@Override // java.util.Map.Entry
public V getValue() {
return this.mValue;
}
Entry(K k, V v) {
this.mKey = k;
this.mValue = v;
}
@Override // java.util.Map.Entry
public V setValue(V v) {
throw new UnsupportedOperationException("An entry modification is not supported");
}
public String toString() {
return this.mKey + "=" + this.mValue;
}
@Override // java.util.Map.Entry
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof Entry)) {
return false;
}
Entry entry = (Entry) obj;
return this.mKey.equals(entry.mKey) && this.mValue.equals(entry.mValue);
}
@Override // java.util.Map.Entry
public int hashCode() {
return this.mKey.hashCode() ^ this.mValue.hashCode();
}
}
}

View File

@ -0,0 +1,6 @@
package androidx.arch.core.util;
/* loaded from: classes.dex */
public interface Function<I, O> {
O apply(I i);
}