aboutsummaryrefslogtreecommitdiff
path: root/src/solvers/tables.h
diff options
context:
space:
mode:
authorenricotenuti <tenutz_27@outlook.it>2024-09-29 12:42:31 +0200
committerenricotenuti <tenutz_27@outlook.it>2024-09-29 12:42:31 +0200
commit7a52b4cd50a40e4bce919b6bd51203d0e9867141 (patch)
tree95ab133f9771c4791d5c784f1b3d4822b1dd7d3c /src/solvers/tables.h
parent8fcfb3a33fe053ed2032d58ecc0b5d640c155931 (diff)
parent774a824a6c80b5af495f4fb99d98758e3b9f6b81 (diff)
downloadnissy-core-7a52b4cd50a40e4bce919b6bd51203d0e9867141.tar.gz
nissy-core-7a52b4cd50a40e4bce919b6bd51203d0e9867141.zip
Merge remote-tracking branch 'upstream/master'
Merge upstream
Diffstat (limited to 'src/solvers/tables.h')
-rw-r--r--src/solvers/tables.h50
1 files changed, 27 insertions, 23 deletions
diff --git a/src/solvers/tables.h b/src/solvers/tables.h
index bad3b2c..a668988 100644
--- a/src/solvers/tables.h
+++ b/src/solvers/tables.h
@@ -7,34 +7,34 @@
7#define TABLETYPE_PRUNING 0 7#define TABLETYPE_PRUNING 0
8#define TABLETYPE_SPECIAL 1 8#define TABLETYPE_SPECIAL 1
9 9
10#define INFO_OFFSET_SOLVER 0 10#define INFO_OFFSET_DISTRIBUTION 0
11#define INFO_OFFSET_TYPE INFO_SOLVER_STRLEN 11#define INFO_OFFSET_TYPE (INFO_DISTRIBUTION_LEN * sizeof(uint64_t))
12#define INFO_OFFSET_INFOSIZE (INFO_OFFSET_TYPE + sizeof(uint64_t)) 12#define INFO_OFFSET_INFOSIZE (INFO_OFFSET_TYPE + sizeof(uint64_t))
13#define INFO_OFFSET_FULLSIZE (INFO_OFFSET_INFOSIZE + sizeof(uint64_t)) 13#define INFO_OFFSET_FULLSIZE (INFO_OFFSET_INFOSIZE + sizeof(uint64_t))
14#define INFO_OFFSET_HASH (INFO_OFFSET_FULLSIZE + sizeof(uint64_t)) 14#define INFO_OFFSET_HASH (INFO_OFFSET_FULLSIZE + sizeof(uint64_t))
15#define INFO_OFFSET_ENTRIES (INFO_OFFSET_HASH + sizeof(uint64_t)) 15#define INFO_OFFSET_ENTRIES (INFO_OFFSET_HASH + sizeof(uint64_t))
16#define INFO_OFFSET_CLASSES (INFO_OFFSET_ENTRIES + sizeof(uint64_t)) 16#define INFO_OFFSET_CLASSES (INFO_OFFSET_ENTRIES + sizeof(uint64_t))
17#define INFO_OFFSET_H48H (INFO_OFFSET_CLASSES + sizeof(uint64_t)) 17#define INFO_OFFSET_NEXT (INFO_OFFSET_CLASSES + sizeof(uint64_t))
18#define INFO_OFFSET_SOLVER (INFO_OFFSET_NEXT + sizeof(uint64_t))
19#define INFO_OFFSET_H48H (INFO_OFFSET_SOLVER + INFO_SOLVER_STRLEN)
18#define INFO_OFFSET_BITS (INFO_OFFSET_H48H + sizeof(uint8_t)) 20#define INFO_OFFSET_BITS (INFO_OFFSET_H48H + sizeof(uint8_t))
19#define INFO_OFFSET_BASE (INFO_OFFSET_BITS + sizeof(uint8_t)) 21#define INFO_OFFSET_BASE (INFO_OFFSET_BITS + sizeof(uint8_t))
20#define INFO_OFFSET_MAXVALUE (INFO_OFFSET_BASE + sizeof(uint8_t)) 22#define INFO_OFFSET_MAXVALUE (INFO_OFFSET_BASE + sizeof(uint8_t))
21#define INFO_OFFSET_NEXT (INFO_OFFSET_MAXVALUE + sizeof(uint8_t))
22#define INFO_OFFSET_DISTRIBUTION (INFO_OFFSET_NEXT + sizeof(uint64_t))
23 23
24typedef struct { 24typedef struct {
25 char solver[INFO_SOLVER_STRLEN]; 25 uint64_t distribution[INFO_DISTRIBUTION_LEN];
26 uint64_t type; 26 uint64_t type;
27 uint64_t infosize; 27 uint64_t infosize;
28 uint64_t fullsize; 28 uint64_t fullsize;
29 uint64_t hash; 29 uint64_t hash;
30 uint64_t entries; 30 uint64_t entries;
31 uint64_t classes; /* Used only by cocsepdata, for now */ 31 uint64_t classes; /* Used only by cocsepdata, for now */
32 uint64_t next;
33 char solver[INFO_SOLVER_STRLEN];
32 uint8_t h48h; /* Specific to H48 tables */ 34 uint8_t h48h; /* Specific to H48 tables */
33 uint8_t bits; 35 uint8_t bits;
34 uint8_t base; 36 uint8_t base;
35 uint8_t maxvalue; 37 uint8_t maxvalue;
36 uint64_t next;
37 uint64_t distribution[INFO_DISTRIBUTION_LEN];
38} tableinfo_t; 38} tableinfo_t;
39 39
40STATIC bool readtableinfo(const void *, tableinfo_t *); 40STATIC bool readtableinfo(const void *, tableinfo_t *);
@@ -54,21 +54,24 @@ readtableinfo(const void *buf, tableinfo_t *info)
54 return false; 54 return false;
55 } 55 }
56 56
57 memcpy(info->solver, OFFSET(buf, INFO_OFFSET_SOLVER), 57 memcpy(info->distribution, OFFSET(buf, INFO_OFFSET_DISTRIBUTION),
58 INFO_SOLVER_STRLEN); 58 INFO_DISTRIBUTION_LEN * sizeof(uint64_t));
59
59 info->type = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_TYPE); 60 info->type = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_TYPE);
60 info->infosize = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_INFOSIZE); 61 info->infosize = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_INFOSIZE);
61 info->fullsize = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_FULLSIZE); 62 info->fullsize = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_FULLSIZE);
62 info->hash = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_HASH); 63 info->hash = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_HASH);
63 info->entries = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_ENTRIES); 64 info->entries = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_ENTRIES);
64 info->classes = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_CLASSES); 65 info->classes = *(const uint64_t *)OFFSET(buf, INFO_OFFSET_CLASSES);
66 info->next = *(const uint64_t* )OFFSET(buf, INFO_OFFSET_NEXT);
67
68 memcpy(info->solver, OFFSET(buf, INFO_OFFSET_SOLVER),
69 INFO_SOLVER_STRLEN);
70
65 info->h48h = *OFFSET(buf, INFO_OFFSET_H48H); 71 info->h48h = *OFFSET(buf, INFO_OFFSET_H48H);
66 info->bits = *OFFSET(buf, INFO_OFFSET_BITS); 72 info->bits = *OFFSET(buf, INFO_OFFSET_BITS);
67 info->base = *OFFSET(buf, INFO_OFFSET_BASE); 73 info->base = *OFFSET(buf, INFO_OFFSET_BASE);
68 info->maxvalue = *OFFSET(buf, INFO_OFFSET_MAXVALUE); 74 info->maxvalue = *OFFSET(buf, INFO_OFFSET_MAXVALUE);
69 info->next = *(const uint64_t* )OFFSET(buf, INFO_OFFSET_NEXT);
70 memcpy(info->distribution, OFFSET(buf, INFO_OFFSET_DISTRIBUTION),
71 INFO_DISTRIBUTION_LEN * sizeof(uint64_t));
72 75
73 return true; 76 return true;
74} 77}
@@ -98,6 +101,17 @@ writetableinfo(const tableinfo_t *info, void *buf)
98 return false; 101 return false;
99 } 102 }
100 103
104 memcpy(OFFSET(buf, INFO_OFFSET_DISTRIBUTION), info->distribution,
105 INFO_DISTRIBUTION_LEN * sizeof(uint64_t));
106
107 *(uint64_t *)OFFSET(buf, INFO_OFFSET_TYPE) = info->type;
108 *(uint64_t *)OFFSET(buf, INFO_OFFSET_INFOSIZE) = info->infosize;
109 *(uint64_t *)OFFSET(buf, INFO_OFFSET_FULLSIZE) = info->fullsize;
110 *(uint64_t *)OFFSET(buf, INFO_OFFSET_HASH) = info->hash;
111 *(uint64_t *)OFFSET(buf, INFO_OFFSET_ENTRIES) = info->entries;
112 *(uint64_t *)OFFSET(buf, INFO_OFFSET_CLASSES) = info->classes;
113 *(uint64_t *)OFFSET(buf, INFO_OFFSET_NEXT) = info->next;
114
101 memcpy(OFFSET(buf, INFO_OFFSET_SOLVER), info->solver, 115 memcpy(OFFSET(buf, INFO_OFFSET_SOLVER), info->solver,
102 INFO_SOLVER_STRLEN); 116 INFO_SOLVER_STRLEN);
103 117
@@ -106,20 +120,10 @@ writetableinfo(const tableinfo_t *info, void *buf)
106 if (*OFFSET(buf, i) == 0) 120 if (*OFFSET(buf, i) == 0)
107 *OFFSET(buf, i) = 0; 121 *OFFSET(buf, i) = 0;
108 122
109 *(uint64_t *)OFFSET(buf, INFO_OFFSET_TYPE) = info->type;
110 *(uint64_t *)OFFSET(buf, INFO_OFFSET_INFOSIZE) = info->infosize;
111 *(uint64_t *)OFFSET(buf, INFO_OFFSET_FULLSIZE) = info->fullsize;
112 *(uint64_t *)OFFSET(buf, INFO_OFFSET_HASH) = info->hash;
113 *(uint64_t *)OFFSET(buf, INFO_OFFSET_ENTRIES) = info->entries;
114 *(uint64_t *)OFFSET(buf, INFO_OFFSET_CLASSES) = info->classes;
115 *OFFSET(buf, INFO_OFFSET_H48H) = info->h48h; 123 *OFFSET(buf, INFO_OFFSET_H48H) = info->h48h;
116 *OFFSET(buf, INFO_OFFSET_BITS) = info->bits; 124 *OFFSET(buf, INFO_OFFSET_BITS) = info->bits;
117 *OFFSET(buf, INFO_OFFSET_BASE) = info->base; 125 *OFFSET(buf, INFO_OFFSET_BASE) = info->base;
118 *OFFSET(buf, INFO_OFFSET_MAXVALUE) = info->maxvalue; 126 *OFFSET(buf, INFO_OFFSET_MAXVALUE) = info->maxvalue;
119 *(uint64_t *)OFFSET(buf, INFO_OFFSET_NEXT) = info->next;
120
121 memcpy(OFFSET(buf, INFO_OFFSET_DISTRIBUTION), info->distribution,
122 INFO_DISTRIBUTION_LEN * sizeof(uint64_t));
123 127
124 return true; 128 return true;
125} 129}

Generated with cgit - Back to sebastiano.tronto.net