package com.jpexs.decompiler.flash.amf.amf3.types;
import com.jpexs.decompiler.flash.amf.amf3.ListMap;
import com.jpexs.decompiler.flash.amf.amf3.WithSubValues;
import com.jpexs.decompiler.flash.exporters.amf.amf3.Amf3Exporter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ArrayType implements WithSubValues, Amf3ValueType {
private List<Object> denseValues;
private Map<String, Object> associativeValues;
public ArrayType(Map<? extends String, ? extends Object> associativeValues) {
this(new ArrayList<>(), associativeValues);
}
public ArrayType(List<Object> denseValues) {
this(denseValues, new HashMap<>());
}
public ArrayType() {
this(new ArrayList<>(), new HashMap<>());
}
public ArrayType(List<Object> denseValues, Map<? extends String, ? extends Object> associativeValues) {
this.denseValues = new ArrayList<>(denseValues);
this.associativeValues = new ListMap<>(associativeValues);
}
public List<Object> getDenseValues() {
return new ArrayList<>(denseValues);
}
public void setDenseValues(List<Object> denseValues) {
this.denseValues = new ArrayList<>(denseValues);
}
public Object setDense(int key, Object value) {
return denseValues.set(key, value);
}
public Object putAssociative(String key, Object value) {
return associativeValues.put(key, value);
}
public Map<String, Object> getAssociativeValues() {
return new ListMap<>(associativeValues);
}
public Object getAssociative(String key) {
return associativeValues.get(key);
}
public Object getDense(int index) {
if (index >= 0 && index < denseValues.size()) {
return denseValues.get(index);
}
return null;
}
public Set<String> associativeKeySet() {
return associativeValues.keySet();
}
@Override
public String toString() {
return Amf3Exporter.amfToString(this);
}
@Override
public List<Object> getSubValues() {
List<Object> ret = new ArrayList<>();
ret.addAll(associativeValues.keySet());
ret.addAll(associativeValues.values());
ret.addAll(denseValues);
return ret;
}
public void setAssociativeValues(Map<String, Object> associativeValues) {
this.associativeValues = new ListMap<>(associativeValues);
}
}