blob: fbc2d0129d461588be1d278a4ad6d03472b55bca [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005 The Regents of the University of California.
* This material was produced under U.S. Government contract W-7405-ENG-36
* for Los Alamos National Laboratory, which is operated by the University
* of California for the U.S. Department of Energy. The U.S. Government has
* rights to use, reproduce, and distribute this software. NEITHER THE
* GOVERNMENT NOR THE UNIVERSITY MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR
* ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified
* to produce derivative works, such modified software should be clearly marked,
* so as not to confuse it with the version available from LANL.
*
* Additionally, this program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* LA-CC 04-115
*******************************************************************************/
package org.eclipse.ptp.debug.internal.core.aif;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.ptp.debug.core.aif.AIFFactory;
import org.eclipse.ptp.debug.core.aif.IAIFType;
import org.eclipse.ptp.debug.core.aif.IAIFTypeEnum;
public class AIFTypeEnum extends TypeIntegral implements IAIFTypeEnum {
private List<String> fields = new ArrayList<String>();
private List<String> values = new ArrayList<String>();
private IAIFType basetype;
private String name;
//<ID|S1=V1,S2=V2>is4
public AIFTypeEnum(String format, IAIFType basetype) {
this(format, true, basetype);
}
public AIFTypeEnum(String format, boolean signed, IAIFType basetype) {
super(signed);
this.basetype = basetype;
parse(format);
}
public IAIFType getBaseType() {
return basetype;
}
public int sizeof() {
return getNumberOfChildren() * basetype.sizeof();
}
protected void parse(String fmt) {
fmt = parseName(fmt);
if (fmt.length() > 0) {
String[] pairs = fmt.split(AIFFactory.SIGN_COMMA);
for (int i=0; i<pairs.length; i++) {
String[] results = pairs[i].split(AIFFactory.SIGN_EQUAL);
fields.add(results[0]);
values.add(results[1]);
}
}
}
protected String parseName(String fmt) {
int pos = fmt.indexOf(AIFFactory.SIGN_STROKE);
name = fmt.substring(0, pos);
int last_pos = fmt.lastIndexOf(AIFFactory.FDS_ENUM_END);
if (last_pos == -1)
return "";
return fmt.substring(pos+1, last_pos);
}
public String getName() {
return name;
}
public String[] getFields() {
return (String[])fields.toArray(new String[0]);
}
public String[] getTypes() {
return (String[])values.toArray(new String[0]);
}
public String getField(int index) {
return (String)fields.get(index);
}
public String getValue(int index) {
return (String)values.get(index);
}
public int getNumberOfChildren() {
return fields.size();
}
public String toString() {
String content = "<" + getName() + AIFFactory.SIGN_STROKE;
for (int i=0; i<fields.size(); i++) {
content += (String)fields.get(i) + "=" + (String)values.get(i);
if (i < fields.size()-1) {
content += ",";
}
}
return content + ">" + super.toString();
}
}