12f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla/* 22f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * Copyright (C) 2017 The Android Open Source Project 32f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * 42f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * Licensed under the Apache License, Version 2.0 (the "License"); 52f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * you may not use this file except in compliance with the License. 62f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * You may obtain a copy of the License at 72f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * 82f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * http://www.apache.org/licenses/LICENSE-2.0 92f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * 102f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * Unless required by applicable law or agreed to in writing, software 112f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * distributed under the License is distributed on an "AS IS" BASIS, 122f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * See the License for the specific language governing permissions and 142f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * limitations under the License. 152f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla */ 162f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 172f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Suslapackage com.android.internal.util.function.pooled; 182f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 192f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Suslaimport com.android.internal.util.FunctionalUtils.ThrowingRunnable; 202f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Suslaimport com.android.internal.util.FunctionalUtils.ThrowingSupplier; 212d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganovimport com.android.internal.util.function.HexConsumer; 222d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganovimport com.android.internal.util.function.HexFunction; 232f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Suslaimport com.android.internal.util.function.QuadConsumer; 242f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Suslaimport com.android.internal.util.function.QuadFunction; 252d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganovimport com.android.internal.util.function.QuintConsumer; 262d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganovimport com.android.internal.util.function.QuintFunction; 272f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Suslaimport com.android.internal.util.function.TriConsumer; 282f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Suslaimport com.android.internal.util.function.TriFunction; 292f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 302f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Suslaimport java.util.function.BiConsumer; 312f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Suslaimport java.util.function.BiFunction; 322f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Suslaimport java.util.function.BiPredicate; 332f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Suslaimport java.util.function.Function; 342f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 352f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla/** 362f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * An interface implementing all supported function interfaces, delegating each to {@link #invoke} 372f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * 382f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla * @hide 392f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla */ 402d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganovabstract class OmniFunction<A, B, C, D, E, F, R> implements 412f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla PooledFunction<A, R>, BiFunction<A, B, R>, TriFunction<A, B, C, R>, 422d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov QuadFunction<A, B, C, D, R>, QuintFunction<A, B, C, D, E, R>, 432d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov HexFunction<A, B, C, D, E, F, R>, PooledConsumer<A>, BiConsumer<A, B>, 442d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov TriConsumer<A, B, C>, QuadConsumer<A, B, C, D>, QuintConsumer<A, B, C, D, E>, 452d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov HexConsumer<A, B, C, D, E, F>, PooledPredicate<A>, BiPredicate<A, B>, 462d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov PooledSupplier<R>, PooledRunnable, ThrowingRunnable, ThrowingSupplier<R>, 472f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla PooledSupplier.OfInt, PooledSupplier.OfLong, PooledSupplier.OfDouble { 482f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 492d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov abstract R invoke(A a, B b, C c, D d, E e, F f); 502f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 512f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 522f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public R apply(A o, B o2) { 532d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov return invoke(o, o2, null, null, null, null); 542f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 552f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 562f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 572f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public R apply(A o) { 582d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov return invoke(o, null, null, null, null, null); 592f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 602f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 612d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov abstract public <V> OmniFunction<A, B, C, D, E, F, V> andThen( 622d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov Function<? super R, ? extends V> after); 632d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov abstract public OmniFunction<A, B, C, D, E, F, R> negate(); 642f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 652f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 662f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public void accept(A o, B o2) { 672d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov invoke(o, o2, null, null, null, null); 682f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 692f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 702f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 712f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public void accept(A o) { 722d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov invoke(o, null, null, null, null, null); 732f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 742f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 752f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 762f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public void run() { 772d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov invoke(null, null, null, null, null, null); 782f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 792f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 802f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 812f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public R get() { 822d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov return invoke(null, null, null, null, null, null); 832f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 842f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 852f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 862f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public boolean test(A o, B o2) { 872d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov return (Boolean) invoke(o, o2, null, null, null, null); 882f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 892f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 902f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 912f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public boolean test(A o) { 922d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov return (Boolean) invoke(o, null, null, null, null, null); 932f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 942f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 952f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 962f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public PooledRunnable asRunnable() { 972f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla return this; 982f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 992f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 1002f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 1012f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public PooledConsumer<A> asConsumer() { 1022f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla return this; 1032f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 1042f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 1052f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 1062f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public R apply(A a, B b, C c) { 1072d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov return invoke(a, b, c, null, null, null); 1082f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 1092f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 1102f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 1112f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public void accept(A a, B b, C c) { 1122d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov invoke(a, b, c, null, null, null); 1132f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 1142f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 1152f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 1162f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public R apply(A a, B b, C c, D d) { 1172d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov return invoke(a, b, c, d, null, null); 1182d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov } 1192d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov 1202d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov @Override 1212d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov public R apply(A a, B b, C c, D d, E e) { 1222d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov return invoke(a, b, c, d, e, null); 1232d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov } 1242d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov 1252d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov @Override 1262d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov public R apply(A a, B b, C c, D d, E e, F f) { 1272d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov return invoke(a, b, c, d, e, f); 1282f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 1292f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 1302f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 1312f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public void accept(A a, B b, C c, D d) { 1322d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov invoke(a, b, c, d, null, null); 1332d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov } 1342d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov 1352d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov @Override 1362d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov public void accept(A a, B b, C c, D d, E e) { 1372d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov invoke(a, b, c, d, e, null); 1382d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov } 1392d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov 1402d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov @Override 1412d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov public void accept(A a, B b, C c, D d, E e, F f) { 1422d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov invoke(a, b, c, d, e, f); 1432f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 1442f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 1452f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 1462f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public void runOrThrow() throws Exception { 1472f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla run(); 1482f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 1492f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 1502f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 1512f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla public R getOrThrow() throws Exception { 1522f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla return get(); 1532f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla } 1542f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla 1552f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla @Override 1562d20fb47f4a7162450f993728876c74762b93112Svetoslav Ganov abstract public OmniFunction<A, B, C, D, E, F, R> recycleOnUse(); 1572f5ee71ec851b1149b4e10ec211ad520cd73776eEugene Susla} 158