Package tv.porst.swfretools.parser.actions.as3

Source Code of tv.porst.swfretools.parser.actions.as3.AS3LookupswitchParser

package tv.porst.swfretools.parser.actions.as3;

import static tv.porst.swfretools.parser.SWFParserHelpers.parseINT24;
import static tv.porst.swfretools.parser.SWFParserHelpers.parseUINT8;

import java.util.ArrayList;
import java.util.List;

import tv.porst.splib.binaryparser.INT24;
import tv.porst.splib.binaryparser.UINT8;
import tv.porst.swfretools.parser.SWFBinaryParser;
import tv.porst.swfretools.parser.SWFParserException;
import tv.porst.swfretools.parser.structures.EncodedU30;
import tv.porst.swfretools.parser.structures.EncodedU30Parser;

/**
* Parses ActionScript 3 'lookupswitch' instructions.
*/
public class AS3LookupswitchParser {

  public static AS3Lookupswitch parse(final SWFBinaryParser parser, final String fieldName) throws SWFParserException {

    final UINT8 opcode = parseUINT8(parser, 0x00006, fieldName + "::opcode");
    final INT24 defaultOffset = parseINT24(parser, 0x00006, fieldName + "::default_offset");
    final EncodedU30 caseCounts = EncodedU30Parser.parse(parser, fieldName + "::case_counts");

    final List<INT24> caseOffsets = new ArrayList<INT24>();

    for (int i=0;i<caseCounts.value()+1;i++) {
      caseOffsets.add(parseINT24(parser, 0x00006, fieldName + String.format("::case_offsets[%d]", i)));
    }

    return new AS3Lookupswitch(opcode, defaultOffset, caseCounts, new EncodedS24List(caseOffsets));
  }
}
TOP

Related Classes of tv.porst.swfretools.parser.actions.as3.AS3LookupswitchParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.