public override void executa(IOrganismo o) { int memSize = o.getReg(getByteOrganismo(o, 1)); if (o.child != null) { mundo.dealloc(o.child); o.clearChild(); o.fatalError(); return; } memSize = ALifeConsts.validateMemorySize(o, memSize); if (memSize == 0) { o.fatalError(); return; } IOrganismo child = mundo.alloc(memSize, o); if (child.isAlive()) { o.addFitness(); o.setChild(child); o.setReg(getByteOrganismo(o, 2), child.sp()); } else { o.error(); o.setReg(getByteOrganismo(o, 2), 0); } }
public virtual void dealloc(IOrganismo o) { //Log.Info("Dealloc: " + o.oid); if (o == null) { return; } organismos.Remove(o); referView.RemoveOrganismo(o); organismosMap.Remove(o.id); if (o.child != null) { dealloc(o.child); } o.clearChild(); killCount++; o.kill(); if (!recycleBin.Contains(o)) { recycleBin.Add(o); } else { Log.error("Program is already present on the recycle bin: " + o.oid); } cpu().deallocate(o); allocated.Remove(o); }
public void clearParent() { if (_parent != null && _parent.child == this) { _parent.clearChild(); } _parent = null; }
public override void executa(IOrganismo o) { mundo.getMutation().divisionMutation(o); if (o.child != null) { if (!o.child.isAlive()) { mundo.dealloc(o.child); o.criticalError(); o.clearChild(); return; } o.child.parent = o; if (mundo.start(o.child)) { if (o.child == null) { o.clearChild(); return; } o.addChild(); o.child.clearParent(); o.clearChild(); o.addFitness(); } else { o.clearChild(); o.criticalError(); } } else { o.fatalError(); } }