File: Predicate.drv

package info (click to toggle)
libfastutil-java 8.5.15%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,076 kB
  • sloc: java: 19,670; sh: 1,188; makefile: 473; xml: 354
file content (215 lines) | stat: -rw-r--r-- 7,997 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
/*
 * Copyright (C) 2020-2024 Sebastiano Vigna
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package PACKAGE;

import java.util.Objects;
import java.util.function.Predicate;

/** A type-specific {@link Predicate}; provides methods to test a primitive type both as object
 * and as primitive.
 *
 * <p>Except for the boolean case, this interface extends both a parameterized {@link java.util.function.Predicate}
 * and a type-specific JDK predicate (e.g., {@link java.util.function.IntPredicate}). For types missing
 * a type-specific JDK predicate (e.g., {@code short} or {@code float}), we extend the predicate associated with
 * the smallest primitive type that can represent the current type (e.g., {@code int} or {@code double}, respectively).
 *
 * @see Predicate
 * @since 8.5.0
 */

@FunctionalInterface
#if ! KEY_CLASS_Boolean
public interface KEY_PREDICATE KEY_GENERIC extends Predicate<KEY_GENERIC_CLASS>, JDK_PRIMITIVE_PREDICATE {
#else
public interface KEY_PREDICATE KEY_GENERIC extends Predicate<KEY_GENERIC_CLASS> {
#endif

#if ! KEYS_INT_LONG_DOUBLE
	/**
	 * Evaluates this predicate on the given input.
	 *
	 * @param t the input.
	 * @return {@code true} if the input matches the predicate,
	 * otherwise {@code false}
	 */
	boolean test(KEY_TYPE t);

#if ! KEY_CLASS_Boolean
	/** {@inheritDoc}
	 * @deprecated Please use the corresponding type-specific method instead. */
	@Deprecated
	@Override
	default boolean test(final KEY_TYPE_WIDENED t) {
		return test(KEY_NARROWING(t));
	}
#endif

#if KEY_CLASS_Boolean
	/**
	 * Returns a {@code BooleanPredicate} that returns the boolean to be tested unmodified.
	 * @see java.util.function.UnaryOperator#identity()
	 */
	public static KEY_PREDICATE identity() {
		// Java is smart enough to see this lambda is stateless and will return the same instance every time.
		return b -> b;
	}

	/** Returns a {@code BooleanPredicate} that returns the negation of the boolean to be tested. */
	public static KEY_PREDICATE negation() {
		return b -> !b;
	}
#endif

#endif

	/** {@inheritDoc}
	 * @deprecated Please use the corresponding type-specific method instead. */
	@Deprecated
	@Override
	default boolean test(final KEY_CLASS t) {
		return test(t.KEY_VALUE());
	}

    /**
	 * Returns a composed type-specific predicate that represents a short-circuiting logical
	 * AND of this type-specific predicate and another.
	 * @param other a predicate that will be logically-ANDed with this predicate.
     * @return a composed predicate that represents the short-circuiting logical
     * AND of this predicate and the {@code other} predicate.
	 * @see Predicate#and
	 * @apiNote Implementing classes should generally override this method and 
	 * keep the default implementation of the other overloads, which will 
	 * delegate to this method (after proper conversions).
	 */
	default KEY_PREDICATE and(final METHOD_ARG_PREDICATE other) {
		Objects.requireNonNull(other);
		return t -> test(t) && other.test(t);
	}

#if KEYS_INT_LONG_DOUBLE

	/**
	 * Returns a composed type-specific predicate that represents a short-circuiting logical
	 * AND of this type-specific predicate and another.
	 *
	 * <p><b>WARNING</b>: Overriding this method is almost always a mistake, as this
	 * overload only exists to disambiguate. Instead, override the {@code and()} overload
	 * that uses the JDK's primitive predicate type (e.g. {@link java.util.function.IntPredicate}).
	 *
	 * <p>If Java supported final default methods, this would be one, but sadly it does not.
	 *
	 * <p>If you checked and are overriding the version with {@code java.util.function.XPredicate}, and
	 * you still see this warning, then your IDE is incorrectly conflating this method with the proper
	 * method to override, and you can safely ignore this message.
	 *
	 * @param other a predicate that will be logically-ANDed with this predicate.
     * @return a composed predicate that represents the short-circuiting logical
     * AND of this predicate and the {@code other} predicate.
	 * @see Predicate#and
	 */
	default KEY_PREDICATE and(final KEY_PREDICATE other) {
		return and((JDK_PRIMITIVE_PREDICATE) other);
	}


#elif ! KEY_CLASS_Boolean

	/** {@inheritDoc}	
	 * @implNote Composing with a JDK type-specific predicate will be slightly less efficient than using a type-specific predicate, as the argument will have to be widened at each call.  */
	@Override
	default KEY_PREDICATE and(final JDK_PRIMITIVE_PREDICATE other) {
		return and(other instanceof KEY_PREDICATE ? (KEY_PREDICATE)other : (KEY_PREDICATE)other::test);
	}

#endif

	/** {@inheritDoc}
	 * @deprecated Please use the corresponding type-specific method instead. */
	@Deprecated
	@Override
	default Predicate<KEY_GENERIC_CLASS> and(final Predicate<? super KEY_GENERIC_CLASS> other) {
		return Predicate.super.and(other);
	}

	@Override
	/** {@inheritDoc} */
	default KEY_PREDICATE negate() {
		return t -> ! test(t);
	}

    /**
	 * Returns a composed type-specific predicate that represents a short-circuiting logical
	 * OR of this type-specific predicate and another. 
	 * @param other a predicate that will be logically-ORed with this predicate.
	 * @return a composed predicate that represents the short-circuiting logical
	 * OR of this predicate and the {@code other} predicate.
	 * @see Predicate#or
	 * @apiNote Implementing classes should generally override this method and 
	 * keep the default implementation of the other overloads, which will 
	 * delegate to this method (after proper conversions).
	 */
	default KEY_PREDICATE or(final METHOD_ARG_PREDICATE other) {
		Objects.requireNonNull(other);
		return t -> test(t) || other.test(t);
	}

#if KEYS_INT_LONG_DOUBLE

	/**
	 * Returns a composed type-specific predicate that represents a short-circuiting logical
	 * OR of this type-specific predicate and another. 
	 *
	 * <p><b>WARNING</b>: Overriding this method is almost always a mistake, as this
	 * overload only exists to disambiguate. Instead, override the {@code or()} overload
	 * that uses the JDK's primitive predicate type (e.g. {@link java.util.function.IntPredicate}).
	 *
	 * <p>If Java supported final default methods, this would be one, but sadly it does not.
	 *
	 * <p>If you checked and are overriding the version with {@code java.util.function.XPredicate}, and
	 * you still see this warning, then your IDE is incorrectly conflating this method with the proper
	 * method to override, and you can safely ignore this message.
	 *
	 * @param other a predicate that will be logically-ORed with this predicate.
	 * @return a composed predicate that represents the short-circuiting logical
	 * OR of this predicate and the {@code other} predicate.
	 * @see Predicate#or
	 */
	default KEY_PREDICATE or(final KEY_PREDICATE other) {
		return or((JDK_PRIMITIVE_PREDICATE) other);
	}

#elif ! KEY_CLASS_Boolean

	/** {@inheritDoc}	
	 * @implNote Composing with a JDK type-specific predicate will be slightly less efficient than using a type-specific predicate, as the argument will have to be widened at each call.  */
	@Override
	default KEY_PREDICATE or(final JDK_PRIMITIVE_PREDICATE other) {
		return or(other instanceof KEY_PREDICATE ? (KEY_PREDICATE)other : (KEY_PREDICATE)other::test);
	}

#endif

	/** {@inheritDoc}
	 * @deprecated Please use the corresponding type-specific method instead. */
	@Deprecated
	@Override
	default Predicate<KEY_GENERIC_CLASS> or(final Predicate<? super KEY_GENERIC_CLASS> other) {
		return Predicate.super.or(other);
	}

}