org.robolectric.res.android.IdmapEntries Maven / Gradle / Ivy
package org.robolectric.res.android;
import static org.robolectric.res.android.Errors.*;
// transliterated from https://android.googlesource.com/platform/frameworks/base/+/android-9.0.0_r12/libs/androidfw/ResourceTypes.cpp
public class IdmapEntries {
public boolean hasEntries() {
if (mData == null) {
return false;
}
return (Util.dtohs(mData[0]) > 0);
}
// int byteSize() {
// if (mData == null) {
// return 0;
// }
// short entryCount = Util.dtohs(mData[2]);
// return (SIZEOF_SHORT * 4) + (SIZEOF_INT * static_cast(entryCount));
// }
byte targetTypeId() {
if (mData == null) {
return 0;
}
return (byte) Util.dtohs(mData[0]);
}
public byte overlayTypeId() {
if (mData == null) {
return 0;
}
return (byte) Util.dtohs(mData[1]);
}
public int lookup(int entryId, Ref outEntryId) {
short entryCount = Util.dtohs(mData[2]);
short offset = Util.dtohs(mData[3]);
if (entryId < offset) {
// The entry is not present in this idmap
return BAD_INDEX;
}
entryId -= offset;
if (entryId >= entryCount) {
// The entry is not present in this idmap
return BAD_INDEX;
}
throw new UnsupportedOperationException("todo"); // todo
// // It is safe to access the type here without checking the size because
// // we have checked this when it was first loaded.
//// final int[] entries = reinterpret_cast(mData) + 2;
// final int[] entries = reinterpret_cast(mData) + 2;
// int mappedEntry = Util.dtohl(entries[entryId]);
// if (mappedEntry == 0xffffffff) {
// // This entry is not present in this idmap
// return BAD_INDEX;
// }
// *outEntryId = static_cast(mappedEntry);
// return NO_ERROR;
}
private short[] mData;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy