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); } }
private void returnPos(IOrganismo o, int pos) { if (pos >= 0) { o.setReg(getByteOrganismo(o, 1), pos); } else { o.error(); } }
private void returnPos(IOrganismo o, int pos) { if (pos >= 0) { o.ip = pos - 1; } else { o.error(); } }
public void fatalError() { if (!alive) { return; } _error += mundo.settings.errorCritical; if (_parent != null) { _parent.error(); } mundo.dealloc(this); }
public override void executa(IOrganismo o) { o.fillTemplate(getStep()); if (o.sizeBuffer == 0) { o.error(); return; } int posF = -1; int posB = -1; if (fwd && bwd) { posF = o.searchTemplateFwd(); posB = o.searchTemplateBwd(); if (posB < 0) { returnPos(o, posF); return; } if (posF < 0) { returnPos(o, posB); return; } int difF = posF - o.ip; int difB = o.ip - posB; o.setReg(getByteOrganismo(o, 1), difF < difB ? posF : posB); } else { if (fwd) { posF = o.searchTemplateFwd(); returnPos(o, posF); } if (bwd) { posB = o.searchTemplateBwd(); returnPos(o, posB); } } }