Home | History | Annotate | Download | only in android
      1 package org.robolectric.res.android;
      2 
      3 import static org.robolectric.res.android.Errors.*;
      4 
      5 // transliterated from https://android.googlesource.com/platform/frameworks/base/+/android-9.0.0_r12/libs/androidfw/ResourceTypes.cpp
      6 public class IdmapEntries {
      7 
      8   public boolean hasEntries() {
      9     if (mData == null) {
     10       return false;
     11     }
     12 
     13     return (Util.dtohs(mData[0]) > 0);
     14   }
     15 
     16 //  int byteSize() {
     17 //    if (mData == null) {
     18 //      return 0;
     19 //    }
     20 //    short entryCount = Util.dtohs(mData[2]);
     21 //    return (SIZEOF_SHORT * 4) + (SIZEOF_INT * static_cast<int>(entryCount));
     22 //  }
     23 
     24   byte targetTypeId() {
     25     if (mData == null) {
     26       return 0;
     27     }
     28     return (byte) Util.dtohs(mData[0]);
     29   }
     30 
     31   public byte overlayTypeId() {
     32     if (mData == null) {
     33       return 0;
     34     }
     35     return (byte) Util.dtohs(mData[1]);
     36   }
     37 
     38   public int lookup(int entryId, Ref<Short> outEntryId) {
     39     short entryCount = Util.dtohs(mData[2]);
     40     short offset = Util.dtohs(mData[3]);
     41 
     42     if (entryId < offset) {
     43       // The entry is not present in this idmap
     44       return BAD_INDEX;
     45     }
     46 
     47     entryId -= offset;
     48 
     49     if (entryId >= entryCount) {
     50       // The entry is not present in this idmap
     51       return BAD_INDEX;
     52     }
     53 
     54     throw new UnsupportedOperationException("todo"); // todo
     55 
     56 //    // It is safe to access the type here without checking the size because
     57 //    // we have checked this when it was first loaded.
     58 ////        final int[] entries = reinterpret_cast<final uint32_t*>(mData) + 2;
     59 //        final int[] entries = reinterpret_cast<final uint32_t*>(mData) + 2;
     60 //    int mappedEntry = Util.dtohl(entries[entryId]);
     61 //    if (mappedEntry == 0xffffffff) {
     62 //      // This entry is not present in this idmap
     63 //      return BAD_INDEX;
     64 //    }
     65 //        *outEntryId = static_cast<short>(mappedEntry);
     66 //    return NO_ERROR;
     67   }
     68 
     69   private short[] mData;
     70 
     71 }
     72