示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }