|
@ -5,7 +5,12 @@ |
|
|
#include <fstream> |
|
|
#include <fstream> |
|
|
#include "HRD_analy.h" |
|
|
#include "HRD_analy.h" |
|
|
|
|
|
|
|
|
void HRD_analy::Output_Graph(unsigned long long Code, unsigned int square_width, unsigned int square_gap, char str[3]) { |
|
|
HRD_analy::~HRD_analy() { |
|
|
|
|
|
Free_Data(); |
|
|
|
|
|
delete[] Layer_hash; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void HRD_analy::Output_Graph(unsigned long long code, unsigned int square_width, unsigned int square_gap, char str[3]) { |
|
|
Case_cal dat; |
|
|
Case_cal dat; |
|
|
unsigned int i, j; |
|
|
unsigned int i, j; |
|
|
unsigned int x, y; |
|
|
unsigned int x, y; |
|
@ -24,7 +29,7 @@ void HRD_analy::Output_Graph(unsigned long long Code, unsigned int square_width, |
|
|
exclude[x][y] = false; |
|
|
exclude[x][y] = false; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
Parse_Code(dat, Code); |
|
|
Parse_Code(dat, code); |
|
|
for (y = 0; y < 5; y++) { // 遍历20个格
|
|
|
for (y = 0; y < 5; y++) { // 遍历20个格
|
|
|
for (x = 0; x < 4; x++) { |
|
|
for (x = 0; x < 4; x++) { |
|
|
if (exclude[x][y] || dat.status[x][y] == 0xFE) {continue;} // 该格为空或已被占用
|
|
|
if (exclude[x][y] || dat.status[x][y] == 0xFE) {continue;} // 该格为空或已被占用
|
|
@ -270,6 +275,8 @@ void HRD_analy::Free_Data() { // 释放上一次的计算结果 |
|
|
unsigned int i, j; |
|
|
unsigned int i, j; |
|
|
for (i = 0; i < Layer.size(); i++) { // 释放Layer中指向的全部节点
|
|
|
for (i = 0; i < Layer.size(); i++) { // 释放Layer中指向的全部节点
|
|
|
for (j = 0; j < Layer[i].size(); j++) { |
|
|
for (j = 0; j < Layer[i].size(); j++) { |
|
|
|
|
|
Layer[i][j]->source_case->clear(); |
|
|
|
|
|
Layer[i][j]->next_case->clear(); |
|
|
delete Layer[i][j]->source_case; |
|
|
delete Layer[i][j]->source_case; |
|
|
delete Layer[i][j]->next_case; |
|
|
delete Layer[i][j]->next_case; |
|
|
delete Layer[i][j]; |
|
|
delete Layer[i][j]; |
|
@ -600,15 +607,15 @@ void HRD_analy::Get_Code(Case_cal &dat) { // 获取编码并存储在dat.code |
|
|
dat.code &= 0xFFFFFFFFF; // 清除高28位内容
|
|
|
dat.code &= 0xFFFFFFFFF; // 清除高28位内容
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool HRD_analy::Parse_Code(unsigned long long Code) { // 外部解析函数 结果储存在Parse_dat 返回编码正确性
|
|
|
bool HRD_analy::Parse_Code(unsigned long long code) { // 外部解析函数 结果储存在Parse_dat 返回编码正确性
|
|
|
Parse_dat.layer_num = Parse_dat.layer_index = 0; |
|
|
Parse_dat.layer_num = Parse_dat.layer_index = 0; |
|
|
return Parse_Code(Parse_dat, Code); |
|
|
return Parse_Code(Parse_dat, code); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool HRD_analy::Parse_Code(Case_cal &dat, unsigned long long Code) { // 解析编码 返回false表示编码有误
|
|
|
bool HRD_analy::Parse_Code(Case_cal &dat, unsigned long long code) { // 解析编码 返回false表示编码有误
|
|
|
unsigned char range[16]; // dat低32位分16组
|
|
|
unsigned char range[16]; // dat低32位分16组
|
|
|
int i, x, y, num, space_num = 0; |
|
|
int i, x, y, num, space_num = 0; |
|
|
dat.code = Code; |
|
|
dat.code = code; |
|
|
for (x = 0; x < 4; x++) { // 初始化status和freeze
|
|
|
for (x = 0; x < 4; x++) { // 初始化status和freeze
|
|
|
for (y = 0; y < 5; y++) { |
|
|
for (y = 0; y < 5; y++) { |
|
|
dat.status[x][y] = 0xFF; |
|
|
dat.status[x][y] = 0xFF; |
|
@ -620,16 +627,16 @@ bool HRD_analy::Parse_Code(Case_cal &dat, unsigned long long Code) { // 解析 |
|
|
} |
|
|
} |
|
|
num = 0; |
|
|
num = 0; |
|
|
for (i = 15; i >= 0; i--) { // 载入排列到range
|
|
|
for (i = 15; i >= 0; i--) { // 载入排列到range
|
|
|
range[i] = Code & 0x3; |
|
|
range[i] = code & 0x3; |
|
|
if (range[i] == 0) {num++;} |
|
|
if (range[i] == 0) {num++;} |
|
|
Code >>= 2; |
|
|
code >>= 2; |
|
|
} |
|
|
} |
|
|
if (num < 2) {return false;} // 0的个数低于两个出错
|
|
|
if (num < 2) {return false;} // 0的个数低于两个出错
|
|
|
if (Code > 14) {return false;} // 排除越界情况
|
|
|
if (code > 14) {return false;} // 排除越界情况
|
|
|
if (Code % 4 == 3) {return false;} |
|
|
if (code % 4 == 3) {return false;} |
|
|
dat.type[0] = 0; // 载入2 * 2方块
|
|
|
dat.type[0] = 0; // 载入2 * 2方块
|
|
|
x = Code % 4; |
|
|
x = code % 4; |
|
|
y = Code / 4; |
|
|
y = code / 4; |
|
|
dat.status[x][y] = dat.status[x + 1][y] = dat.status[x][y + 1] = dat.status[x + 1][y + 1] = 0; |
|
|
dat.status[x][y] = dat.status[x + 1][y] = dat.status[x][y + 1] = dat.status[x + 1][y + 1] = 0; |
|
|
num = x = y = 0; |
|
|
num = x = y = 0; |
|
|
for (i = 0; i < 16; i++) { |
|
|
for (i = 0; i < 16; i++) { |
|
|