package net.minecraft.util; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.lang.reflect.Array; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @SideOnly(Side.CLIENT) 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 i = this.field_152759_a.length; this.field_152761_c.readLock().unlock(); return i; } public Object[] func_152756_c() { Object[] aobject = (Object[])((Object[])Array.newInstance(this.field_152760_b, this.field_152762_d)); this.field_152761_c.readLock().lock(); for (int i = 0; i < this.field_152762_d; ++i) { int j = (this.field_152763_e - this.field_152762_d + i) % this.func_152758_b(); if (j < 0) { j += this.func_152758_b(); } aobject[i] = this.field_152759_a[j]; } this.field_152761_c.readLock().unlock(); return aobject; } }