OSDN Git Service

revises makefile of htdocs
[qcad/qcad.git] / circuits / QCnot.cpp
1 //---------------------------------------------------------------------------\r
2 // Controled Not\r
3 //---------------------------------------------------------------------------\r
4 #include <sstream>\r
5 #include <stdlib.h>\r
6 #include "QCnot.h"\r
7 //---------------------------------------------------------------------------\r
8 QCNot::QCNot(int x,int y) :QCircuit(x,y) {\r
9   Name = GetTypeStr();\r
10   Target = Y;\r
11 }\r
12 //---------------------------------------------------------------------------\r
13 QCNot::QCNot(int x,int y, string Param) :QCircuit(x,y) {\r
14   Name = GetTypeStr();\r
15   Target = atoi(Param.c_str());\r
16 }\r
17 //---------------------------------------------------------------------------\r
18 void\r
19 QCNot::Draw(QDraw *qDraw) {\r
20   int GridSize = qDraw->GetGridSize();\r
21   int UnitSize = qDraw->GetUnitSize();\r
22 \r
23   int tx = X;\r
24   int ty = Target;\r
25 \r
26   int tx1 = tx*GridSize + GridSize/2;\r
27   int ty1 = ty*GridSize + GridSize/2;\r
28   int tx2 = X*GridSize + GridSize/2;\r
29   int ty2 = Y*GridSize + GridSize/2;\r
30   qDraw->SetPenColor(clBlack);\r
31   qDraw->DrawLine(tx1,ty1,tx2,ty2);\r
32   qDraw->SetBrushColor(clBlack);\r
33 \r
34   qDraw->Ellipse(tx1-4,ty1-4,tx1+5,ty1+5);\r
35 \r
36 \r
37   int d = (GridSize-UnitSize)/2;\r
38   int x1 = X * GridSize+d;\r
39   int y1 = Y * GridSize+d;\r
40   int x2 = x1 + UnitSize;\r
41   int y2 = y1 + UnitSize;\r
42 \r
43   qDraw->SetBrushColor(clWhite);\r
44   qDraw->FillRect(x1,y1,x2,y2);\r
45   qDraw->SetPenColor(clBlack);\r
46   qDraw->SetBrushColor(clWhite);\r
47   qDraw->Ellipse(x1,y1,x2,y2);\r
48   qDraw->DrawLine(x1+UnitSize/2,y1,x1+UnitSize/2,y2);\r
49   qDraw->DrawLine(x1,y1+UnitSize/2,x2,y1+UnitSize/2);\r
50 }\r
51 //---------------------------------------------------------------------------\r
52 void QCNot::Reverse(int y) {\r
53   Y = y-Y;\r
54   Target = y - Target;\r
55 }\r
56 //---------------------------------------------------------------------------\r
57 string\r
58 QCNot::GetCalcText(void) {\r
59   ostringstream os;\r
60   os << "CNOT(";\r
61   os << "q[" << Y << "],";\r
62   os << "q[" << Target << "])";\r
63   return os.str();\r
64 }\r
65 //---------------------------------------------------------------------------\r
66 void\r
67 QCNot::DrawPS(QPSDraw *psDraw) {\r
68   int GridSize = psDraw->GetGridSize();\r
69   int UnitSize = psDraw->GetUnitSize();\r
70 \r
71   int tx = X;\r
72   int ty = Target;\r
73 \r
74   int tx1 = tx*GridSize + GridSize/2;\r
75   int ty1 = ty*GridSize + GridSize/2;\r
76   int tx2 = X*GridSize + GridSize/2;\r
77   int ty2 = Y*GridSize + GridSize/2;\r
78   psDraw->DrawLine(tx1,ty1,tx2,ty2);\r
79   psDraw->DrawFillCircle(tx1,ty1,4);\r
80 \r
81   int d = (GridSize-UnitSize)/2;\r
82   int x1 = X * GridSize+d;\r
83   int y1 = Y * GridSize+d;\r
84   int x2 = x1 + UnitSize;\r
85   int y2 = y1 + UnitSize;\r
86 \r
87   psDraw->FillRect(x1,y1,x2,y2);\r
88 \r
89   psDraw->DrawCircle(X*GridSize + GridSize/2,Y*GridSize + GridSize/2,UnitSize/2);\r
90   psDraw->DrawLine(x1+UnitSize/2,y1,x1+UnitSize/2,y2);\r
91   psDraw->DrawLine(x1,y1+UnitSize/2,x2,y1+UnitSize/2);\r
92 }\r
93 //---------------------------------------------------------------------------\r
94 string\r
95 QCNot::GetParam(void) {\r
96   ostringstream os;\r
97   os << Target;\r
98   return os.str();\r
99 }\r
100 //---------------------------------------------------------------------------\r
101 TRect\r
102 QCNot::GetOccupiedRect() {\r
103   TRect rc;\r
104   rc.left = X;\r
105   rc.right = X + 1;\r
106   rc.top = Y;\r
107   rc.bottom = Y + 1;\r
108   if (Target < Y) {\r
109     rc.top = Target;\r
110   } else {\r
111     rc.bottom = Target + 1;\r
112   }\r
113   return rc;\r
114 }\r
115 //---------------------------------------------------------------------------\r
116 QCircuit *\r
117 QCNot::Clone() {\r
118   QCNot * qc = new QCNot(X, Y);\r
119   qc->SetTarget(GetTarget());\r
120   return (QCircuit*)qc;\r
121 }\r
122 //---------------------------------------------------------------------------\r