Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/circuits/QCnot.cpp

Parent Directory Parent Directory | Revision Log Revision Log


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

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26