package freenet.support; import freenet.client.async.ClientContext; import freenet.client.async.ClientRequestSelector; /** Second level tree node. At the base we have RGA's. Then we have these, SRGAs containing RGAs. * Then we have SRGAs containing SRGAs. * @author toad */ public class SectoredRandomGrabArraySimple<MyType,ChildType> extends SectoredRandomGrabArrayWithObject<MyType, ChildType, RandomGrabArrayWithObject<ChildType>> { private static volatile boolean logMINOR; static { Logger.registerClass(SectoredRandomGrabArraySimple.class); } public SectoredRandomGrabArraySimple(MyType object, RemoveRandomParent parent, ClientRequestSelector root) { super(object, parent, root); } /** Add directly to a RandomGrabArrayWithObject under us. */ public void add(ChildType client, RandomGrabArrayItem item, ClientContext context) { synchronized(root) { RandomGrabArrayWithObject<ChildType> rga; int clientIndex = haveClient(client); if(clientIndex == -1) { if(logMINOR) Logger.minor(this, "Adding new RGAWithClient for "+client+" on "+this+" for "+item); rga = new RandomGrabArrayWithObject<ChildType>(client, this, root); addElement(client, rga); } else { rga = (RandomGrabArrayWithObject<ChildType>) grabArrays[clientIndex]; } if(logMINOR) Logger.minor(this, "Adding "+item+" to RGA "+rga+" for "+client); rga.add(item, context); if(context != null) { clearWakeupTime(context); } if(logMINOR) Logger.minor(this, "Size now "+grabArrays.length+" on "+this); } } }