/* with
byte|char|short|int|long|float|double|obj key
short|byte|char|int|long|float|double|obj value
*/
/*
* Copyright 2014 the original author or authors.
*
* 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 com.koloboke.collect.impl;
import com.koloboke.function./*f*/ByteShortPredicate/**/;
import com.koloboke.function./*f*/ByteShortConsumer/**/;
import com.koloboke.collect.map.ByteShortMap;
import java.util.Map;
public final class CommonByteShortMapOps {
public static boolean containsAllEntries(final InternalByteShortMapOps/*<?>*/ map,
Map<?, ?> another) {
if (map == another)
throw new IllegalArgumentException();
if (another instanceof ByteShortMap) {
ByteShortMap m2 = (ByteShortMap) another;
/* if obj key || obj value */
if (
// if obj key //
m2.keyEquivalence().equals(map.keyEquivalence())
// endif //
/* if obj key obj value */ && /* endif */
// if obj value //
m2.valueEquivalence().equals(map.valueEquivalence())
// endif //
) {
/* endif */
if (map.size() < m2.size())
return false;
if (m2 instanceof InternalByteShortMapOps) {
//noinspection unchecked
return ((InternalByteShortMapOps) m2).allEntriesContainingIn(map);
}
/* if obj key || obj value */
}
// noinspection unchecked
/* endif */
return m2.forEachWhile(new
/*f*/ByteShortPredicate/**/() {
@Override
public boolean test(/* raw */byte a, /* raw */short b) {
return map.containsEntry(a, b);
}
});
}
for (Map.Entry<?, ?> e : another.entrySet()) {
if (!map.containsEntry(/* if !(obj key) */(Byte) /* endif */e.getKey(),
/* if !(obj value) */(Short) /* endif */e.getValue()))
return false;
}
return true;
}
public static /*<>*/ void putAll(final InternalByteShortMapOps/*<>*/ map,
Map<? extends Byte, ? extends Short> another) {
if (map == another)
throw new IllegalArgumentException();
long maxPossibleSize = map.sizeAsLong() + Containers.sizeAsLong(another);
map.ensureCapacity(maxPossibleSize);
if (another instanceof ByteShortMap) {
if (another instanceof InternalByteShortMapOps) {
((InternalByteShortMapOps) another).reversePutAllTo(map);
} else {
((ByteShortMap) another).forEach(new /*f*/ByteShortConsumer/*<>*/() {
@Override
public void accept(byte key, short value) {
map.justPut(key, value);
}
});
}
} else {
for (Map.Entry<? extends Byte, ? extends Short> e : another.entrySet()) {
map.justPut(e.getKey(), e.getValue());
}
}
}
private CommonByteShortMapOps() {}
}