2
* To change this license header, choose License Headers in Project Properties.
3
* To change this template file, choose Tools | Templates
4
* and open the template in the editor.
8
* File: CTLOptimizer.cpp
11
* Created on April 28, 2016, 1:54 PM
14
#include "CTLOptimizer.h"
16
CTLOptimizer::CTLOptimizer() {
19
CTLOptimizer::CTLOptimizer(const CTLOptimizer& orig) {
22
CTLOptimizer::~CTLOptimizer() {
25
CTLQuery* CTLOptimizer::Optimize(CTLQuery *query) {
26
query = OptimizeNegation(query);
30
CTLQuery* CTLOptimizer::OptimizeNegation(CTLQuery *query) {
31
CTLType query_type = query->GetQueryType();
32
if(query_type == EVAL){
35
else if (query_type == LOPERATOR){
36
if(query->GetQuantifier() != NEG){
37
query->SetFirstChild(OptimizeNegation(query->GetFirstChild()));
38
query->SetSecondChild(OptimizeNegation(query->GetSecondChild()));
41
if(query->GetFirstChild()->GetQueryType() == LOPERATOR && query->GetFirstChild()->GetQuantifier() == NEG){
42
query = query->GetFirstChild()->GetFirstChild();
43
if(query->GetQueryType() == EVAL){
46
else if(query->GetQueryType() == LOPERATOR){
47
if(query->GetQuantifier() != NEG){
48
query->SetFirstChild(OptimizeNegation(query->GetFirstChild()));
49
query->SetSecondChild(OptimizeNegation(query->GetSecondChild()));
52
query->SetFirstChild(OptimizeNegation(query->GetFirstChild()));
55
else if (query->GetQueryType() == PATHQEURY){
56
if (query->GetPath() == U){
57
query->SetFirstChild(OptimizeNegation(query->GetFirstChild()));
58
query->SetSecondChild(OptimizeNegation(query->GetSecondChild()));
61
query->SetFirstChild(OptimizeNegation(query->GetFirstChild()));
67
else if (query_type == PATHQEURY){
68
if (query->GetPath() == U){
69
query->SetFirstChild(OptimizeNegation(query->GetFirstChild()));
70
query->SetSecondChild(OptimizeNegation(query->GetSecondChild()));
73
query->SetFirstChild(OptimizeNegation(query->GetFirstChild()));