OSDN Git Service

adds README
[qcad/qcad.git] / compiler / QCompilerCntl.cpp
1 //----------------------------------------------------------------------------\r
2 //  Compile intermediates into list of the calc units\r
3 //----------------------------------------------------------------------------\r
4 #ifdef __BORLANDC__\r
5 #include <vcl.h>\r
6 #pragma hdrstop\r
7 #endif //__BORLANDC__\r
8 \r
9 #include <iostream>\r
10 #include <vector>\r
11 #include "QCompiler.h"\r
12 #include "QCompilerCntl.h"\r
13 #include "QParseInfo.h"\r
14 #include "QCalcUnit.h"\r
15 \r
16 #include "QC_not.h"\r
17 #include "QC_hadamard.h"\r
18 #include "QC_cnot.h"\r
19 #include "QC_crot.h"\r
20 #include "QC_rot.h"\r
21 #include "QC_ccnot.h"\r
22 #include "QC_pauliX.h"\r
23 #include "QC_pauliY.h"\r
24 #include "QC_pauliZ.h"\r
25 #include "QC_swap.h"\r
26 #include "QC_measure.h"\r
27 \r
28 // ---------------------------------------------------------------------------\r
29 #ifdef __BORLANDC__\r
30 #pragma package(smart_init)\r
31 #endif //__BORLANDC__\r
32 \r
33 //----------------------------------------------------------------------------\r
34 /**\r
35  *\r
36  */\r
37 QCompilerCntl::QCompilerCntl(void) : QCompiler() {\r
38   mNumOfQBits = 0;\r
39   mQParseInfo.clear();\r
40 }\r
41 //----------------------------------------------------------------------------\r
42 /**\r
43  *\r
44  */\r
45 QCompilerCntl::QCompilerCntl(std::istream &is) : QCompiler(is) {\r
46   mNumOfQBits = 0;\r
47   mQParseInfo.clear();\r
48 }\r
49 //----------------------------------------------------------------------------\r
50 /**\r
51  *\r
52  */\r
53 QCompilerCntl::~QCompilerCntl() {\r
54   mQParseInfo.clear();\r
55 }\r
56 //----------------------------------------------------------------------------\r
57 /**\r
58  *\r
59  */\r
60 QCalcUnit *\r
61 QCompilerCntl::AllocateControl(const unsigned int index) {\r
62   if (index >= mQParseInfo.size()) {\r
63     return NULL; // Error\r
64   }\r
65   QCalcUnit *cu = NULL;\r
66   const std::vector<int> &targets = mQParseInfo[index].QParseInfo::getTargetIndices();\r
67   switch (mQParseInfo[index].getOperator()) {\r
68   case cn_cnot:\r
69     cu = new QC_cnot(targets[0], targets[1]);\r
70     break;\r
71   case cn_crot:\r
72     cu = new QC_crot(targets[0], targets[1], mQParseInfo[index].getRotation());\r
73     break;\r
74   case cn_rot:\r
75     cu = new QC_rot(targets[0], mQParseInfo[index].getRotation());\r
76     break;\r
77   case cn_h:\r
78     cu = new QC_hadamard(targets[0]);\r
79     break;\r
80   case cn_m:\r
81     cu = new QC_measure(targets[0]);\r
82     break;\r
83   case cn_swap:\r
84     cu = new QC_swap(targets[0], targets[1]);\r
85     break;\r
86   case cn_x:\r
87     cu = new QC_pauliX(targets[0]);\r
88     break;\r
89   case cn_y:\r
90     cu = new QC_pauliY(targets[0]);\r
91     break;\r
92   case cn_z:\r
93     cu = new QC_pauliZ(targets[0]);\r
94     break;\r
95   case cn_not:\r
96     cu = new QC_not(targets[0]);\r
97     break;\r
98   case cn_ccnot:\r
99     cu = new QC_ccnot(targets[0], targets[1], targets[2]);\r
100     break;\r
101   case cn_init:\r
102     mNumOfQBits = targets[0];\r
103   default:\r
104     break;\r
105   }\r
106   return cu;\r
107 }\r
108 //----------------------------------------------------------------------------\r
109 /**\r
110  *\r
111  */\r
112 bool\r
113 QCompilerCntl::CompileOneLine(const QParseInfo &pinfo) {\r
114   if (!pinfo.getParseResult()) {\r
115     return false;\r
116   }\r
117   mQParseInfo.push_back(pinfo);\r
118   return true;\r
119 }\r
120 //----------------------------------------------------------------------------\r
121 /**\r
122  *\r
123  */\r
124 void\r
125 QCompilerCntl::CatchError(const QParseInfo &pinfo, const int at) {\r
126 #ifdef __BORLANDC__\r
127   //ShowMessage(IntToStr(pinfo.getErrorNo()));\r
128 #else\r
129   std::cerr << "Parse error occurred at line " << at << "\n"\r
130             << "Error code = " << pinfo.getErrorNo() << "\n";\r
131 #endif //__BORLANDC__\r
132   //TODO:\r
133 }\r
134 //----------------------------------------------------------------------------\r