/* * Copyright 2012 Phil Pratt-Szeliga and other contributors * http://chirrup.org/ * * See the file LICENSE for copying permission. */ package org.trifort.rootbeer.testcases.rootbeertest.ofcoarse; import java.util.Random; public class VariableAgeCutoff { private GpuList<VAgeStepItem> m_VAgeStepItems; private int m_MovieSize; public VariableAgeCutoff(int width, int height, int movie_size){ m_VAgeStepItems = new GpuList<VAgeStepItem>(); m_MovieSize = movie_size; int item_size = 150; for(int x = 0; x < width; x += item_size){ for(int y = 0; y < height; y += item_size){ m_VAgeStepItems.add(new VAgeStepItem(x, y, item_size)); } } } public int getAgeStepItemsSize(){ return m_VAgeStepItems.size(); } public void set(String variable_list){ String[] tokens = variable_list.split(","); for(int i = 0; i < m_VAgeStepItems.size(); ++i){ VAgeStepItem item = m_VAgeStepItems.get(i); String token = tokens[i]; int value = Integer.parseInt(token); item.m_AgeStep = value; } } private VariableAgeCutoff(){ m_VAgeStepItems = new GpuList<VAgeStepItem>(); } public boolean pastAgeStep(Point p, double time) { VAgeStepItem item = get(p); if(item == null) return false; return item.pastAgeStep((int) time); } @Override public VariableAgeCutoff clone(){ VariableAgeCutoff ret = new VariableAgeCutoff(); ret.m_MovieSize = m_MovieSize; for(int i = 0; i < m_VAgeStepItems.size(); ++i){ VAgeStepItem item = m_VAgeStepItems.get(i); ret.m_VAgeStepItems.add(item.clone()); } return ret; } private VAgeStepItem get(Point p) { for(int i = 0; i < m_VAgeStepItems.size(); ++i){ VAgeStepItem item = m_VAgeStepItems.get(i); if(item.contains(p)) return item; } return null; } public VariableAgeCutoff cloneRandom(Random rand) { VariableAgeCutoff ret = clone(); for(int i = 0; i < m_VAgeStepItems.size(); ++i){ VAgeStepItem item = m_VAgeStepItems.get(i); item.m_AgeStep += mod(rand); } return ret; } private double mod(Random rand) { double next = rand.nextDouble(); next *= 6; next -= 3; if(next < 0) next = 0; if(next > m_MovieSize) next = m_MovieSize; return next; } public void random(Random rand) { for(int i = 0; i < m_VAgeStepItems.size(); ++i){ VAgeStepItem item = m_VAgeStepItems.get(i); item.m_AgeStep = rand.nextInt(m_MovieSize); } } public String toCsvString(){ StringBuilder ret = new StringBuilder(); int count = 0; for(int i = 0; i < m_VAgeStepItems.size(); ++i){ VAgeStepItem item = m_VAgeStepItems.get(i); ret.append(item.m_AgeStep); if(count < m_VAgeStepItems.size() - 1) ret.append(","); count++; } return ret.toString(); } public void ageReplicate(int age_step) { GpuList<Integer> to_replicate = createListOfRandomIntegers(m_VAgeStepItems.size()); for(int i = 0; i < to_replicate.size(); ++i){ Integer index = to_replicate.get(i); VAgeStepItem item = m_VAgeStepItems.get(index); item.m_AgeStep = age_step; } } private GpuList<Integer> createListOfRandomIntegers(int size) { GpuList<Integer> all = createListOfSize(size); GpuList<Integer> ret = new GpuList<Integer>(); Random rand = new Random(); int ret_size = rand.nextInt(size); for(int i = 0; i < ret_size; ++i){ int index = rand.nextInt(all.size()-1); int curr = all.get(index); all.remove(index); ret.add(curr); } return ret; } private GpuList<Integer> createListOfSize(int size){ GpuList<Integer> ret = new GpuList<Integer>(); for(int i = 0; i < size; ++i){ ret.add(i); } return ret; } void setAgeStep(int index, int age_step) { m_VAgeStepItems.get(index).m_AgeStep = age_step; } public class VAgeStepItem { private BoundingBox m_Box; public int m_AgeStep; public VAgeStepItem(int x, int y, int item_size) { GpuList<Point> points = new GpuList<Point>(); points.add(new Point(x+item_size, y+item_size)); points.add(new Point(x+item_size, y-item_size)); points.add(new Point(x-item_size, y+item_size)); points.add(new Point(x-item_size, y-item_size)); m_Box = new BoundingBox(points, 1); } private VAgeStepItem(){ } private boolean contains(Point p1) { Point p2 = new Point(p1.X, p1.Y); return m_Box.contains(p2); } private boolean pastAgeStep(int time) { if(time > m_AgeStep) return true; return false; } @Override public VAgeStepItem clone(){ VAgeStepItem ret = new VAgeStepItem(); ret.m_AgeStep = m_AgeStep; ret.m_Box = new BoundingBox(m_Box); return ret; } } }