ActionBase IActionVisitor <XElement, ActionBase> .Visit(ActionConstantPool action, XElement xAction) { var xStrings = xAction.RequiredElement("strings"); foreach (var xString in xStrings.Elements()) { action.ConstantPool.Add(xString.RequiredStringAttribute("value")); } return(action); }
XElement IActionVisitor <XElement, XElement> .Visit(ActionConstantPool action, XElement param) { var res = new XElement(XActionNames.FromAction(action)); var strings = new XElement("strings"); foreach (var item in action.ConstantPool) { strings.Add(new XElement("String", new XAttribute("value", item))); } res.Add(strings); return(res); }
/// <summary> /// Read <see cref="SwfOp.ByteCode.Actions.ActionConstantPool">constant pool</see> action from swf. the constant pool is not parsed. /// </summary> private ActionConstantPool ReadActionConstantPool(BinaryReader br) { // read block length int len = Convert.ToInt32(br.ReadUInt16()); int constCount = Convert.ToInt32(br.ReadUInt16()); string[] constantPool = new string[constCount]; for (int i = 0; i < constCount; i++) { constantPool[i] = BinaryStringRW.ReadString(br); } ActionConstantPool a = new ActionConstantPool(constantPool); //a.ByteSize = len+3; return(a); }