package scd_micro; /** * Noise generator for the detector. The generator lives in the persistent detector scope. * Its constructor runs in the persistent detector scope. Noise is generated in the detector scope * (and the allocated objects live in the detector scope). */ public class NoiseGenerator { private Object[] noiseRoot; private int noisePtr; public NoiseGenerator() { if (Constants.DETECTOR_NOISE) { noiseRoot = new Object[Constants.DETECTOR_NOISE_REACHABLE_POINTERS]; noisePtr = 0; } } private void generateNoise() { for(int i=0 ; i<Constants.DETECTOR_NOISE_ALLOCATE_POINTERS ; i++) { noiseRoot [ ( noisePtr++ ) % noiseRoot.length ] = new byte[Constants.DETECTOR_NOISE_ALLOCATION_SIZE]; } } private void generateNoiseWithVariableObjectSize() { int currentIncrement = 0; int maxIncrement = Constants.DETECTOR_NOISE_MAX_ALLOCATION_SIZE - Constants.DETECTOR_NOISE_MIN_ALLOCATION_SIZE; for(int i=0 ; i<Constants.DETECTOR_NOISE_ALLOCATE_POINTERS ; i++) { noiseRoot [ ( noisePtr++ ) % noiseRoot.length ] = new byte[ Constants.DETECTOR_NOISE_MIN_ALLOCATION_SIZE + (currentIncrement % maxIncrement) ]; currentIncrement += Constants.DETECTOR_NOISE_ALLOCATION_SIZE_INCREMENT; } } public void generateNoiseIfEnabled() { if (Constants.DETECTOR_NOISE) { if (Constants.DETECTOR_NOISE_VARIABLE_ALLOCATION_SIZE) { generateNoiseWithVariableObjectSize(); } else { generateNoise(); } } } }