94 lines
2.0 KiB
C++
94 lines
2.0 KiB
C++
#ifndef SVKERNELV2_H
|
|
#define SVKERNELV2_H
|
|
|
|
#include "svabstractkernel.h"
|
|
|
|
#define sign(a) (a == 0 ? 0 : (a > 0 ? 1 : -1))
|
|
|
|
class SvKernelV2: public SvAbstractKernel
|
|
{
|
|
|
|
private:
|
|
unsigned short* m_figures = {
|
|
0b000111000, // TYPE_0
|
|
|
|
0b100011000, // TYPE_11_1
|
|
0b110011000, // TYPE_22_2_1
|
|
0b000110011, // TYPE_22_2_2
|
|
0b000110001, // TYPE_33_3
|
|
0b100010001, // TYPE_45
|
|
|
|
0b010010001, // TYPE_56_1
|
|
0b100110010, // TYPE_67_2_1
|
|
0b010011001, // TYPE_67_2_2
|
|
0b100010010, // TYPE_78_3
|
|
0b010010010, // TYPE_90
|
|
|
|
0b001010010, // TYPE_101_1
|
|
0b001011010, // TYPE_112_2_1
|
|
0b010110100, // TYPE_112_2_2
|
|
0b010010100, // TYPE_123_3
|
|
0b001010100, // TYPE_135
|
|
|
|
0b000011100, // TYPE_146_1
|
|
0b000011110, // TYPE_157_2_1
|
|
0b011110000, // TYPE_157_2_2
|
|
0b001110000, // TYPE_168_3
|
|
};
|
|
|
|
public:
|
|
enum FigureType {
|
|
TYPE_NONE = 0,
|
|
|
|
TYPE_0, // 000
|
|
// 111
|
|
// 000
|
|
|
|
TYPE_11_1, // 100
|
|
// 011
|
|
// 000
|
|
|
|
TYPE_22_2_1,// 110
|
|
// 011
|
|
// 000
|
|
|
|
TYPE_22_2_2,// 000
|
|
// 110
|
|
// 011
|
|
|
|
TYPE_33_3, // 000
|
|
// 110
|
|
// 001
|
|
|
|
TYPE_45, // 100
|
|
// 010
|
|
// 001
|
|
|
|
TYPE_56_1, // 010
|
|
// 010
|
|
// 001
|
|
TYPE_67_2_1,
|
|
TYPE_67_2_2,
|
|
TYPE_78_3,
|
|
TYPE_90,
|
|
TYPE_101_1,
|
|
TYPE_112_2_1,
|
|
TYPE_112_2_2,
|
|
TYPE_123_3,
|
|
TYPE_135,
|
|
TYPE_146_1,
|
|
TYPE_157_2_1,
|
|
TYPE_157_2_2,
|
|
TYPE_168_3
|
|
};
|
|
|
|
SvKernelV2();
|
|
virtual ~SvKernelV2();
|
|
void exec(int line) override;
|
|
|
|
int max(int x, int y);
|
|
unsigned int figureType(int x, int y, int level);
|
|
};
|
|
|
|
#endif // SVKERNELV2_H
|