package php.runtime.memory.helper;
import php.runtime.Memory;
import php.runtime.env.TraceInfo;
import php.runtime.memory.ArrayMemory;
import php.runtime.memory.ReferenceMemory;
public class ArrayValueMemory extends ReferenceMemory {
private Memory key;
private ArrayMemory array;
public ArrayValueMemory(Memory key, ArrayMemory array, ReferenceMemory value) {
super(value);
this.key = key;
this.array = array;
}
@Override
public Memory assign(Memory memory) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).assign(memory);
return super.assign(memory);
}
@Override
public Memory assign(long memory) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).assign(memory);
return super.assign(memory);
}
@Override
public Memory assign(String memory) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).assign(memory);
return super.assign(memory);
}
@Override
public Memory assign(boolean memory) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).assign(memory);
return super.assign(memory);
}
@Override
public Memory assign(double memory) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).assign(memory);
return super.assign(memory);
}
@Override
public Memory assignRef(Memory reference) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).assignRef(reference);
return super.assignRef(reference);
}
@Override
public Memory refOfPush(TraceInfo trace) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).refOfPush();
return super.refOfPush(trace);
}
@Override
public Memory refOfIndex(TraceInfo trace, Memory index) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).refOfIndex(index);
return super.refOfIndex(trace, index);
}
@Override
public Memory refOfIndex(TraceInfo trace, long index) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).refOfIndex(trace, index);
return super.refOfIndex(trace, index);
}
@Override
public Memory refOfIndex(TraceInfo trace, double index) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).refOfIndex(trace, index);
return super.refOfIndex(trace, index);
}
@Override
public Memory refOfIndex(TraceInfo trace, String index) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).refOfIndex(trace, index);
return super.refOfIndex(trace, index);
}
@Override
public Memory refOfIndex(TraceInfo trace, boolean index) {
ArrayMemory dup = array.checkCopied();
if (dup != null) return dup.get(key).refOfIndex(trace, index);
return super.refOfIndex(trace, index);
}
@Override
public ReferenceMemory getReference() {
return this;
}
}