]> matita.cs.unibo.it Git - logicplayer.git/blob - mainActivity/src/com/example/furt/myapplication/FormulaOr.java
New version (to be tested).
[logicplayer.git] / mainActivity / src / com / example / furt / myapplication / FormulaOr.java
1 package com.example.furt.myapplication;
2
3
4 import java.util.ArrayList;
5 import java.util.List;
6
7 public class FormulaOr extends GenericFormula implements Formula
8 {
9     Formula leftF;
10     Formula rightF;
11     int leftPriority;
12     int rightPriority;
13     FormulaOr(Formula F1,Formula F2)
14     {
15         priority=13;
16         leftF=F1;
17         rightF=F2;
18         leftPriority=13;
19         rightPriority=14;
20     }
21
22     @Override
23     public String Draw(int p)
24     {
25         if (priority >= p)
26             return leftF.Draw(leftPriority)+"∨"+rightF.Draw(rightPriority);
27         else
28             return("(")+leftF.Draw(leftPriority)+"∨"+rightF.Draw(rightPriority)+")";
29     }
30
31     public List<IntroductionRule> introductionRules(){
32         List<IntroductionRule> nodes=new ArrayList<IntroductionRule>();
33         nodes.addAll(super.introductionRules()); //eredita la R.A.A.
34
35         //Introduzione sinistra dell'or
36         RuleIntroduction orIntroductionLeft=new RuleIntroduction("∨i(L)",6);
37         Node orLeft=new Node(leftF);
38         Node thisNodeL=new Node(this);
39         thisNodeL.addChild(orLeft);
40         orIntroductionLeft.tempRule=thisNodeL;
41         nodes.add(orIntroductionLeft);
42
43         //Introduzione destra dell'or
44         RuleIntroduction orIntroductionRight=new RuleIntroduction("∨i(R)",5);
45         Node orRight=new Node(rightF);
46         Node thisNodeR=new Node(this);
47         thisNodeR.addChild(orRight);
48         orIntroductionRight.tempRule=thisNodeR;
49         nodes.add(orIntroductionRight);
50
51         return nodes;
52     }
53
54     public List<EliminationRule> EliminationRules()
55     {
56         List<EliminationRule> nodes=new ArrayList<EliminationRule>();
57         nodes.add(new RuleOrElimination(this));
58         return nodes;
59     }
60
61     @Override
62     public boolean Fill(Formula Filler) {
63         if(leftF.toString().equals("_")) {
64             this.leftF = Filler;
65             return true;
66         }
67         else if(rightF.toString().equals("_")) {
68             this.rightF = Filler;
69             return true;
70         }
71         return leftF.Fill(Filler) || rightF.Fill(Filler);
72     }
73
74     @Override
75     public boolean setCursor() {
76         return leftF.setCursor() || rightF.setCursor();
77     }
78
79     @Override
80     public Formula duplicate() {
81         return new FormulaOr(leftF.duplicate(),rightF.duplicate());
82     }
83 }
84