private async Task <ResourceTableMap> readResourceTableMap() { ResourceTableMap resourceTableMap = new ResourceTableMap(); resourceTableMap.setNameRef(Buffers.readUInt(buffer)); resourceTableMap.setResValue(await ParseUtils.readResValue(buffer, stringPool)); if ((resourceTableMap.getNameRef() & 0x02000000) != 0) { //read arrays } else if ((resourceTableMap.getNameRef() & 0x01000000) != 0) { // read attrs } else { } return(resourceTableMap); }
private async Task <ResourceEntry> readResourceEntry() { long beginPos = buffer.position(); ResourceEntry resourceEntry = new ResourceEntry(); // size is always 8(simple), or 16(complex) resourceEntry.setSize(await Buffers.readUShort(buffer)); resourceEntry.setFlags(await Buffers.readUShort(buffer)); long keyRef = buffer.getInt(); string key = keyStringPool.get((int)keyRef); resourceEntry.setKey(key); if ((resourceEntry.getFlags() & ResourceEntry.FLAG_COMPLEX) != 0) { ResourceMapEntry resourceMapEntry = new ResourceMapEntry(resourceEntry); // Resource identifier of the parent mapping, or 0 if there is none. resourceMapEntry.setParent(Buffers.readUInt(buffer)); resourceMapEntry.setCount(Buffers.readUInt(buffer)); buffer.position((int)(beginPos + resourceEntry.getSize())); //An individual complex Resource entry comprises an entry immediately followed by one or more fields. ResourceTableMap[] resourceTableMaps = new ResourceTableMap[(int)resourceMapEntry.getCount()]; for (int i = 0; i < resourceMapEntry.getCount(); i++) { resourceTableMaps[i] = await readResourceTableMap(); } resourceMapEntry.setResourceTableMaps(resourceTableMaps); return(resourceMapEntry); } else { buffer.position((int)(beginPos + resourceEntry.getSize())); resourceEntry.setValue(await ParseUtils.readResValue(buffer, stringPool)); return(resourceEntry); } }