Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/calcunits/QCalcManager.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, 8 months ago) by kaityo
File MIME type: text/x-c++src
File size: 2553 byte(s)
First commit
1 //---------------------------------------------------------------------------
2 // Management Class of QCalcUnit
3 //---------------------------------------------------------------------------
4 #include <iostream>
5 #include <vector>
6
7 #include "QCalcManager.h"
8 #include "QCompilerCntl.h"
9 #include "QCalcUnit.h"
10 #include "QBits.h"
11 //---------------------------------------------------------------------------
12 /**
13 * Constructor
14 */
15 QCalcManager::QCalcManager(void) {
16 mNumberOfQBits = 0;
17 mQCalcUnits.clear();
18 }
19 //---------------------------------------------------------------------------
20 /**
21 * Constructor
22 */
23 QCalcManager::QCalcManager(std::istream &is){
24 mNumberOfQBits = 0;
25 mQCalcUnits.clear();
26 AddFromIntermediate(is);
27 }
28 //---------------------------------------------------------------------------
29 /**
30 * Destructor
31 */
32 QCalcManager::~QCalcManager(){
33 DeleteAll();
34 }
35 //---------------------------------------------------------------------------
36 // Interfaces
37 //---------------------------------------------------------------------------
38 /**
39 * Compile intermediate
40 */
41 bool
42 QCalcManager::AddFromIntermediate(std::istream &is) {
43 QCompilerCntl qccntl(is);
44 QCalcUnit *cu;
45 DeleteAll();
46 if (true == qccntl.Compile()) {
47 unsigned int cntl_size = qccntl.GetNumberOfControl();
48 for (unsigned int i = 0; i < cntl_size; i++) {
49 cu = qccntl.AllocateControl(i);
50 if (NULL != cu) mQCalcUnits.push_back(cu);
51 }
52 mNumberOfQBits = qccntl.GetNumberOfQBits();
53 return true;
54 }else{
55 return false;
56 }
57 }
58 //---------------------------------------------------------------------------
59 /**
60 * Calculate
61 */
62 void
63 QCalcManager::Calc(QBits * const qBits) {
64 if (qBits->GetNumberOfQBits() >= mNumberOfQBits) {
65 int unit_count = mQCalcUnits.size();
66 for (int i = 0; i < unit_count; i++) {
67 mQCalcUnits[i]->Calc(qBits);
68 }
69 } else {
70 //TODO: Error
71 }
72 }
73 //---------------------------------------------------------------------------
74 /**
75 * AddUnit
76 */
77 void
78 QCalcManager::AddUnit(QCalcUnit *qc) {
79 if (qc) {
80 mQCalcUnits.push_back(qc);
81 }
82 }
83 //---------------------------------------------------------------------------
84 /**
85 * Delete units
86 */
87 void
88 QCalcManager::DeleteAll(void) {
89 mNumberOfQBits = 0;
90 int vec_size = mQCalcUnits.size();
91 for (int i = 0; i < vec_size; i++) {
92 delete mQCalcUnits[i];
93 }
94 mQCalcUnits.clear();
95 }
96 //---------------------------------------------------------------------------

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