Methods Summary |
---|
public RegisterSpec | get(int n)Gets the indicated element. It is an error to call this with the
index for an element which was never set; if you do that, this
will throw {@code NullPointerException}.
return (RegisterSpec) get0(n);
|
public int | getRegistersSize()Gets the minimum required register count implied by this
instance. This is equal to the highest register number referred
to plus the widest width (largest category) of the type used in
that register.
int sz = size();
int result = 0;
for (int i = 0; i < sz; i++) {
RegisterSpec spec = (RegisterSpec) get0(i);
if (spec != null) {
int min = spec.getNextReg();
if (min > result) {
result = min;
}
}
}
return result;
|
public com.android.dexgen.rop.type.Type | getType(int n){@inheritDoc}
return get(n).getType().getType();
|
public int | getWordCount(){@inheritDoc}
int sz = size();
int result = 0;
for (int i = 0; i < sz; i++) {
result += getType(i).getCategory();
}
return result;
|
public int | indexOfRegister(int reg)Returns the index of a RegisterSpec in this list that uses the specified
register, or -1 if none in this list uses the register.
int sz = size();
for (int i = 0; i < sz; i++) {
RegisterSpec rs;
rs = get(i);
if (rs.getReg() == reg) {
return i;
}
}
return -1;
|
public static com.android.dexgen.rop.code.RegisterSpecList | make(RegisterSpec spec)Makes a single-element instance.
RegisterSpecList result = new RegisterSpecList(1);
result.set(0, spec);
return result;
|
public static com.android.dexgen.rop.code.RegisterSpecList | make(RegisterSpec spec0, RegisterSpec spec1)Makes a two-element instance.
RegisterSpecList result = new RegisterSpecList(2);
result.set(0, spec0);
result.set(1, spec1);
return result;
|
public static com.android.dexgen.rop.code.RegisterSpecList | make(RegisterSpec spec0, RegisterSpec spec1, RegisterSpec spec2)Makes a three-element instance.
RegisterSpecList result = new RegisterSpecList(3);
result.set(0, spec0);
result.set(1, spec1);
result.set(2, spec2);
return result;
|
public static com.android.dexgen.rop.code.RegisterSpecList | make(RegisterSpec spec0, RegisterSpec spec1, RegisterSpec spec2, RegisterSpec spec3)Makes a four-element instance.
RegisterSpecList result = new RegisterSpecList(4);
result.set(0, spec0);
result.set(1, spec1);
result.set(2, spec2);
result.set(3, spec3);
return result;
|
public void | set(int n, RegisterSpec spec)Sets the element at the given index.
set0(n, spec);
|
public RegisterSpec | specForRegister(int reg)Returns a RegisterSpec in this list that uses the specified register,
or null if there is none in this list.
int sz = size();
for (int i = 0; i < sz; i++) {
RegisterSpec rs;
rs = get(i);
if (rs.getReg() == reg) {
return rs;
}
}
return null;
|
public com.android.dexgen.rop.type.TypeList | withAddedType(com.android.dexgen.rop.type.Type type){@inheritDoc}
throw new UnsupportedOperationException("unsupported");
|
public com.android.dexgen.rop.code.RegisterSpecList | withFirst(RegisterSpec spec)Returns a new instance, which is the same as this instance,
except that it has an additional element prepended to the original.
Mutability of the result is inherited from the original.
int sz = size();
RegisterSpecList result = new RegisterSpecList(sz + 1);
for (int i = 0; i < sz; i++) {
result.set0(i + 1, get0(i));
}
result.set0(0, spec);
if (isImmutable()) {
result.setImmutable();
}
return result;
|
public com.android.dexgen.rop.code.RegisterSpecList | withOffset(int delta)Returns an instance that is identical to this one, except that
all register numbers are offset by the given amount. Mutability
of the result is inherited from the original.
int sz = size();
if (sz == 0) {
// Don't bother making a new zero-element instance.
return this;
}
RegisterSpecList result = new RegisterSpecList(sz);
for (int i = 0; i < sz; i++) {
RegisterSpec one = (RegisterSpec) get0(i);
if (one != null) {
result.set0(i, one.withOffset(delta));
}
}
if (isImmutable()) {
result.setImmutable();
}
return result;
|
public com.android.dexgen.rop.code.RegisterSpecList | withSequentialRegisters(int base, boolean duplicateFirst)Returns an instance that is identical to this one, except that
all register numbers are renumbered sequentially from the given
base, with the first number duplicated if indicated.
int sz = size();
if (sz == 0) {
// Don't bother making a new zero-element instance.
return this;
}
RegisterSpecList result = new RegisterSpecList(sz);
for (int i = 0; i < sz; i++) {
RegisterSpec one = (RegisterSpec) get0(i);
result.set0(i, one.withReg(base));
if (duplicateFirst) {
duplicateFirst = false;
} else {
base += one.getCategory();
}
}
if (isImmutable()) {
result.setImmutable();
}
return result;
|
public com.android.dexgen.rop.code.RegisterSpecList | withoutFirst()Returns a new instance, which is the same as this instance,
except that its first element is removed. Mutability of the
result is inherited from the original.
int newSize = size() - 1;
if (newSize == 0) {
return EMPTY;
}
RegisterSpecList result = new RegisterSpecList(newSize);
for (int i = 0; i < newSize; i++) {
result.set0(i, get0(i + 1));
}
if (isImmutable()) {
result.setImmutable();
}
return result;
|
public com.android.dexgen.rop.code.RegisterSpecList | withoutLast()Returns a new instance, which is the same as this instance,
except that its last element is removed. Mutability of the
result is inherited from the original.
int newSize = size() - 1;
if (newSize == 0) {
return EMPTY;
}
RegisterSpecList result = new RegisterSpecList(newSize);
for (int i = 0; i < newSize; i++) {
result.set0(i, get0(i));
}
if (isImmutable()) {
result.setImmutable();
}
return result;
|