/******************************************************************************* * See the NOTICE file distributed with this work for additional information * regarding copyright ownership. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package hr.fer.zemris.vhdllab.applets.editor.newtb.model.patterns; import hr.fer.zemris.vhdllab.applets.editor.newtb.enums.Messages; import hr.fer.zemris.vhdllab.applets.editor.newtb.exceptions.UniformPatternException; import hr.fer.zemris.vhdllab.applets.editor.newtb.exceptions.UniformSignalChangeException; import hr.fer.zemris.vhdllab.applets.editor.newtb.model.signals.SignalChange; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import java.util.Random; public class RandomVectorPattern extends VectorPattern { private long pulseLen; private short dim; public RandomVectorPattern(int cycles, long pulseLen, short dimension) throws UniformPatternException { super(cycles); if(pulseLen <= 0) throw new UniformPatternException(Messages.randomPos); this.pulseLen = pulseLen; this.dim = dimension; } @Override public List<SignalChange> getChanges(long start, long end) throws UniformSignalChangeException, UniformPatternException { List<SignalChange> ret = new ArrayList<SignalChange>(); BigInteger maxGen = BigInteger.valueOf(2l).pow(dim); int maxGenInt = maxGen.bitLength() + 1 < 32 ? maxGen.intValue() : Integer.MAX_VALUE; Random r = new Random(); for( int i = 0; i < cycles && start + i * pulseLen <= end && start + i * pulseLen >= start; i++) ret.add(new SignalChange( dim, getWithTrailZeroes(r.nextInt(maxGenInt), dim), start + i*pulseLen)); return ret; } }