package com.github.nukc.plugin.axml.decode;
import com.github.nukc.plugin.axml.utils.Pair;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public abstract class BXMLNode implements IVisitable{
public Pair<Integer,Integer> mChunkSize = new Pair<Integer,Integer>();
public Pair<Integer,Integer> mLineNumber= new Pair<Integer,Integer>();
{
mLineNumber.first = 0;
mLineNumber.second = 0;
}
private List<BXMLNode> mChild;
public void checkTag(int expect, int value) throws IOException{
if(value != expect){
throw new IOException("Can't read current node");
}
}
public void readStart(IntReader reader) throws IOException{
mChunkSize.first = reader.readInt();
mLineNumber.first = reader.readInt();
}
public void readEnd(IntReader reader) throws IOException{
mChunkSize.second = reader.readInt();
mLineNumber.second = reader.readInt();
}
public void writeStart(IntWriter writer) throws IOException{
writer.writeInt(mChunkSize.first);
writer.writeInt(mLineNumber.first);
}
public void writeEnd(IntWriter writer) throws IOException{
writer.writeInt(mChunkSize.second);
writer.writeInt(mLineNumber.second);
}
public boolean hasChild(){
return (mChild != null && !mChild.isEmpty());
}
public List<BXMLNode> getChildren(){
return mChild;
}
public void addChild(BXMLNode node){
if(mChild == null) mChild = new ArrayList<BXMLNode>();
if(node != null){
mChild.add(node);
}
}
public abstract void prepare();
public Pair<Integer,Integer> getSize(){
return mChunkSize;
}
public Pair<Integer,Integer> getLineNumber(){
return mLineNumber;
}
}