// 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; }