00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "model/genesisgamegeniecode.hh"
00026
00027 using namespace ggencoder;
00028
00029 const char GenesisGameGenieCode::ALPHABET[] = {
00030 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
00031 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S',
00032 'T', 'V', 'W', 'X', 'Y', 'Z', '0', '1',
00033 '2', '3', '4', '5', '6', '7', '8', '9'
00034 };
00035
00036 GenesisGameGenieCode GenesisGameGenieCode::create(const QString &code)
00037 throw(InvalidGameGenieCodeException) {
00038 if (isValidCode(code)) {
00039 return GenesisGameGenieCode(code);
00040 }
00041
00042 throw InvalidGameGenieCodeException();
00043 }
00044
00045 const char *GenesisGameGenieCode::getAlphabet() const {
00046 return ALPHABET;
00047 }
00048
00049 bool GenesisGameGenieCode::isValidCode(const QString &code) {
00050 GenesisGameGenieCode temp(code);
00051
00052 const char *alphabet = temp.getAlphabet();
00053 int count = temp.getAlphabetCount();
00054
00055 QString upper = code.toUpper();
00056 int length = upper.length();
00057
00058 if (length != 9) {
00059 return false;
00060 }
00061
00062 if (code[4] != '-') {
00063 return false;
00064 }
00065
00066 for (int i = 0; i < length; i++) {
00067 if (i == 4) {
00068 continue;
00069 }
00070
00071 bool found = false;
00072 QChar ch = code[i];
00073 char letter = ch.toAscii();
00074
00075 for (int j = 0; j < count; j++) {
00076 if (letter == alphabet[j]) {
00077 found = true;
00078 break;
00079 }
00080 }
00081
00082 if (!found) {
00083 return false;
00084 }
00085 }
00086
00087 return true;
00088 }
00089