// Decompiled by DJ v3.11.11.95 Copyright 2009 Atanas Neshkov Date: 26/10/2010 13:57:43
// Home Page: http://members.fortunecity.com/neshkov/dj.html http://www.neshkov.com/dj.html - Check often for new version!
// Decompiler options: packimports(3)
package jcircus.classesdescompiladas;
// Referenced classes of package org.jcsp.lang:
// AltingBarrier, AltingBarrierError, JCSP_InternalError, AltingBarrierCoordinate
class AltingBarrierBase
{
AltingBarrierBase()
{
frontEnds = null;
enrolled = 0;
countdown = 0;
}
AltingBarrier[] expand(int i)
{
AltingBarrier aaltingbarrier[] = new AltingBarrier[i];
for(int j = 0; j < i; j++)
{
frontEnds = new AltingBarrier(this, frontEnds);
aaltingbarrier[j] = frontEnds;
}
enrolled += i;
countdown += i;
return aaltingbarrier;
}
AltingBarrier expand()
{
enrolled++;
countdown++;
frontEnds = new AltingBarrier(this, frontEnds);
return frontEnds;
}
void contract(AltingBarrier aaltingbarrier[])
{
AltingBarrier altingbarrier = aaltingbarrier[0];
int i = 0;
AltingBarrier altingbarrier1 = null;
AltingBarrier altingbarrier2;
for(altingbarrier2 = frontEnds; altingbarrier2 != null && altingbarrier2 != altingbarrier; altingbarrier2 = altingbarrier2.next)
altingbarrier1 = altingbarrier2;
if(altingbarrier2 == null)
throw new AltingBarrierError("\n*** Could not find first front-end in AltingBarrier contract.");
aaltingbarrier[0].base = null;
aaltingbarrier[0] = null;
for(int j = 1; j < aaltingbarrier.length; j++)
{
if(altingbarrier2.enrolled)
i++;
altingbarrier2 = altingbarrier2.next;
if(altingbarrier2 == null)
throw new AltingBarrierError("\n*** Could not find second (or later) front-end in AltingBarrier contract.");
if(altingbarrier2 != aaltingbarrier[j])
throw new AltingBarrierError("\n*** Removal array in AltingBarrier contract not one delivered by expand.");
aaltingbarrier[j].base = null;
aaltingbarrier[j] = null;
}
if(altingbarrier2.enrolled)
i++;
if(altingbarrier1 == null)
frontEnds = altingbarrier2.next;
else
altingbarrier1.next = altingbarrier2.next;
enrolled -= i;
countdown -= i;
if(countdown == 0)
{
countdown = enrolled;
if(enrolled > 0)
{
AltingBarrierCoordinate.startEnable();
AltingBarrierCoordinate.startDisable(enrolled);
for(AltingBarrier altingbarrier3 = frontEnds; altingbarrier3 != null; altingbarrier3 = altingbarrier3.next)
altingbarrier3.schedule();
}
} else
if(countdown < 0)
throw new JCSP_InternalError("Please report the circumstances to jcsp-team@kent.ac.uk - thanks!");
}
void contract(AltingBarrier altingbarrier)
{
AltingBarrier altingbarrier1 = null;
AltingBarrier altingbarrier2;
for(altingbarrier2 = frontEnds; altingbarrier2 != null && altingbarrier2 != altingbarrier; altingbarrier2 = altingbarrier2.next)
altingbarrier1 = altingbarrier2;
if(altingbarrier2 == null)
throw new AltingBarrierError("\n*** Could not find front-end in AltingBarrier contract.");
if(altingbarrier1 == null)
frontEnds = altingbarrier2.next;
else
altingbarrier1.next = altingbarrier2.next;
altingbarrier.base = null;
if(altingbarrier.enrolled)
{
enrolled--;
countdown--;
}
if(countdown == 0)
{
countdown = enrolled;
if(enrolled > 0)
{
AltingBarrierCoordinate.startEnable();
AltingBarrierCoordinate.startDisable(enrolled);
for(AltingBarrier altingbarrier3 = frontEnds; altingbarrier3 != null; altingbarrier3 = altingbarrier3.next)
altingbarrier3.schedule();
}
} else
if(countdown < 0)
throw new JCSP_InternalError("Please report the circumstances to jcsp-team@kent.ac.uk - thanks!");
}
boolean enable()
{
countdown--;
if(countdown == 0)
{
countdown = enrolled;
AltingBarrierCoordinate.startDisable(enrolled);
for(AltingBarrier altingbarrier = frontEnds; altingbarrier != null; altingbarrier = altingbarrier.next)
altingbarrier.schedule();
return true;
} else
{
return false;
}
}
boolean disable()
{
if(countdown == enrolled)
{
return true;
} else
{
countdown++;
return false;
}
}
void resign()
{
enrolled--;
countdown--;
if(countdown == 0)
{
countdown = enrolled;
if(enrolled > 0)
{
AltingBarrierCoordinate.startEnable();
AltingBarrierCoordinate.startDisable(enrolled);
for(AltingBarrier altingbarrier = frontEnds; altingbarrier != null; altingbarrier = altingbarrier.next)
altingbarrier.schedule();
}
}
}
void enroll()
{
enrolled++;
countdown++;
}
private AltingBarrier frontEnds;
private int enrolled;
private int countdown;
}