Пример #1
0
        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);
            }
        }
Пример #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);
        }
Пример #3
0
 public void clearParent()
 {
     if (_parent != null && _parent.child == this)
     {
         _parent.clearChild();
     }
     _parent = null;
 }
Пример #4
0
        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();
            }
        }