Skip to content
Snippets Groups Projects

Bugfix/issue #3: fix header writing and 3c-code dimension descriptors

9 files
+ 152
54
Compare changes
  • Side-by-side
  • Inline

Files

+ 85
22
@@ -23,9 +23,9 @@
#include "bitmat.hh"
#include "hamming743.hh"
#define CODE3C_MODEL_1 0 /*< */
#define CODE3C_MODEL_2 1 /*< */
#define CODE3C_MODEL_3 2 /*< */
#define CODE3C_MODEL_WB 0 /*< */
#define CODE3C_MODEL_WB2C 1 /*< */
#define CODE3C_MODEL_WB6C 2 /*< */
#define CODE3C_COLORMODE_WB 1, 1 /*< WHITE AND BLACK: 1bit per pattern */
#define CODE3C_COLORMODE_WB2C 2, 3 /*< WHITE, BLACK AND TWO COLORS: 2bits */
@@ -35,7 +35,7 @@
#define CODE3C_ERRLVL_B 1 // 33%
#ifdef CODE3C_DEBUG
#define cDebug(x...) printf(x)
#define cDebug(x...) printf("[debug] " x)
#else
#define cDebug(x...)
#endif
@@ -45,6 +45,7 @@ namespace code3c
static struct CODE3C_MODEL_DESC { /* NOLINT */
int model_id;
unsigned bitl, mask;
const char* default_logo;
struct CODE3C_MODEL_DIMENSION { /* NOLINT */
const int rev, absRad, effRad, deltaRad;
const int axis_t = rev*2, axis_r = effRad/deltaRad;
@@ -58,36 +59,87 @@ namespace code3c
} code3c_models[3] = {
{
0, CODE3C_COLORMODE_WB,
"3ccode-wb.png",
{
{30, 50, 20, 4}, // 30 slices, 20 units, 4 units per data
{30, 60, 30, 2}, // 60 slices, 30 units, 2 units per data
{60, 100, 60, 2}, // 120 slices, 60 units, 2 units per data
{90, 140, 80, 2} // 180 slices, 80 units, 2 units per data
{30, 60, 30, 3}, /** 60 slices, 30 units, 3 units per data
* dimension 120x120 (pu²)
* header 20 bits
* 542 bits (67 B)
*/
{30, 60, 30, 2}, /** 60 slices, 30 units, 2 units per data
* dimension 120x120 (pu²)
* header 30 bits
* 827 bits (103 B)
*/
{90, 100, 60, 3}, /** 180 slices, 60 units, 3 units per data
* dimension 200x200 (pu²)
* header 40 bits
* 3,452 bits (431 B)
*/
{90, 140, 90, 2} /** 180 slices, 90 units, 2 units per data
* dimension 280x280 (pu²)
* header 90 bits
* 7,877 bits (984 B)
*/
}
},
{
1, CODE3C_COLORMODE_WB2C,
"3ccode-wb2c.png",
{
{30, 50, 20, 4}, // 30 slices, 20 units, 4 units per data
{30, 60, 30, 2}, // 60 slices, 30 units, 2 units per data
{60, 100, 60, 2}, // 120 slices, 60 units, 2 units per data
{90, 120, 80, 2} // 180 slices, 80 units, 2 units per data
{30, 50, 24, 3}, /** 60 slices, 24 units, 3 units per data
* dimension 100x100 (pu²)
* header 16 bits
* 856 bits (107 B)
*/
{30, 60, 30, 2}, /** 60 slices, 20 units, 2 units per data
* dimension 120x120 (pu²)
* header 30 bits
* 1,654 bits (206 B)
*/
{90, 100, 60, 3}, /** 180 slices, 60 units, 3 units per data
* dimension 200x200 (pu²)
* header 40 bits
* 6,904 bits (863 B)
*/
{90, 140, 90, 2} /** 180 slices, 90 units, 2 units per data
* dimension 280x280 (pu²)
* header 90 bits
* 15,754 bits (1,969 B)
*/
}
},
{
2, CODE3C_COLORMODE_WB6C,
"3ccode-wb6c.png",
{
{30, 50, 20, 4}, // 30 slices, 20 units, 4 units per data
{30, 60, 30, 2}, // 60 slices, 30 units, 2 units per data
{60, 100, 60, 2}, // 120 slices, 60 units, 2 units per data
{90, 120, 80, 2} // 180 slices, 80 units, 2 units per data
{30, 50, 21, 3}, /** 60 slices, 21 units, 3 units per data
* dimension 100x100 (pu²)
* header 14 bits
* 1,113 bits (139 B)
*/
{30, 60, 30, 2}, /** 60 slices, 30 units, 2 units per data
* dimension 120x120 (pu²)
* header 30 bits
* 2,481 bits (310 B)
*/
{90, 100, 60, 3}, /** 180 slices, 60 units, 3 units per data
* dimension 200x200 (pu²)
* header 40 bits
* 10,356 bits (1,294 B)
*/
{90, 140, 90, 2} /** 180 slices, 90 units, 2 units per data
* dimension 280x280 (pu²)
* header 90 bits
* 23,631 bits (2,953 B)
*/
}
}
};
#define CODE3C_MODEL_DESC_1 code3c::code3c_models[CODE3C_MODEL_1];
#define CODE3C_MODEL_DESC_2 code3c::code3c_models[CODE3C_MODEL_2];
#define CODE3C_MODEL_DESC_3 code3c::code3c_models[CODE3C_MODEL_3];
#define CODE3C_MODEL_DESC_1 code3c::code3c_models[CODE3C_MODEL_WB];
#define CODE3C_MODEL_DESC_2 code3c::code3c_models[CODE3C_MODEL_WB2C];
#define CODE3C_MODEL_DESC_3 code3c::code3c_models[CODE3C_MODEL_WB6C];
class Code3C
{
@@ -161,10 +213,21 @@ namespace code3c
size_t m_datalen;
int m_errmodel;
CODE3C_MODEL_DESC& m_desc;
const CODE3C_MODEL_DESC& m_desc;
const CODE3C_MODEL_DESC::CODE3C_MODEL_DIMENSION& m_dim;
struct header final
{
uint64_t id, err, huff; /*< identifiers */
size_t dlen; /*< data length */
uint32_t meta_dlen_bitl; /*< dlen length (bit) */
uint32_t meta_head_bitl = 6; /*< header length (bit) */
uint32_t meta_full_bitl = meta_head_bitl+meta_dlen_bitl;
char operator[](uint32_t i) const;
} m_header;
Code3CData m_dataMat;
// HuffmanTable m_huftable;
// HuffmanTree m_huftree;
public:
Loading