-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdefs.h
85 lines (83 loc) · 3.29 KB
/
defs.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "common.h"
/*все определения в defs.cpp*/
/*я сам плохо понимаю (спустя год) как это работает*/
class Cell;
class sNum;
struct Suset//sudoku set
{
Cell * c[NNmax];//самостоятельно
Cell * cs[NNmax];//тоже что c, только сортированное
//используется при создании пересечений в U1init()
void sort();
sNum * n[NNmax];/*как контейнер для n*/
int cc[NNmax], nc[NNmax];//размер-1 конфигурации, в которой учавствует
//соответствующая клетка или цифра
//размер конфигурации - кол-во множеств, к которым принадлежит данная клетка или цифра
//(для цифр это 1)
// и их нельзя запихнуть в Cell & sNum т.к. нельзя запихнуть в Cell
//т.к. 1 Cell содержится в разных сусетах, а cc - относится персонально к одному сусету
const char * name;//самостоятельно
//
Suset(string alphabet[]);
Suset();//никогда не используется
~Suset();
Suset(const Suset &x);
void copy(Suset *);
//проверяет, чтобы совпадали имена sourc'a & dest'a
//для n - Suset это контейнер
//c - не копируется
private:
Suset & operator=(Suset &);
};
class sNum
{
friend class Cell;
int x;
public:
int nbit;//readonly
Suset * inset;//указатель на сусет, в котором этот sNum
int insetpos;//номер этого sNum'a в этом сусете
const char * name;
//-----
sNum();
//конструктор копирования - по умолчанию
void copy(sNum * pn);
operator int()const { return x; }
sNum & operator=(int xx);
sNum & operator&=(int xx)
{ return *this = *this&xx; }
sNum & operator|=(int xx)
{ return *this = *this|xx; }
sNum & disable(int i);
private:
sNum & operator=(const sNum &);
};
#define MAX_CELLS_IN_SUSET 100
class Cell
{
friend class sNum;
int x;
public:
int nbit;//readonly
//макс число сусетов, в котором может состоять целл
Suset * inset[MAX_CELLS_IN_SUSET];//указатель на сусеты, в которых этот Cell
int insetpos[MAX_CELLS_IN_SUSET];//номера позиций в этих сусетах
const char * name;
//-----
Cell();//устанавливает все NN битов в 1
//конструктор копирования - по умолчанию
void copy(Cell * pc);
//проверяет, чтобы совпадали имена sourc'a & dest'a
//копирует x & nbit
operator int()const { return x; }
Cell & operator=(int xx);
//присваивает x и соответственно меняет nbit
//корректно работает только после конструирования
Cell & operator&=(int xx)
{ return *this = *this&xx; }
Cell & operator|=(int xx)
{ return *this = *this|xx; }
Cell & disable(int i);
private:
Cell & operator=(const Cell &);//через opertor=(int) это делается
};