package net.minecraft.util; import java.lang.reflect.Array; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class ThreadSafeBoundList { private final Object[] field_152759_a; private final Class field_152760_b; private final ReadWriteLock field_152761_c = new ReentrantReadWriteLock(); private int field_152762_d; private int field_152763_e; private static final String __OBFID = "CL_00001868"; public ThreadSafeBoundList(Class p_i1126_1_, int p_i1126_2_) { this.field_152760_b = p_i1126_1_; this.field_152759_a = (Object[])((Object[])Array.newInstance(p_i1126_1_, p_i1126_2_)); } public Object func_152757_a(Object p_152757_1_) { this.field_152761_c.writeLock().lock(); this.field_152759_a[this.field_152763_e] = p_152757_1_; this.field_152763_e = (this.field_152763_e + 1) % this.func_152758_b(); if (this.field_152762_d < this.func_152758_b()) { ++this.field_152762_d; } this.field_152761_c.writeLock().unlock(); return p_152757_1_; } public int func_152758_b() { this.field_152761_c.readLock().lock(); int var1 = this.field_152759_a.length; this.field_152761_c.readLock().unlock(); return var1; } public Object[] func_152756_c() { Object[] var1 = (Object[])((Object[])Array.newInstance(this.field_152760_b, this.field_152762_d)); this.field_152761_c.readLock().lock(); for (int var2 = 0; var2 < this.field_152762_d; ++var2) { int var3 = (this.field_152763_e - this.field_152762_d + var2) % this.func_152758_b(); if (var3 < 0) { var3 += this.func_152758_b(); } var1[var2] = this.field_152759_a[var3]; } this.field_152761_c.readLock().unlock(); return var1; } }