/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package transformacie;

import data.*;

/**
 *
 * @author chislim
 */
public class UpravaKvantifikatorov 
{

    public UpravaKvantifikatorov() 
    {
        Uzol.f.vypis3("\n\nUPRAVA KVANTIFIKATOROV \n");
    }

    public void runUpravaKvantifikatorov(Uzol u) 
    {
        u = u.lavy;
        boolean neg = false;
       
        while (u instanceof UzolUnarny) 
        {
          
            if (((UzolUnarny) u).getUnarna() == Utils.velky) 
            {
                //ak je nad nim negacia tak nebudem vytvarat novu ale zrusim tu vrchnu..
               
                if (u.otec instanceof UzolUnarny)
                {
                   
                    if (((UzolUnarny) u.otec).getUnarna() == Utils.negacia) 
                    {

                        u.otec.otec.lavy = u;
                        u.otec = u.otec.otec;
                    }
                    else 
                    {
                        Uzol n = new UzolUnarny(u.otec, "" + Utils.negacia);
                        ((UzolUnarny) n).setLavySyn(u);
                        u.otec.lavy = n;
                        u.otec = n;
                    }
                }
               
                ((UzolUnarny) u).setUnarna(Utils.maly);
              
                if (u.lavy instanceof UzolUnarny) 
                {
                  
                    if (((UzolUnarny) u.lavy).getUnarna() == Utils.negacia)
                    {
                        //zmazanie

                        u.lavy.lavy.otec = u;
                        u.lavy = u.lavy.lavy;
                    } 
                    else 
                    {

                        Uzol n2 = new UzolUnarny(u, "" + Utils.negacia);
                        ((UzolUnarny) n2).setLavySyn(u.lavy);
                        u.lavy.otec = n2;
                        u.lavy = n2;
                    }

                } 
                else 
                {
                    Uzol n2 = new UzolUnarny(u, "" + Utils.negacia);
                    ((UzolUnarny) n2).setLavySyn(u.lavy);
                    u.lavy.otec = n2;
                    u.lavy = n2;
                }
            }
            u = u.lavy;
        }
    }
}
