-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQAmiensRSegment.hpp
119 lines (69 loc) · 2.31 KB
/
QAmiensRSegment.hpp
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#pragma once
#include <cstdint>
#include <vector>
namespace QAmiensRCodeGeneration {
/*
* Représente une chaine de caractères qui doit être codée en QAmiensRCode.
* Chaque segment a un mode et une séquence de caractères en bits.
* Ici on a pas de restriction de longueur mais pour des vrais QAmiensRCode (comprenez les QR Code) il y en a.
* On peut mettre au max 7 089 caractères, et si c'est plus long… tant pis on coupe !
*/
class QAmiensRSegment final {
// Le champ mode d'un segment est immuable et fournit des méthodes pour récupérer des valeurs étroitement liées.
public:
class Mode final {
// Constantes
public:
static const Mode NUMERIQUE;
static const Mode ALPHANUMERIQUE;
static const Mode OCTET;
// Champs
// Le mode est représenté par 4 bits.
public:
const int modeBits;
private:
int indicNbCar[3];
// Constructeur
private:
Mode(int mode, int indicNbCar0, int indicNbCar1, int indicNbCar2);
// Méthode
// Renvoie la largeur de bit du champ de comptage de caractères de segment pour cet objet mode au numéro de version donné.
public:
int indicNbBits(int version) const;
};
// Fonctions publiques
public:
// Mode octet
static QAmiensRSegment faireOctet(const std::vector<uint8_t> &donnee);
// Mode numérique
static QAmiensRSegment faireNumerique(const char *digits);
// Mode alphanumérique
static QAmiensRSegment faireAlphanumerique(const char *text);
// Mode Kanji
static std::vector<QAmiensRSegment> faireSegments(const char *text);
// Fonctions statiques du helper
public:
// Teste si on peut encoder en alphanumérique
static bool estAlphanumerique(const char *text);
// Teste si on peut encoder en numérique
static bool estNumerique(const char *text);
// Champs d'instance
public:
// Mode de la séquence
const Mode mode;
// Nombre de caractères
const int numChars;
// Séquence en bits
const std::vector<uint8_t> donnee;
// Nombre de bits
const int bitLength;
// Constructeur
public:
QAmiensRSegment(const Mode &md, int numCh, const std::vector<uint8_t> &b, int bitLen);
static int getTotalBits(const std::vector<QAmiensRSegment> &segs, int version);
// Petite constante privée oklm
private:
// Table ASCII des caractères numériques
static const int8_t TABLE_ENCODAGE_ALPHANUMERIQUE[59];
};
}