/*
* Copyright 2012 Phil Pratt-Szeliga and other contributors
* http://chirrup.org/
*
* See the file LICENSE for copying permission.
*/
package org.trifort.rootbeer.test;
import org.trifort.rootbeer.runtime.FixedMemory;
public class AlignmentCheckedMemory extends FixedMemory {
public AlignmentCheckedMemory(int size){
super(size);
}
public void checkAlignment(int alignment){
long ptr = getPointer();
if(ptr % alignment != 0){
throw new RuntimeException("alignment of: "+alignment+" not working. ptr: "+ptr);
}
}
@Override
public int readInt(){
checkAlignment(4);
return super.readInt();
}
@Override
public short readShort(){
checkAlignment(2);
return super.readShort();
}
@Override
public float readFloat(){
checkAlignment(4);
return super.readFloat();
}
@Override
public double readDouble(){
checkAlignment(8);
return super.readDouble();
}
@Override
public long readLong(){
checkAlignment(8);
return super.readLong();
}
@Override
public void writeInt(int value){
checkAlignment(4);
super.writeInt(value);
}
@Override
public void writeShort(short value){
checkAlignment(2);
super.writeShort(value);
}
@Override
public void writeFloat(float value){
checkAlignment(4);
super.writeFloat(value);
}
@Override
public void writeDouble(double value){
checkAlignment(8);
super.writeDouble(value);
}
@Override
public void writeLong(long value){
checkAlignment(8);
super.writeLong(value);
}
}