package com.oracle.objectfile.elf;
import java.util.Iterator;
import java.util.Map;
import com.oracle.objectfile.BuildDependency;
import com.oracle.objectfile.ElementImpl;
import com.oracle.objectfile.LayoutDecisionMap;
import com.oracle.objectfile.ObjectFile;
import com.oracle.objectfile.ObjectFile.Element;
import com.oracle.objectfile.StringSectionImpl;
import com.oracle.objectfile.elf.ELFObjectFile.ELFSection;
public class ELFStrtab extends ELFSection implements Iterable<String> {
StringSectionImpl impl;
@Override
public ElementImpl getImpl() {
return impl;
}
public ELFStrtab(ELFObjectFile owner, String name) {
this(owner, name, ELFObjectFile.SectionType.STRTAB);
}
public ELFStrtab(ELFObjectFile owner, final String name, ELFObjectFile.SectionType type) {
owner.super(name, type);
impl = new StringSectionImpl(this) {
@Override
public boolean isLoadable() {
return name.equals(".dynstr");
}
};
}
@Override
public byte[] getOrDecideContent(Map<Element, LayoutDecisionMap> alreadyDecided, byte[] contentHint) {
return impl.getOrDecideContent(alreadyDecided, contentHint);
}
@Override
public Iterable<BuildDependency> getDependencies(Map<Element, LayoutDecisionMap> decisions) {
return impl.getDependencies(decisions);
}
public Iterable<Iterable<String>> getContentProviders() {
return new Iterable<Iterable<String>>() {
@Override
public Iterator<Iterable<String>> iterator() {
return impl.contentProvidersIterator();
}
};
}
@Override
public Iterator<String> iterator() {
return impl.iterator();
}
public void addContentProvider(Iterable<String> contentProvider) {
impl.addContentProvider(contentProvider);
}
@Override
public int getMemSize(Map<Element, LayoutDecisionMap> alreadyDecided) {
return impl.getMemSize(alreadyDecided);
}
@Override
public int getOrDecideOffset(Map<Element, LayoutDecisionMap> alreadyDecided, int offsetHint) {
return ObjectFile.defaultGetOrDecideOffset(alreadyDecided, this, offsetHint);
}
@Override
public int getOrDecideSize(Map<Element, LayoutDecisionMap> alreadyDecided, int sizeHint) {
return ObjectFile.defaultGetOrDecideSize(alreadyDecided, this, sizeHint);
}
@Override
public int getOrDecideVaddr(Map<Element, LayoutDecisionMap> alreadyDecided, int vaddrHint) {
return ObjectFile.defaultGetOrDecideVaddr(alreadyDecided, this, vaddrHint);
}
@Override
public LayoutDecisionMap getDecisions(LayoutDecisionMap copyingIn) {
return ObjectFile.defaultDecisions(this, copyingIn);
}
}