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

import data.*;

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

    public int zdola = 0;

    public Premenovanie()
    {
        Uzol.f.vypis3("\n\nPREMENOVANIE \n");
    }

    public void runPremenovanie(Uzol u)
    {
    
        String op;
        //if ((u instanceof UzolUnarny)) 
        //    f.vypis(""+((UzolUnarny)u).getOperand() );
        //       u.vypis();      
        //     f.vypis("\n");
        //if (zdola==1) u.visit=1;

        if ((zdola == 1) && (u instanceof UzolUnarny)) 
        {
            
            if ((((UzolUnarny) u).getUnarna() == Utils.velky) || (((UzolUnarny) u).getUnarna() == Utils.maly)) 
            {

                op = ((UzolUnarny) u).getOperand();
                //  f.vypis("\n"+"1"+" "+op+"\n");

                //  if (Utils.aktual.get(Utils.vars.indexOf(op))!=1) ((UzolUnarny)u).setOperand(""+op+Utils.aktual.get(Utils.vars.indexOf(op))   );
                //  f.vypis("\n"+"2"+"\n");   
               
                for (int i = 0; i < ((UzolUnarny) u).getAktualPoc(); i++)
                {
                    Utils.aktual.set(i, ((UzolUnarny) u).loadExAktual(i));
                }
 
                // if (Utils.vars.contains(op))
                {
                    Utils.aktual.set(Utils.vars.indexOf(op), new Integer(Utils.aktual.get(Utils.vars.indexOf(op)) - 1));
                }
            }
            u.visit = 1;
        }


        if ((u instanceof UzolUnarny) && (zdola == 0)) 
        {
            
            if ((((UzolUnarny) u).getUnarna() == Utils.velky) || (((UzolUnarny) u).getUnarna() == Utils.maly)) 
            {
                op = ((UzolUnarny) u).getOperand();
               
                if (Utils.vars.contains(op)) 
                {
                    ((UzolUnarny) u).saveAktual(Utils.aktual);
                    Utils.max.set(Utils.vars.indexOf(op), new Integer(Utils.max.get(Utils.vars.indexOf(op)) + 1));
                    Utils.aktual.set(Utils.vars.indexOf(op), new Integer(Utils.max.get(Utils.vars.indexOf(op))));
                } 
                else
                {
                    Utils.vars.add(new String(op));
                    Utils.max.add(new Integer(1));
                    Utils.aktual.add(new Integer(1));
                }
            }

        }

        if (u instanceof UzolOperand)
        {

            for (int i = 0; i < ((UzolOperand) u).pocetOperandov; i++) 
            {
                
                if ((Utils.vars.contains(((UzolOperand) u).operandy.get(i))) && (Utils.aktual.get(Utils.vars.indexOf(((UzolOperand) u).operandy.get(i))) != 1)) 
                {
                    ((UzolOperand) u).setOperand(i, "" + ((UzolOperand) u).operandy.get(i) +
                            +Utils.aktual.get(Utils.vars.indexOf(((UzolOperand) u).operandy.get(i))));
                }
            }

            u.visit = 1;
        }
        
        zdola = 0;
       
        if ((u.lavy != null) && (u.lavy.visit == 0))
        {
            runPremenovanie(u.lavy);
        }
        
        zdola = 0;
        
        if ((u.pravy != null) && (u.pravy.visit == 0))
        {
            runPremenovanie(u.pravy);
        }
        u.visit = 1;
        zdola = 1;

        if ((zdola == 1) && (u instanceof UzolUnarny)) 
        {
        
            if ((((UzolUnarny) u).getUnarna() == Utils.velky) || (((UzolUnarny) u).getUnarna() == Utils.maly))
            {

                op = ((UzolUnarny) u).getOperand();
                //  f.vypis("\n"+"1"+" "+op+"\n");

                if (Utils.aktual.get(Utils.vars.indexOf(op)) != 1)
                {
                    ((UzolUnarny) u).setOperand("" + op + Utils.aktual.get(Utils.vars.indexOf(op)));
                }
                //  f.vypis("\n"+"2"+"\n");   
                
                for (int i = 0; i < ((UzolUnarny) u).getAktualPoc(); i++) 
                {
                    Utils.aktual.set(i, ((UzolUnarny) u).loadExAktual(i));
                }

                // if (Utils.vars.contains(op))
                {
                //      Utils.aktual.set(Utils.vars.indexOf(op),new Integer(Utils.aktual.get(Utils.vars.indexOf(op))-1));            
                }
            }
            u.visit = 1;
        }
    }
}
