package org.radargun.stages.cache.background; import java.io.Serializable; import java.util.Arrays; /** * Log value that is written by single stressor - keeps its ID. * * @author Radim Vansa <rvansa@redhat.com> */ public class PrivateLogValue implements Serializable { private final int threadId; private final long[] operationIds; public PrivateLogValue(int threadId, long operationId) { this.threadId = threadId; operationIds = new long[] {operationId}; } public PrivateLogValue(int threadId, long[] operationIds) { this.threadId = threadId; this.operationIds = operationIds; } public PrivateLogValue with(long operationId) { long[] newOperationIds = new long[operationIds.length + 1]; System.arraycopy(operationIds, 0, newOperationIds, 0, operationIds.length); newOperationIds[operationIds.length] = operationId; return new PrivateLogValue(threadId, newOperationIds); } public PrivateLogValue shift(int checkedValues, long operationId) { long[] newOperationIds = new long[operationIds.length - checkedValues + 1]; System.arraycopy(operationIds, checkedValues, newOperationIds, 0, operationIds.length - checkedValues); newOperationIds[operationIds.length - checkedValues] = operationId; return new PrivateLogValue(threadId, newOperationIds); } public int size() { return operationIds.length; } public long getOperationId(int i) { return operationIds[i]; } public int getThreadId() { return threadId; } public boolean contains(long operationId) { for (int i = operationIds.length - 1; i >= 0; i--) { if (operationIds[i] == operationId) { return true; } } return false; } @Override public boolean equals(Object obj) { if (!(obj instanceof PrivateLogValue)) return false; PrivateLogValue other = (PrivateLogValue) obj; if (other.threadId != threadId) return false; return Arrays.equals(other.operationIds, operationIds); } @Override public int hashCode() { int result = threadId; result = 31 * result + (operationIds != null ? Arrays.hashCode(operationIds) : 0); return result; } @Override public String toString() { StringBuilder sb = new StringBuilder("[").append(threadId).append(" #").append(operationIds.length).append(": "); for (int i = 0; i < operationIds.length; i++) { sb.append(operationIds[i]); if (i != operationIds.length - 1) { sb.append(", "); } } return sb.append("]").toString(); } }