Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/circuits/QSwap.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: 3497 byte(s)
First commit
1 //---------------------------------------------------------------------------
2 #include "QSwap.h"
3 #include "StrUtils.h"
4 //---------------------------------------------------------------------------
5 QSwap::QSwap(int x,int y) :QCircuit(x,y) {
6 Name = GetTypeStr();
7 Target1 = Y;
8 Target2 = Y;
9 }
10 //---------------------------------------------------------------------------
11 QSwap::QSwap(int x,int y, string param) :QCircuit(x,y) {
12 Name = GetTypeStr();
13 Target1 = Y;
14 Target2 = Y;
15 vector<string> v = StrUtils::split_str(param);
16 Target1 = atoi(v[0].c_str());
17 Target2 = atoi(v[1].c_str());
18 }
19 //---------------------------------------------------------------------------
20 void QSwap::SetTarget(int t1, int t2) {
21 if (t1 < t2) {
22 Target1 = t1;
23 Target2 = t2;
24 } else {
25 Target1 = t2;
26 Target2 = t1;
27 }
28 Y = Target1;
29 }
30 //---------------------------------------------------------------------------
31 void QSwap::Draw(QDraw *qDraw) {
32 int GridSize = qDraw->GetGridSize();
33 int UnitSize = qDraw->GetUnitSize();
34
35 int tx = X*GridSize + GridSize/2;
36 int ty1 = Target1*GridSize + GridSize/2;
37 int ty2 = Target2*GridSize + GridSize/2;
38 qDraw->SetPenColor(clBlack);
39 qDraw->DrawLine(tx,ty1,tx,ty2);
40
41 int d = (GridSize - UnitSize) / 2;
42 int x1 = X * GridSize+d;
43 int y1 = Target1 * GridSize+d;
44 int x2 = x1 + UnitSize;
45 int y2 = y1 + UnitSize;
46
47 qDraw->SetPenColor(clBlack);
48 qDraw->DrawLine(x1, y1, x2, y2);
49 qDraw->DrawLine(x1, y2, x2, y1);
50
51 y1 = Target2 * GridSize + d;
52 y2 = y1 + UnitSize;
53
54 qDraw->SetPenColor(clBlack);
55 qDraw->DrawLine(x1, y1, x2, y2);
56 qDraw->DrawLine(x1, y2, x2, y1);
57 }
58 //---------------------------------------------------------------------------
59 string
60 QSwap::GetCalcText(void) {
61 ostringstream os;
62 os << "SWAP(";
63 os << "q[" << Target1 << "],";
64 os << "q[" << Target2 << "])";
65 return os.str();
66 }
67 //---------------------------------------------------------------------------
68 void QSwap::DrawPS(QPSDraw *psDraw) {
69 int GridSize = psDraw->GetGridSize();
70 int UnitSize = psDraw->GetUnitSize();
71
72 int tx1 = X*GridSize + GridSize/2;
73
74 int ty1 = Target1*GridSize + GridSize/2;
75 int ty2 = Target2*GridSize + GridSize/2;
76 psDraw->DrawLine(tx1,ty1,tx1,ty2);
77
78
79 int d = (GridSize-UnitSize)/2;
80 int x1 = X * GridSize+d;
81 int y1 = Target1 * GridSize+d;
82 int x2 = x1 + UnitSize;
83 int y2 = y1 + UnitSize;
84
85 psDraw->DrawLine(x1, y1, x2, y2);
86 psDraw->DrawLine(x1, y2, x2, y1);
87
88 y1 = Target2 * GridSize;
89 y2 = y1 + UnitSize;
90
91 psDraw->DrawLine(x1, y1, x2, y2);
92 psDraw->DrawLine(x1, y2, x2, y1);
93 }
94 //---------------------------------------------------------------------------
95 string
96 QSwap::GetParam(void) {
97 ostringstream os;
98 os << Target1 << "," << Target2;
99 return os.str();
100 }
101 //---------------------------------------------------------------------------
102 void QSwap::Reverse(int y) {
103 Y = y - Y;
104 Target1 = y - Target1;
105 Target2 = y - Target2;
106 }
107 //---------------------------------------------------------------------------
108 TRect QSwap::GetOccupiedRect() {
109 return TRect(X, Target1, X + 1, Target2 + 1);
110 }
111 //---------------------------------------------------------------------------
112 QCircuit *QSwap::Clone() {
113 QSwap * qs = new QSwap(X, Y);
114 qs->SetTarget(this->GetTarget1(), this->GetTarget2());
115 return (QCircuit*)qs;
116 }
117 //---------------------------------------------------------------------------

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