circuit.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <QStringList>
00018 #include <QRegExp>
00019
00020 #include "tcglobal.h"
00021 #include "circuit.h"
00022
00023
00024
00025 Circuit::Circuit()
00026 {
00027 _status = Unknown;
00028 _isValid = false;
00029 }
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 Circuit::Circuit(const QString &circuit)
00040 {
00041 QStringList parts = circuit.split(" ", QString::SkipEmptyParts);
00042 if (parts.size() >= 2) {
00043
00044 _circId = parts.at(0);
00045 if (! isValidCircuitId(_circId))
00046 goto err;
00047
00048
00049 _status = Circuit::toStatus(parts.at(1));
00050
00051
00052 if (parts.size() > 2) {
00053 foreach (QString hop, parts.at(2).split(",")) {
00054 QStringList parts = hop.split(QRegExp("[=~]"));
00055 if (parts.size() != 2)
00056 goto err;
00057
00058 _ids << parts.at(0).mid(1);
00059 _names << parts.at(1);
00060 }
00061 }
00062
00063 _isValid = true;
00064 }
00065 return;
00066
00067 err:
00068 tc::warn("Improperly formatted circuit: '%1'").arg(circuit);
00069 _isValid = false;
00070 }
00071
00072
00073
00074 bool
00075 Circuit::isValidCircuitId(const CircuitId &circId)
00076 {
00077 int length = circId.length();
00078 if (length < 1 || length > 16)
00079 return false;
00080
00081 for (int i = 0; i < length; i++) {
00082 char c = circId[i].toAscii();
00083 if (c < '0' && c > '9' && c < 'A' && c > 'Z' && c < 'a' && c > 'z')
00084 return false;
00085 }
00086 return true;
00087 }
00088
00089
00090 Circuit::Status
00091 Circuit::toStatus(const QString &status)
00092 {
00093 if (!status.compare("LAUNCHED", Qt::CaseInsensitive))
00094 return Launched;
00095 if (!status.compare("BUILT", Qt::CaseInsensitive))
00096 return Built;
00097 if (!status.compare("EXTENDED", Qt::CaseInsensitive))
00098 return Extended;
00099 if (!status.compare("FAILED", Qt::CaseInsensitive))
00100 return Failed;
00101 if (!status.compare("CLOSED", Qt::CaseInsensitive))
00102 return Closed;
00103 return Unknown;
00104 }
00105
00106
00107 QString
00108 Circuit::statusString() const
00109 {
00110 QString status;
00111 switch (_status) {
00112 case Launched: status = tr("New"); break;
00113 case Built: status = tr("Open"); break;
00114 case Extended: status = tr("Building"); break;
00115 case Failed: status = tr("Failed"); break;
00116 case Closed: status = tr("Closed"); break;
00117 default: status = tr("Unknown"); break;
00118 }
00119 return status;
00120 }
00121