45 * this software without specific prior written permission.
46 *
47 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
48 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
49 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
50 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
51 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
52 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
53 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
54 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
55 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
56 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
57 * THE POSSIBILITY OF SUCH DAMAGE.
58 */
59 package jdk.internal.org.objectweb.asm.tree.analysis;
60
61 import java.util.AbstractSet;
62 import java.util.HashSet;
63 import java.util.Iterator;
64 import java.util.NoSuchElementException;
65 import java.util.Set;
66
67 /**
68 * A set of at most two elements.
69 *
70 * @author Eric Bruneton
71 */
72 class SmallSet<E> extends AbstractSet<E> implements Iterator<E> {
73
74 // if e1 is null, e2 must be null; otherwise e2 must be different from e1
75
76 E e1, e2;
77
78 static final <T> Set<T> emptySet() {
79 return new SmallSet<T>(null, null);
80 }
81
82 SmallSet(final E e1, final E e2) {
83 this.e1 = e1;
84 this.e2 = e2;
85 }
142 }
143 if (e2 == null) { // this contains exactly one element
144 // if (s.e2 == null) { // cannot happen
145 // return new SmallSet(e1, s.e1); // necessarily e1 != s.e1
146 // } else
147 if (e1 == s.e1 || e1 == s.e2) { // this in included in s
148 return s;
149 }
150 }
151 // here we know that there are at least 3 distinct elements
152 HashSet<E> r = new HashSet<E>(4);
153 r.add(e1);
154 if (e2 != null) {
155 r.add(e2);
156 }
157 r.add(s.e1);
158 if (s.e2 != null) {
159 r.add(s.e2);
160 }
161 return r;
162 }
163 }
|
45 * this software without specific prior written permission.
46 *
47 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
48 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
49 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
50 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
51 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
52 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
53 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
54 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
55 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
56 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
57 * THE POSSIBILITY OF SUCH DAMAGE.
58 */
59 package jdk.internal.org.objectweb.asm.tree.analysis;
60
61 import java.util.AbstractSet;
62 import java.util.HashSet;
63 import java.util.Iterator;
64 import java.util.NoSuchElementException;
65 import java.util.Objects;
66 import java.util.Set;
67 import java.util.function.Block;
68
69 /**
70 * A set of at most two elements.
71 *
72 * @author Eric Bruneton
73 */
74 class SmallSet<E> extends AbstractSet<E> implements Iterator<E> {
75
76 // if e1 is null, e2 must be null; otherwise e2 must be different from e1
77
78 E e1, e2;
79
80 static final <T> Set<T> emptySet() {
81 return new SmallSet<T>(null, null);
82 }
83
84 SmallSet(final E e1, final E e2) {
85 this.e1 = e1;
86 this.e2 = e2;
87 }
144 }
145 if (e2 == null) { // this contains exactly one element
146 // if (s.e2 == null) { // cannot happen
147 // return new SmallSet(e1, s.e1); // necessarily e1 != s.e1
148 // } else
149 if (e1 == s.e1 || e1 == s.e2) { // this in included in s
150 return s;
151 }
152 }
153 // here we know that there are at least 3 distinct elements
154 HashSet<E> r = new HashSet<E>(4);
155 r.add(e1);
156 if (e2 != null) {
157 r.add(e2);
158 }
159 r.add(s.e1);
160 if (s.e2 != null) {
161 r.add(s.e2);
162 }
163 return r;
164 }
165
166 @Override
167 public void forEach(Block<? super E> block) {
168 Objects.requireNonNull(block);
169 if (e1 != null) {
170 block.accept(e1);
171 if (e2 != null) {
172 block.accept(e2);
173 }
174 }
175 }
176 }
|