forked from yongwen/columbia
-
Notifications
You must be signed in to change notification settings - Fork 0
/
expr.cpp
89 lines (76 loc) · 1.75 KB
/
expr.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
expr.cpp - implementation of class EXPR
$Revision: 3 $
Implements class EXPR as defined in query.h
Columbia Optimizer Framework
A Joint Research Project of Portland State University
and the Oregon Graduate Institute
Directed by Leonard Shapiro and David Maier
Supported by NSF Grants IRI-9610013 and IRI-9619977
*/
#include "stdafx.h"
#include "query.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//##ModelId=3B0C086E007F
EXPR::EXPR(OP * LogOp, EXPR * First, EXPR * Second,
EXPR * Third, EXPR * Fourth)
:Op(LogOp), arity(0)
{
if (TraceOn && !ForGlobalEpsPruning) ClassStat[C_EXPR].New();
if(First) arity++;
if(Second) arity++;
if(Third) arity++;
if(Fourth) arity++;
if(arity)
{
Inputs = new EXPR* [arity];
if(First) Inputs[0] = First;
if(Second) Inputs[1] = Second;
if(Third) Inputs[2] = Third;
if(Fourth) Inputs[3] = Fourth;
}
};
//##ModelId=3B0C086E00A7
EXPR::EXPR(OP * Op, EXPR ** inputs)
:Op(Op), Inputs(inputs), arity( Op->GetArity())
{ if (TraceOn&& !ForGlobalEpsPruning) ClassStat[C_EXPR].New(); };
//##ModelId=3B0C086E00B1
EXPR::EXPR( EXPR& Expr)
:Op(Expr.GetOp()->Clone()), arity(Expr.GetArity())
{
if (TraceOn&& !ForGlobalEpsPruning) ClassStat[C_EXPR].New();
if(arity)
{
Inputs = new EXPR* [arity];
for(int i=0; i<arity; i++) Inputs[i] = new EXPR( *(Expr.GetInput(i)) );
}
}
//##ModelId=3B0C086E00BB
EXPR::~EXPR()
{
if (TraceOn&& !ForGlobalEpsPruning) ClassStat[C_EXPR].Delete();
delete Op; Op = NULL;
if(arity)
{
for(int i=0;i<arity;i++) delete Inputs[i];
delete [] Inputs;
}
};
// dump function
//##ModelId=3B0C086E00DA
CString EXPR::Dump()
{
CString os;
os += "(" ;
os += (*Op).Dump();
int i;
for(i=0; i<arity; i++)
{
os += "," ;
os += Inputs[i]->Dump();
}
os += ")";
return os;
}